本作品為了驗(yàn)證星務(wù)軟件在RT-Thread系統(tǒng)運(yùn)行的可行性,底層是否能夠驅(qū)動(dòng)星務(wù)軟件,同時(shí)擴(kuò)展RT-Thread應(yīng)用范圍。ART-Pi作為衛(wèi)星下位機(jī),星務(wù)前端用VS2010開(kāi)發(fā),兩者之間通過(guò)異步串口通信。星務(wù)前端發(fā)送遙控指令,ART-Pi能夠正常解析運(yùn)行,并且能把星務(wù)的一些狀態(tài)遙測(cè)發(fā)送至星務(wù)前端,方便地面人員查看。本作品設(shè)計(jì)的線程只有星務(wù)線程,采集線程,姿控線程,地測(cè)線程,F(xiàn)ree線程,正常的衛(wèi)星軟件不止這五個(gè)線程,簡(jiǎn)化為這五個(gè),涉及到的外設(shè)也簡(jiǎn)化為只有定時(shí)器與異步串口。
開(kāi)發(fā)環(huán)境
硬件:ART-Pi開(kāi)發(fā)板
RT-Thread版本:RT-Thread 4.0.2
開(kāi)發(fā)工具及版本:RT-Thread Studio 1.1.5,Visual Studio 2010
RT-Thread使用情況概述
內(nèi)核部分:線程操作(創(chuàng)建,掛起,刪除),二值信號(hào)量
組件部分:軟件定時(shí)器,異步串口,
軟件包:無(wú)
其他:無(wú)
硬件框架
本作品驗(yàn)證RT-Thread系統(tǒng),軟件方面應(yīng)用較多,底層硬件只需要一個(gè)ART-Pi開(kāi)發(fā)板模擬衛(wèi)星系統(tǒng)即可。ART-Pi作為衛(wèi)星下位機(jī),星務(wù)前端用一個(gè)PC代替即可,硬件框架如圖1所示。
圖1 硬件框架
軟件框架說(shuō)明
軟件框架如圖2所示,軟件定時(shí)器以4Hz頻率給星務(wù)線程信號(hào)量,星務(wù)線程啟動(dòng)后,檢測(cè)其他各個(gè)線程的運(yùn)行狀況,核對(duì)線程運(yùn)行時(shí)間,核對(duì)軟件狗計(jì)數(shù)是否超過(guò)閾值,核對(duì)運(yùn)行時(shí)間片,當(dāng)都滿足后,給所有線程信號(hào)量。設(shè)計(jì)的各個(gè)線程優(yōu)先級(jí)如表1所示,由表可知,星務(wù)線程優(yōu)先級(jí)最高,會(huì)一直運(yùn)行至等待下一個(gè)信號(hào)量,依據(jù)RTT線程搶占運(yùn)行原理,次一級(jí)優(yōu)先級(jí)線程運(yùn)行。所以在一個(gè)時(shí)間片內(nèi),線程運(yùn)行順序?yàn)椋莿?wù)線程→采集線程→姿控線程→地測(cè)線程→Free線程。圖中的遙測(cè)遙控部分在下一章節(jié)“軟件模塊原理”描述。
軟件定時(shí)器于整秒處開(kāi)始運(yùn)行,定時(shí)器間隔為250ms,將0-249ms定義為時(shí)間片TASK_ROUNDA,將250-499ms定義為時(shí)間片TASK_ROUNDB,將500-749ms定義為時(shí)間片TASK_ROUNDC,將750-999ms定義為時(shí)間片TASK_ROUNDD。各線程運(yùn)行時(shí)間片如表2所示。
圖2 軟件框架
軟件模塊說(shuō)明
軟件模塊分為遙控上傳,遙測(cè)下傳,星務(wù)軟件管理三個(gè)部分,遙控上傳流程圖如圖3-a,3-b所示。
圖3-a 遙控流程
圖3-b 遙控流程
1.遙控流程
星務(wù)前端依照表3所示的遙控包結(jié)構(gòu)組包,并通過(guò)異步串口發(fā)送至ART-Pi串口6,其中類型占用2個(gè)字節(jié),定義如表4所示。
分系統(tǒng)類型:星務(wù)線程0x00,請(qǐng)求線程0x01,姿控線程0x02,無(wú)0x03.
指令碼:自定義地測(cè)線程將串口6FIFO讀空,按照表3結(jié)構(gòu)循環(huán)解析解析遙控指令,直到無(wú)可用遙控包,然后將合法遙控包存儲(chǔ)到遙控指令緩存,等待線程來(lái)取指令;地測(cè)在存儲(chǔ)指令前,查看遙控指令緩存是否有可用空間,有可用空間則將指令存儲(chǔ),并將標(biāo)志位置有效狀態(tài),線程檢測(cè)本線程對(duì)應(yīng)的指令在緩沖區(qū)中有有效狀態(tài)指令時(shí),將指令取出,并將標(biāo)志位置空閑。具體遙控指令說(shuō)明參考附錄。
2.遙測(cè)流程
遙測(cè)流程星上程序簡(jiǎn)單,地測(cè)線程依據(jù)包發(fā)送的時(shí)間片,符合本周期則發(fā)送,不符合則丟棄,發(fā)送的數(shù)據(jù)包結(jié)構(gòu)符合表3,包下發(fā)的具體信息請(qǐng)參考附錄。具體解包流程可參考上位機(jī)代碼,非本設(shè)計(jì)詳述部分,故不再贅述。
3.星務(wù)軟件管理
星務(wù)初始化時(shí),初始化各個(gè)線程,初始化硬件等;當(dāng)星上軟件運(yùn)行起來(lái)時(shí),檢測(cè)各個(gè)線程狀態(tài),給合法線程信號(hào)量。當(dāng)前線程共有三種狀態(tài),即允許運(yùn)行、線程掛起、線程停止。各個(gè)線程的狀態(tài)不僅受到遙控指令控制,還會(huì)與星務(wù)軟件狗有關(guān),各個(gè)線程之間的轉(zhuǎn)換關(guān)系如圖4所示。
圖4 線程狀態(tài)轉(zhuǎn)換與遙控指令對(duì)應(yīng)關(guān)系
圖4中,紅字表示發(fā)送的遙控指令,圓圈內(nèi)表示當(dāng)前線程狀態(tài)。
星務(wù)軟件設(shè)計(jì)了軟件狗,軟件狗的作用是為了防止線程死循環(huán),將整個(gè)優(yōu)先級(jí)之后的的線程同時(shí)卡死的問(wèn)題,具體過(guò)程是每次當(dāng)星務(wù)給線程信號(hào)量時(shí),此線程對(duì)應(yīng)的軟件狗計(jì)數(shù)會(huì)累加,當(dāng)線程運(yùn)行至線程循環(huán)底部時(shí),會(huì)將軟件狗清零;如果在一個(gè)周期內(nèi),程序由于卡死在死循環(huán)或者是任務(wù)循環(huán)次數(shù)過(guò)大,導(dǎo)致本周期未運(yùn)行至函數(shù)體底部,則星務(wù)會(huì)繼續(xù)累計(jì)軟件狗,當(dāng)次數(shù)大于設(shè)置值時(shí),依據(jù)設(shè)置的方式對(duì)線程處理,線程重啟或者是整個(gè)操作系統(tǒng)重啟。
演示效果
圖5 星務(wù)前端上位機(jī)界面1
圖6 星務(wù)前端上位機(jī)界面2
比賽感悟
本作品較好的實(shí)現(xiàn)了原定的目標(biāo),在真實(shí)情況下,RTT也會(huì)有較好表現(xiàn),擴(kuò)展了RTT的應(yīng)用范圍,對(duì)其他的類似系統(tǒng)也有很好的借鑒作用;但是作為功能強(qiáng)大的ART-Pi開(kāi)發(fā)板,真正用到的功能較少,后期可以再開(kāi)發(fā)一些其他的有意義的應(yīng)用。
本作品所用的代碼與實(shí)際衛(wèi)星使用代碼原理一致而具體不同,有部分借鑒的成分,主要的困難是需要將星務(wù)系統(tǒng)底層適配RTT,并且不能照抄原版代碼,一是為了避免涉密,二是為了提高移植的意義,使我對(duì)整個(gè)衛(wèi)星的軟件框架有了很好的認(rèn)識(shí),對(duì)我本人從事的工作也有很好的促進(jìn)作用。而且開(kāi)源衛(wèi)星代碼的原理也讓衛(wèi)星代碼圈子增加一點(diǎn)生態(tài),也對(duì)其將來(lái)的發(fā)展有好的促進(jìn)作用。
原文標(biāo)題:【RT-Thread開(kāi)源作品秀】基于RT-Thread的星務(wù)平臺(tái)研究
文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
開(kāi)源
+關(guān)注
關(guān)注
3文章
3398瀏覽量
42665 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1305瀏覽量
40331
原文標(biāo)題:【RT-Thread開(kāi)源作品秀】基于RT-Thread的星務(wù)平臺(tái)研究
文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論