4. 星载处理器选型与软件栈
星载处理器选型不是单纯比较主频和算力,而是把抗辐射能力、实时性、软件生态和任务负载放在同一张约束网里权衡。FPGA与处理器协同计算时,处理器通常承担控制流、协议栈、任务调度和健康管理,FPGA承担高吞吐数据通路与硬实时信号处理。若处理器选型不当,即使FPGA逻辑资源充足,系统也会在中断抖动、任务超时或单粒子翻转恢复上失稳。
抗辐射处理器:先看环境,再看架构
抗辐射处理器按实现路径大致分为三类:天然抗辐射的专用宇航处理器、基于商用IP做辐射加固的SoC、以及采用冗余与纠错设计的通用处理器。选型时先明确轨道环境:低轨(LEO)总剂量通常按10~30 krad(Si)量级评估,中高轨或长期任务需按50~100 krad(Si)甚至更高考虑;单粒子翻转(SEU)关注软错误率,单粒子锁定(SEL)关注是否具备电流限制与断电恢复。抗辐射指标必须与任务寿命、屏蔽厚度和降额策略一起看,不能只看器件手册的“抗辐射”标签。
架构上,星载处理器常见SPARC V8、PowerPC、ARM Cortex-R/M及RISC-V。SPARC与PowerPC生态成熟、飞行 heritage 多,适合传统星务与姿轨控;ARM与RISC-V在能效和工具链上更现代,但需确认是否具备锁步、ECC、奇偶校验和看门狗等加固特性。例如某星务计算机选用双核锁步ARM Cortex-R52,主频200 MHz,L1/L2带ECC,外挂EDAC保护的MRAM与SDRAM,可满足姿控周期1 ms、遥测采集10 ms的实时要求。若任务需要运行Linux级复杂应用,则应考虑带MMU的处理器并配合辐射加固的存储体系,但实时性会下降,需用PREEMPT_RT或双核分区隔离来补偿。
实时操作系统:确定性比功能丰富更重要
星载RTOS的核心指标是中断延迟、任务切换时间和最坏执行时间(WCET)可分析性。常见选择包括VxWorks 653、RTEMS、FreeRTOS、Zephyr以及国产SpaceOS等。VxWorks 653支持ARINC 653分区,适合多任务隔离与适航级认证;RTEMS开源、可裁剪、支持POSIX,适合中小型星载任务;FreeRTOS轻量,但需自行补充内存保护与故障恢复;Zephyr生态活跃,适合RISC-V平台。选型时要确认RTOS是否支持目标处理器的BSP、是否提供辐射环境下的看门狗与内存保护、是否可做静态WCET分析。
以RTEMS为例,星载任务可划分为:1 ms姿控周期任务、10 ms遥测采集任务、100 ms健康管理任务、事件驱动的遥控解析任务。RTOS需提供优先级抢占、信号量、消息队列和定时器。若采用固定优先级调度,需做速率单调分析(RMA):设姿控任务周期1 ms、执行时间0.2 ms,遥测任务周期10 ms、执行时间1.5 ms,健康管理周期100 ms、执行时间5 ms,则利用率U=0.2/1+1.5/10+5/100=0.2+0.15+0.05=0.4,小于RMA的Liu-Layland上界n(2^(1/n)-1),n=3时约0.78,说明可调度。若加入遥控任务执行时间2 ms、周期20 ms,U增至0.5,仍可调度,但需留出中断与内核开销余量。
交叉编译与板级支持包
星载软件开发通常在x86主机上交叉编译到目标处理器。工具链需与目标ABI、浮点单元和指令集匹配。例如ARM Cortex-R52使用arm-none-eabi-gcc,SPARC V8使用sparc-rtems-gcc,RISC-V使用riscv64-unknown-elf-gcc。编译时需指定-mcpu、-mfloat-abi、-mthumb等参数,并开启-O2、-fno-common、-Wall。链接脚本要按目标内存映射划分.text、.data、.bss、堆栈和EDAC保护区,避免未初始化变量落入错误区域。
BSP是RTOS与硬件的粘合层,包含启动代码、时钟驱动、串口、中断控制器、看门狗、EDAC和存储器初始化。以RTEMS BSP为例,需实现bsp_start、Clock_driver、IRQ_connect、Cache_init和Memory_init。启动流程通常为:上电复位→BootROM→BSP初始化时钟与SDRAM→EDAC使能→串口输出→加载RTOS→创建任务。若BSP中EDAC未使能,SDRAM中的单粒子翻转会直接导致任务跑飞;若看门狗喂狗周期大于任务最大阻塞时间,则故障时无法复位。
# 交叉编译示例(ARM Cortex-R52 + RTEMS)
arm-none-eabi-gcc -mcpu=cortex-r52 -mfloat-abi=hard -O2 \
-I$RTEMS_ARM/include -c attitude_ctrl.c -o attitude_ctrl.o
arm-none-eabi-ld -T linkcmds -o attitude_ctrl.elf attitude_ctrl.o \
-L$RTEMS_ARM/lib -lrtemsbsp -lrtemscpu -lc
arm-none-eabi-objcopy -O binary attitude_ctrl.elf attitude_ctrl.bin
任务调度与中断管理
星载任务调度要兼顾周期任务、事件任务和后台任务。周期任务用定时器中断触发,事件任务由遥控、遥测或FPGA中断触发,后台任务在空闲时执行。中断管理的关键是:中断服务程序(ISR)尽量短,只做标志置位或数据入队,实际处理放到任务中;中断优先级要按实时性排序,姿控与故障保护最高,遥测采集次之,遥控解析再次;共享数据要用临界区或原子操作保护,避免优先级反转。
以FPGA与处理器协同为例,FPGA完成图像预处理后通过中断通知处理器读取结果。若ISR中直接搬运1 MB图像数据,中断延迟会达到毫秒级,破坏姿控周期。正确做法是ISR只置位“图像就绪”信号量,由图像处理任务在低优先级中搬运,姿控任务仍可抢占。若必须快速响应,可使用DMA将数据搬入SDRAM,ISR仅处理DMA完成标志。中断嵌套要谨慎,星载环境建议限制嵌套层数,避免栈溢出。
实际工程中,建议把上述关系固化为一张“处理器-软件栈-任务”配置表:处理器型号与抗辐射等级、RTOS版本与调度策略、工具链前缀与编译选项、BSP关键驱动、任务周期与优先级、中断源与ISR处理方式。每次迭代后更新WCET与利用率,确保姿控任务在最坏情况下仍能满足1 ms周期。若利用率超过0.7,应优先降低遥测任务频率或把图像处理迁移到FPGA,而不是压缩姿控任务余量。