基于VxWorks的無(wú)人直升機(jī)控制系統(tǒng)設(shè)計(jì)
1.3 控制系統(tǒng)軟件設(shè)計(jì)
無(wú)人直升機(jī)控制系統(tǒng)的軟件包含四大部分:一是根據(jù)S3C44B0X重新配置VxWorks系統(tǒng)的BSP。二是基于優(yōu)先級(jí)的消息隊(duì)列實(shí)現(xiàn),消息隊(duì)列中包含飛行狀態(tài)信息與自主定點(diǎn)飛行信息。三是基于看門(mén)狗與信號(hào)量的多任務(wù)調(diào)度,實(shí)現(xiàn)自主定點(diǎn)飛行與實(shí)時(shí)飛行狀態(tài)信息傳輸?shù)墓δ?。四是基站控制軟件?a class="contentlabel" href="http://butianyuan.cn/news/listbylabel/label/設(shè)計(jì)">設(shè)計(jì)。系統(tǒng)上電后初始化socket套接字,網(wǎng)絡(luò)聯(lián)通后采用UDP協(xié)議通信。下面將著重介紹基于優(yōu)先級(jí)的消息隊(duì)列與基于信號(hào)量與看門(mén)狗的多任務(wù)調(diào)度。
2.3.1 基于優(yōu)先級(jí)的消息隊(duì)列
在控制系統(tǒng)中,不能因?yàn)閳?zhí)行機(jī)載設(shè)備的數(shù)據(jù)傳輸命令而拒絕執(zhí)行地面基站的自主飛行命令。為解決這一問(wèn)題,本控制系統(tǒng)建立了基于優(yōu)先級(jí)的消息隊(duì)列機(jī)制。系統(tǒng)在RAM中開(kāi)辟一個(gè)區(qū)域用于建立消息隊(duì)列,隊(duì)列中指針指向的是各個(gè)信息的內(nèi)存塊地址。各個(gè)任務(wù)將根據(jù)這些指針指向的數(shù)據(jù)來(lái)進(jìn)行實(shí)際操作。
(1)基于優(yōu)先級(jí)的消息隊(duì)列方法。首先信息接收任務(wù)接收信息后根據(jù)信息頭地址內(nèi)容判斷信息優(yōu)先級(jí),地面基站的自主飛行命令優(yōu)先級(jí)為最高,把它插入到消息隊(duì)列的隊(duì)列頭,而機(jī)載電子羅盤(pán)與GPS發(fā)送的數(shù)據(jù)信息優(yōu)先級(jí)低,按照時(shí)間順序排列在消息隊(duì)列的隊(duì)列尾。信息解釋任務(wù)從消息隊(duì)列頭逐一取出信息然后進(jìn)行處理。
(2)消息隊(duì)列的實(shí)現(xiàn)。通過(guò)單向鏈表來(lái)實(shí)現(xiàn)消息隊(duì)列的添加與刪除。每個(gè)鏈表元素是一個(gè)結(jié)構(gòu)體struct messageChain,結(jié)構(gòu)體包含頭指針pBuff與指向下一個(gè)元素的指針pNext。同時(shí)使用兩個(gè)全局變量直接表示鏈表頭與鏈表尾,一個(gè)全局變量表示鏈表長(zhǎng)度,這
樣可以直接處理鏈表頭或者鏈表尾的內(nèi)容以簡(jiǎn)化查找過(guò)程。
2.3.2 基于看門(mén)狗的多任務(wù)調(diào)度
VxWorks系統(tǒng)可以為每個(gè)任務(wù)設(shè)定特定的任務(wù)名與任務(wù)優(yōu)先級(jí),系統(tǒng)支持256個(gè)優(yōu)先級(jí)。為了調(diào)試的方便,在本控制系統(tǒng)中設(shè)定的任務(wù)優(yōu)先級(jí)在60到100之間,這是因?yàn)橛沙绦虬l(fā)起的任務(wù)優(yōu)先級(jí)要高于Tornado開(kāi)發(fā)環(huán)境中shell發(fā)起sp的任務(wù)優(yōu)先級(jí)即小于100,同時(shí)也要低于系統(tǒng)任務(wù)的優(yōu)先級(jí)即大于60【5】??刂葡到y(tǒng)包含了信息接收任務(wù),信息解釋任務(wù),信息發(fā)送任務(wù),網(wǎng)絡(luò)監(jiān)測(cè)任務(wù),定時(shí)輪詢?nèi)蝿?wù),自主飛行任務(wù)等多任務(wù)。流程圖見(jiàn)圖三。
圖三 任務(wù)調(diào)度流程圖
評(píng)論