【RT Thread作品秀】基于RT Thread的星务平台研究 电路方案
作者:xudongxiao声明:转载请联系作者并取得RT-Thread大赛许可,本软件不涉密 概述本作品为了验证星务软件在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所示。 表1 线程 星务线程 采集线程 姿控线程 地测线程 Free线程 优先级 25 26 27 28 29 表2 线程 星务线程 采集线程 姿控线程 地测线程 Free线程 时间片 ALL ALL ALL ALL NONE 图2 软件框架 软件模块说明软件模块分为遥控上传,遥测下传,星务软件管理三个部分,遥控上传流程图如图3-a,3-b所示。 图3-a 遥控流程 图3-b 遥控流程 1.遥控流程 星务前端依照表3所示的遥控包结构组包,并通过异步串口发送至ART-Pi串口6,其中类型占用2个字节,定义如表4所示。 表3 遥测遥控公共包结构体(STM32为小端) 帧头 长度 校验 类型 数据 长度(字节) 2 2 2 2 n 说明 固定0xEB90 类型与数据字节长 类型与数据按字节累加和 表4 遥控包结构的类型说明 类型 长度 1 1 说明 分系统类型(typeL) 指令码(typeH) 分系统类型:星务线程0x00,请求线程0x01,姿控线程0x02,无0x03. 指令码:自定义 地测线程将串口6FIFO读空,按照表3结构循环解析解析遥控指令,直到无可用遥控包,然后将合法遥控包存储到遥控指令缓存,等待线程来取指令;地测在存储指令前,查看遥控指令缓存是否有可用空间,有可用空间则将指令存储,并将标志位置有效状态,线程检测本线程对应的指令在缓冲区中有有效状态指令时,将指令取出,并将标志位置空闲。具体遥控指令说明参考附录。 2.遥测流程 遥测流程星上程序简单,地测线程依据包发送的时间片,符合本周期则发送,不符合则丢弃,发送的数据包结构符合表3,包下发的具体信息请参考附录。具体解包流程可参考上位机代码,非本设计详述部分,故不再赘述。 3.星务软件管理 星务初始化时,初始化各个线程,初始化硬件等;当星上软件运行起来时,检测各个线程状态,给合法线程信号量。当前线程共有三种状态,即允许运行、线程挂起、线程停止。各个线程的状态不仅受到遥控指令控制,还会与星务软件狗有关,各个线程之间的转换关系如图4所示。 图4 线程状态转换与遥控指令对应关系 图4中,红字表示发送的遥控指令,圆圈内表示当前线程状态。 星务软件设计了软件狗,软件狗的作用是为了防止线程死循环,将整个优先级之后的的线程同时卡死的问题,具体过程是每次当星务给线程信号量时,此线程对应的软件狗计数会累加,当线程运行至线程循环底部时,会将软件狗清零;如果在一个周期内,程序由于卡死在死循环或者是任务循环次数过大,导致本周期未运行至
用户评论