3. 星务计算机的软件架构

星务计算机的软件并不是“把地面程序搬到天上”那么简单。它要在辐射、单粒子翻转、通信时延大、能源受限、且长期无人维护的条件下,稳定完成遥测采集、遥控执行、姿态与轨道相关计算、载荷管理以及星地通信。因此,星务软件通常采用分层架构,把与硬件强耦合的部分、实时调度部分、业务功能部分和系统保障部分分开,使各层职责清晰、接口稳定、便于验证与复用。

一、分层模型:从硬件到应用的纵向切分

典型星务软件自下而上可分为四层。最底层是硬件抽象层(HAL)/板级支持包(BSP),它封装CPU、存储器、看门狗、总线控制器(如CAN、1553B、SpaceWire)和各类接口寄存器,向上提供统一的读写、中断注册和定时器接口。第二层是实时操作系统层(RTOS),负责任务调度、时间管理、任务间通信、内存管理和中断管理。第三层是中间件与服务层,包括遥测遥控服务、时间服务、文件/存储服务、总线通信服务和健康管理服务。最上层是应用层,即具体的星务功能:遥测采集、遥控指令分发、自主健康管理、载荷数据管理等。

分层的价值在于:更换CPU或总线芯片时,只需重写HAL/BSP;更换调度策略时,只影响RTOS配置;新增业务功能时,只扩展应用层。层与层之间通过明确定义的接口调用,禁止跨层直接访问硬件寄存器,这是星务软件可测试性和可维护性的基础。

二、实时操作系统:确定性优先

星务计算机对RTOS的核心要求不是“快”,而是确定性——最坏情况下的响应时间可预测。常用指标包括中断延迟、任务切换时间和调度抖动。以某星务计算机为例,若采用主频100MHz的SPARC处理器,中断延迟通常要求在10μs以内,任务切换时间在5μs以内,周期任务抖动不超过±50μs。这些参数需要在设计阶段通过静态分析和实测共同确认。

星务RTOS通常提供以下机制:基于优先级的抢占式调度、时间片轮转(同优先级)、信号量、消息队列、事件标志组、软件定时器和内存分区管理。其中内存分区尤为重要:每个任务只能访问自己的分区,防止一个任务越界破坏其他任务的数据,这对单粒子翻转环境下的故障隔离非常关键。

三、任务调度框架:周期任务与事件任务并存

星务软件的任务可分为两类:周期任务(如遥测采集、姿态控制周期计算)和事件任务(如遥控指令到达、故障告警触发)。周期任务用时间触发调度,事件任务用优先级抢占调度。一个常见的调度框架是“时间片+优先级”混合模型:将1秒划分为若干时间片,每个时间片内按优先级执行就绪任务,高优先级事件任务可抢占低优先级周期任务。

下面给出一个简化的任务配置示例,用于说明周期、优先级和栈空间的分配关系。参数为教学示例,实际值需根据处理器和任务负载调整。

任务名          周期(ms)   优先级   栈空间(B)   功能
TM_Acq          100        5        2048        遥测采集
TC_Dispatch     事件触发   3        4096        遥控指令分发
AOCS_Ctrl       50         4        8192        姿控周期计算
HK_Monitor      500        6        2048        健康监测
Bus_Service     事件触发   2        4096        总线通信服务

调度器在每个时间片开始时检查就绪队列,选择优先级最高的任务运行。若高优先级任务在运行中被更高优先级事件唤醒,则立即抢占。周期任务若未在截止时间内完成,健康管理模块应记录“超时”并触发降级或复位策略。

四、中间件:让应用与硬件解耦

中间件位于RTOS与应用之间,提供与具体硬件无关的服务接口。星务中间件通常包括:遥测遥控中间件(统一打包/解包、校验、路由)、时间中间件(星上时间同步、时间戳服务)、存储中间件(文件系统、日志、断点续传)、总线中间件(CAN/1553B/SpaceWire统一收发接口)和健康管理中间件(故障检测、隔离、恢复)。

中间件的接口应保持稳定,例如遥控中间件向上提供“注册指令处理函数”和“发送遥测包”两个核心接口,应用层不需要知道底层是1553B还是CAN。这样,当卫星平台更换总线时,应用层代码几乎不需要修改。

五、健康管理:从监测到恢复的闭环

健康管理(Fault Detection, Isolation and Recovery, FDIR)是星务软件可靠性的最后一道防线。它通常分为三层:组件级(看门狗、EDAC、CRC校验)、任务级(任务超时、栈溢出检测、心跳计数)和系统级(模式切换、安全模式进入、整机复位)。

一个典型的健康管理闭环是:监测→判断→隔离→恢复→记录。例如,若HK_Monitor任务连续3次未在500ms内完成,系统判定该任务异常,将其挂起并记录故障码,同时尝试重启该任务;若重启失败,则切换到安全模式,关闭非关键载荷,仅保留遥测和遥控通道。所有故障事件写入非易失存储,供地面分析。

星务计算机软件分层架构与健康管理闭环 分层模型(自下而上) 应用层 遥测采集 · 遥控分发 · 姿控计算 · 载荷管理 中间件与服务层 遥测遥控 · 时间 · 存储 · 总线 · 健康管理 实时操作系统层(RTOS) 任务调度 · 信号量 · 消息队列 · 内存分区 硬件抽象层 / BSP CPU · 存储器 · 看门狗 · CAN/1553B/SpaceWire 健康管理(FDIR)闭环 ① 监测 看门狗 · 心跳 · 任务超时 · CRC/EDAC ② 判断 阈值比较 · 连续次数 · 故障等级判定 ③ 隔离 挂起任务 · 关闭通道 · 切换备份 ④ 恢复 重启任务 · 进入安全模式 · 整机复位 ⑤ 记录 故障码 · 时间戳 · 非易失存储 · 地面分析 反馈与策略更新 分层架构提供结构支撑,健康管理在层间形成监测—恢复闭环,二者共同保障星务软件长期可靠运行

从工程实践看,分层模型解决“结构清晰”的问题,RTOS解决“时间确定”的问题,任务调度框架解决“谁先运行”的问题,中间件解决“硬件解耦”的问题,健康管理解决“出错后怎么办”的问题。五者不是孤立模块,而是相互支撑的整体:调度框架依赖RTOS的优先级机制,健康管理依赖中间件提供的监测接口,而中间件又运行在RTOS之上。设计时应先明确各层接口和任务时序,再逐层实现和验证,避免把业务逻辑直接写进中断服务程序或HAL中。

在星务软件设计评审中,建议重点检查三件事:每个周期任务的最坏执行时间是否小于其周期;每个任务是否有独立的栈空间和内存分区;健康管理是否覆盖了任务级、组件级和系统级三个层次。这三项直接决定软件在轨长期运行的稳定性。