本作品为了验证星务软件在RT-Thread系统运行的可行性,底层是否能够驱动星务软件,同时扩展RT-Thread应用范围。ART-Pi作为卫星下位机,星务前端用VS2010开发,两者之间通过异步串口通信。星务前端发送遥控指令,ART-Pi能够正常解析运行,并且能把星务的一些状态遥测发送至星务前端,方便地面人员查看。本作品设计的线程只有星务线程,采集线程,姿控线程,地测线程,Free线程,正常的卫星软件不止这五个线程,简化为这五个,涉及到的外设也简化为只有定时器与异步串口。
开发环境
硬件:ART-Pi开发板
RT-Thread版本:RT-Thread 4.0.2
开发工具及版本:RT-Thread Studio 1.1.5,Visual Studio 2010
RT-Thread使用情况概述
内核部分:线程操作(创建,挂起,删除),二值信号量
组件部分:软件定时器,异步串口,
软件包:无
其他:无
硬件框架
本作品验证RT-Thread系统,软件方面应用较多,底层硬件只需要一个ART-Pi开发板模拟卫星系统即可。ART-Pi作为卫星下位机,星务前端用一个PC代替即可,硬件框架如图1所示。
图1 硬件框架
软件框架说明
软件框架如图2所示,软件定时器以4Hz频率给星务线程信号量,星务线程启动后,检测其他各个线程的运行状况,核对线程运行时间,核对软件狗计数是否超过阈值,核对运行时间片,当都满足后,给所有线程信号量。设计的各个线程优先级如表1所示,由表可知,星务线程优先级最高,会一直运行至等待下一个信号量,依据RTT线程抢占运行原理,次一级优先级线程运行。所以在一个时间片内,线程运行顺序为,星务线程→采集线程→姿控线程→地测线程→Free线程。图中的遥测遥控部分在下一章节“软件模块原理”描述。
软件定时器于整秒处开始运行,定时器间隔为250ms,将0-249ms定义为时间片TASK_ROUNDA,将250-499ms定义为时间片TASK_ROUNDB,将500-749ms定义为时间片TASK_ROUNDC,将750-999ms定义为时间片TASK_ROUNDD。各线程运行时间片如表2所示。
图2 软件框架
软件模块说明
软件模块分为遥控上传,遥测下传,星务软件管理三个部分,遥控上传流程图如图3-a,3-b所示。
图3-a 遥控流程
图3-b 遥控流程
1.遥控流程
星务前端依照表3所示的遥控包结构组包,并通过异步串口发送至ART-Pi串口6,其中类型占用2个字节,定义如表4所示。
分系统类型:星务线程0x00,请求线程0x01,姿控线程0x02,无0x03.
指令码:自定义
地测线程将串口6FIFO读空,按照表3结构循环解析解析遥控指令,直到无可用遥控包,然后将合法遥控包存储到遥控指令缓存,等待线程来取指令;地测在存储指令前,查看遥控指令缓存是否有可用空间,有可用空间则将指令存储,并将标志位置有效状态,线程检测本线程对应的指令在缓冲区中有有效状态指令时,将指令取出,并将标志位置空闲。具体遥控指令说明参考附录。
2.遥测流程
遥测流程星上程序简单,地测线程依据包发送的时间片,符合本周期则发送,不符合则丢弃,发送的数据包结构符合表3,包下发的具体信息请参考附录。具体解包流程可参考上位机代码,非本设计详述部分,故不再赘述。
3.星务软件管理
星务初始化时,初始化各个线程,初始化硬件等;当星上软件运行起来时,检测各个线程状态,给合法线程信号量。当前线程共有三种状态,即允许运行、线程挂起、线程停止。各个线程的状态不仅受到遥控指令控制,还会与星务软件狗有关,各个线程之间的转换关系如图4所示。
图4 线程状态转换与遥控指令对应关系
图4中,红字表示发送的遥控指令,圆圈内表示当前线程状态。
星务软件设计了软件狗,软件狗的作用是为了防止线程死循环,将整个优先级之后的的线程同时卡死的问题,具体过程是每次当星务给线程信号量时,此线程对应的软件狗计数会累加,当线程运行至线程循环底部时,会将软件狗清零;如果在一个周期内,程序由于卡死在死循环或者是任务循环次数过大,导致本周期未运行至函数体底部,则星务会继续累计软件狗,当次数大于设置值时,依据设置的方式对线程处理,线程重启或者是整个操作系统重启。
演示效果
图5 星务前端上位机界面1
图6 星务前端上位机界面2
图7 实物照片
比赛感悟
本作品较好的实现了原定的目标,在真实情况下,RTT也会有较好表现,扩展了RTT的应用范围,对其他的类似系统也有很好的借鉴作用;但是作为功能强大的ART-Pi开发板,真正用到的功能较少,后期可以再开发一些其他的有意义的应用。
本作品所用的代码与实际卫星使用代码原理一致而具体不同,有部分借鉴的成分,主要的困难是需要将星务系统底层适配RTT,并且不能照抄原版代码,一是为了避免涉密,二是为了提高移植的意义,使我对整个卫星的软件框架有了很好的认识,对我本人从事的工作也有很好的促进作用。而且开源卫星代码的原理也让卫星代码圈子增加一点生态,也对其将来的发展有好的促进作用。
原作者:xudongxiao