【RT-Thread开源作品秀】基于RT-Thread的星务平台研究

本作品为了验证星务软件在RT-Thread系统运行的可行性,底层是否能够驱动星务软件,同时扩展RT-Thread应用范围。ART-Pi作为卫星下位机,星务前端用VS2010开发,两者之间通过异步串口通信。星务前端发送遥控指令,ART-Pi能够正常解析运行,并且能把星务的一些状态遥测发送至星务前端,方便地面人员查看。本作品设计的线程只有星务线程,采集线程,姿控线程,地测线程,Free线程,正常的卫星软件不止这五个线程,简化为这五个,涉及到的外设也简化为只有定时器与异步串口。

代码地址

RTT软件地址:

https://gitee.com/xudongxiao2020/rtt-competition-use.git

上位机软件地址:

https://gitee.com/xudongxiao2020/rtt-competition-use-upper.git

开发环境

硬件: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所示。

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第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所示。

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第2张图片

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第3张图片

图2 软件框架

软件模块说明

软件模块分为遥控上传,遥测下传,星务软件管理三个部分,遥控上传流程图如图3-a,3-b所示。

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第4张图片

图3-a 遥控流程

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第5张图片

                    图3-b 遥控流程

1.遥控流程

星务前端依照表3所示的遥控包结构组包,并通过异步串口发送至ART-Pi串口6,其中类型占用2个字节,定义如表4所示。

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第6张图片

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第7张图片

分系统类型:星务线程0x00,请求线程0x01,姿控线程0x02,无0x03.

指令码:自定义

地测线程将串口6FIFO读空,按照表3结构循环解析解析遥控指令,直到无可用遥控包,然后将合法遥控包存储到遥控指令缓存,等待线程来取指令;地测在存储指令前,查看遥控指令缓存是否有可用空间,有可用空间则将指令存储,并将标志位置有效状态,线程检测本线程对应的指令在缓冲区中有有效状态指令时,将指令取出,并将标志位置空闲。具体遥控指令说明参考附录。

2.遥测流程

遥测流程星上程序简单,地测线程依据包发送的时间片,符合本周期则发送,不符合则丢弃,发送的数据包结构符合表3,包下发的具体信息请参考附录。具体解包流程可参考上位机代码,非本设计详述部分,故不再赘述。

3.星务软件管理

星务初始化时,初始化各个线程,初始化硬件等;当星上软件运行起来时,检测各个线程状态,给合法线程信号量。当前线程共有三种状态,即允许运行、线程挂起、线程停止。各个线程的状态不仅受到遥控指令控制,还会与星务软件狗有关,各个线程之间的转换关系如图4所示。

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第8张图片

图4 线程状态转换与遥控指令对应关系

图4中,红字表示发送的遥控指令,圆圈内表示当前线程状态。

星务软件设计了软件狗,软件狗的作用是为了防止线程死循环,将整个优先级之后的的线程同时卡死的问题,具体过程是每次当星务给线程信号量时,此线程对应的软件狗计数会累加,当线程运行至线程循环底部时,会将软件狗清零;如果在一个周期内,程序由于卡死在死循环或者是任务循环次数过大,导致本周期未运行至函数体底部,则星务会继续累计软件狗,当次数大于设置值时,依据设置的方式对线程处理,线程重启或者是整个操作系统重启。

演示效果

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第9张图片

图5 星务前端上位机界面1

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第10张图片

图6 星务前端上位机界面2

图7 实物照片

比赛感悟

本作品较好的实现了原定的目标,在真实情况下,RTT也会有较好表现,扩展了RTT的应用范围,对其他的类似系统也有很好的借鉴作用;但是作为功能强大的ART-Pi开发板,真正用到的功能较少,后期可以再开发一些其他的有意义的应用。

本作品所用的代码与实际卫星使用代码原理一致而具体不同,有部分借鉴的成分,主要的困难是需要将星务系统底层适配RTT,并且不能照抄原版代码,一是为了避免涉密,二是为了提高移植的意义,使我对整个卫星的软件框架有了很好的认识,对我本人从事的工作也有很好的促进作用。而且开源卫星代码的原理也让卫星代码圈子增加一点生态,也对其将来的发展有好的促进作用。


嵌入式代码质量与开发效率技术沙龙深圳、上海、北京三城巡回开始啦

RT-Thread联合鉴释科技分享双方在嵌入式软件领域多年积累的保证代码质量的一些经验和方法,助力小伙伴提升代码质量,欢迎小伙伴报名参加

议程

13:30——14:15

嵌入式软件持续集成与测试

演讲人:RT-Thread 技术工程师

14:15——15:00 

嵌入式代码的典型漏洞分析和识别

演讲人:肖琳杰 鉴释资深技术工程师

15:00——15:45

提高嵌入式软件“调试”效率

演讲人:RT-Thread 技术工程师

15:45——16:30 

WASM 安全性提高

演讲人:梁宇宁  鉴释联合创始人兼CEO

【RT-Thread开源作品秀】基于RT-Thread的星务平台研究_第11张图片

扫码报名

???????????? 点击阅读原文报名线下沙龙

你可能感兴趣的:(java,编程语言,嵌入式,操作系统,linux)