8.2.1 软件顶层设计
星载计算机软件开发时,首先需要顶层架构分析与设计,然后根据现有的硬件资源和软件需求,合理分配硬件资源、细化软件模块组成、制定软件运行模式和规划软件运行时序等。
1)资源配置
星载计算机软件使用的硬件资源主要包括以下几方面:
(1)处理器内部资源。通常有内部程序和数据存储器、串口、中断、定时器、Cache和EDAC等。
(2)处理器外围扩展设备。通常有外部RAM、EEPROM和Flash等,可以挂载在处理器外部存储扩展接口,也可以通过I2C、SPI总线接口等进行扩展。
(3)单机外部通信接口。通常采用1553B总线、CAN总线、RS-422总线和GPIO接口等。
2)拓扑结构
不同于人机交互的桌面应用软件,星载计算机软件最重要的一点是软件跟硬件的紧密耦合特性,这样就给软件设计人员带来了极大的困难。首先,在软件设计过程中过多地考虑硬件,给开发和调试都带来了很多不便;其次,如果所有的软件工作都需要在硬件平台就绪之后进行,那么自然就延长了整个系统的开发周期。因此,星载计算机软件设计时,通常采用层次化、模块化设计的思路,将上层应用程序与底层硬件接口脱离,将各功能模块化划分。软件拓扑结构如图8- 1所示。
图8-1 软件拓扑结构示意图
(1)加载监控软件。它是一个独立的配置项,固化在起始物理地址PROM中,主要负责系统启动后将应用软件目标码镜像加载到内存中运行和监控软件运行状态等功能。每台计算机都有各自的加载监控软件。
(2)应用软件。当数管计算机和姿轨控计算机合二为一时,星载计算机应用软件主要由管理软件、星务软件和姿轨控软件三大模块组成,分别负责底层硬件接口驱动、整星功能管理和卫星姿态轨道计算及控制等功能。可以三者独立开发、联合编译,最终连接成一个执行程序镜像。
当数管计算机和姿轨控计算机分离时,两台计算机由各自的管理软件和应用软件两大模块组成,联合编译成各自的执行程序镜像。
(3)软件外部接口。星载计算机软件作为整星的控制核心,通过外部硬件接口与各类下位机进行遥控遥测数据通信,实现与各下位机之间的遥控遥测数据传输。常用的外部接口包括1553B总线、CAN总线、RS-422接口和非标类的FPGA接口等。软件提供通用的底层数据收发等操作接口函数供上层应用程序调用。
3)时间片划分
星载计算机软件通常采用周期任务划分进行软件时序设计。首先明确任务调度周期,然后确定每个业务功能的处理顺序和时间,梳理数据中断与数据处理流程的关系,最后明确空闲任务周期时背景任务处理业务。
为了兼顾处理器性能和数据处理实时性要求,星载计算机单机软件任务调度周期通常设置为500 ms;然后依次划分各功能模块处理时间,包括遥控数据分发、遥测数据采集、热控处理、能源管理、姿轨控处理和时钟管理等,所有功能依次处理;梳理各数据中断源,如遥控数据中断、遥测数据中断等,数据中断与周期任务处理之间通常采用数据标识、队列等方式进行交互;对于剩余的周期空闲时间,可以设置背景任务,通常用于软件可靠性措施如EDAC刷新等。
时间片周期轮转如图8- 2所示。
图8-2 时间片周期轮转示意图
4)中断设计
中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序,待处理完毕后又返回原来被中断处,继续执行或调度新的进程执行的过程。
计算机与外设之间的数据交互一般通过两种方法:一是通过CPU中断的方式;二是采用周期查询数据状态的方式。对于实时性要求较高的星载计算机系统,通常采用中断的方式,但是同时由于中断时序的随机性,所以在顶层时序设计时,通常需要对中断进行设计。
常用的星载计算机中断主要有GPS秒脉冲中断、遥控数据接收中断、遥测数据传输中断、处理器内部定时器中断和异常陷阱(如EDAC、非法指令)中断等。软件在系统初始化时所有中断配置并绑定相应的中断服务子程序。中断服务子程序设计应遵循处理尽量简短、全局资源访问尽量少、明确中断优先级和中断嵌套等原则。
GPS秒脉冲中断处理时,读取GPS时间,用于本地时钟校时操作。遥控数据接收中断处理时,从FPGA接口读取接收的遥控指令数据,压入指令队列,等待周期任务出列处理。遥测数据传输中断处理时,将采集好的遥测数据填入遥测发送缓存中,等待下个周期传输。处理器内部定时器中断主要用于周期任务调度,周期定时到时,暂停背景任务,开启下一个周期任务执行流程。异常陷阱中断主要用于维护系统的稳定性和可靠性,若触发的是可以修正的错误,则修正后继续执行;若是不可修正的错误,则记录错误现场(等待后续通过遥测方式下行),并主动触发软件复位重新加载程序运行。