基于μC/OS-II的無(wú)線調(diào)度策略分析與實(shí)現(xiàn)
2.2嵌入式實(shí)時(shí)操作系統(tǒng)調(diào)度管理
為完成調(diào)度機(jī)制的靈活實(shí)現(xiàn),提高系統(tǒng)調(diào)度實(shí)時(shí)性,這里采用嵌入式操作系統(tǒng)對(duì)系統(tǒng)進(jìn)行管理。μC/OS-II是一種免費(fèi)公開(kāi)源代碼、結(jié)構(gòu)小巧、具有可剝奪實(shí)時(shí)內(nèi)核的實(shí)時(shí)操作系統(tǒng),其內(nèi)核提供任務(wù)調(diào)度與管理、時(shí)間管理、任務(wù)間同步與通信、內(nèi)存管理和中斷服務(wù)等功能。它適用于小型控制系統(tǒng),具有執(zhí)行效率高、占有空間小、實(shí)時(shí)性能優(yōu)良和擴(kuò)展性強(qiáng)等特點(diǎn),最小內(nèi)核可以編譯至2K左右。
μC/OS-II實(shí)時(shí)內(nèi)核采用占先式調(diào)度策略,不支持時(shí)間片輪調(diào)度法,核心是始終運(yùn)行就緒條件下的優(yōu)先級(jí)最高的任務(wù)。在具體實(shí)現(xiàn)中就可以根據(jù)這一特點(diǎn)將無(wú)線調(diào)度系統(tǒng)劃分為多個(gè)任務(wù),每一個(gè)任務(wù)賦予一個(gè)明確的并且與其他任務(wù)不同的優(yōu)先級(jí),根據(jù)各個(gè)任務(wù)的優(yōu)先級(jí),動(dòng)態(tài)地切換各個(gè)任務(wù),從而保證了對(duì)實(shí)時(shí)性的要求。如果希望某個(gè)任務(wù)的優(yōu)先級(jí)根據(jù)條件的變化而發(fā)生改變,則可以通過(guò)調(diào)用改變?nèi)蝿?wù)優(yōu)先級(jí)的函數(shù)來(lái)實(shí)現(xiàn)。
3 調(diào)度任務(wù)劃分及設(shè)計(jì)
3.1多任務(wù)劃分
任務(wù)和中斷的劃分主要根據(jù)調(diào)度平臺(tái)設(shè)備完成的功能來(lái)劃分,要求每個(gè)任務(wù)職責(zé)清晰,任務(wù)間的信息交換和同步互斥應(yīng)該簡(jiǎn)潔明了,任務(wù)優(yōu)先級(jí)定義明確。
無(wú)線調(diào)度平臺(tái)設(shè)備任務(wù)可劃分為四個(gè)任務(wù):設(shè)備聲明任務(wù),信息分發(fā)任務(wù),信息接收任務(wù),令牌輪循任務(wù)。設(shè)備聲明任務(wù)主要完成設(shè)備身份認(rèn)證,設(shè)備在網(wǎng)絡(luò)中聲明是主設(shè)備還是從設(shè)備,如果是主設(shè)備則進(jìn)行調(diào)度平臺(tái)星型網(wǎng)絡(luò)的組建,從設(shè)備則直接加入新組建的網(wǎng)絡(luò)。信息分發(fā)任務(wù)作用是將當(dāng)前網(wǎng)絡(luò)狀態(tài)、設(shè)備狀態(tài)和數(shù)據(jù)信息發(fā)送網(wǎng)絡(luò)中指定設(shè)備。信息接收任務(wù)是依靠串口中斷來(lái)觸發(fā)的,作用是接收網(wǎng)絡(luò)中的數(shù)據(jù)信息和主設(shè)備發(fā)送的或從設(shè)備返回的令牌。令牌輪循任務(wù)主要是針對(duì)主設(shè)備,當(dāng)調(diào)度網(wǎng)絡(luò)組建完成,主設(shè)備根據(jù)網(wǎng)絡(luò)中節(jié)點(diǎn)信息(單獨(dú)開(kāi)辟存儲(chǔ)區(qū)存儲(chǔ)的節(jié)點(diǎn)號(hào))進(jìn)行令牌信息分發(fā),一般情況是根據(jù)節(jié)點(diǎn)號(hào)從大到小,得到令牌的節(jié)點(diǎn)才是當(dāng)前網(wǎng)絡(luò)中的活動(dòng)節(jié)點(diǎn)。對(duì)于從設(shè)備,令牌輪循任務(wù)僅完成令牌返回功能。
3.2多任務(wù)優(yōu)先級(jí)裁決
在多任務(wù)系統(tǒng)的設(shè)計(jì)中優(yōu)先級(jí)的裁決至關(guān)重要,如果優(yōu)先級(jí)設(shè)定有誤,難以保證調(diào)度策略的正確實(shí)施,嚴(yán)重影響調(diào)度精確性。基于μC/OS-II操作系統(tǒng)的任務(wù)優(yōu)先級(jí)設(shè)計(jì)遵循以下原則:(1)緊急任務(wù)優(yōu)先,(2)完成得快的任務(wù)優(yōu)先,(3)優(yōu)先級(jí)不能動(dòng)態(tài)變化,(4)不要出現(xiàn)多個(gè)同一優(yōu)先級(jí)的任務(wù)。
基于以上四點(diǎn)原則,分析無(wú)線調(diào)度系統(tǒng)任務(wù),安排任務(wù)優(yōu)先級(jí)示意圖如圖3所示,任務(wù)優(yōu)先級(jí)由高至低依次為:信息接收任務(wù),令牌輪循任務(wù),信息分發(fā)任務(wù),設(shè)備聲明任務(wù)。在系統(tǒng)任務(wù)中設(shè)備聲明任務(wù)只需定期進(jìn)行發(fā)送聲明信息,表明設(shè)備在線,其周期較長(zhǎng),故可安排較低優(yōu)先級(jí);信息接收任務(wù)由中斷觸發(fā),為了提高調(diào)度精度,防止中斷延遲時(shí)間過(guò)長(zhǎng),可安排信息接收任務(wù)為較高優(yōu)先級(jí),當(dāng)中斷發(fā)生確保能較快的切換到信息接收任務(wù)接收信息。令牌輪循任務(wù)功能單一,處理時(shí)間較短,故安排優(yōu)先級(jí)高于信息發(fā)送任務(wù)。
圖3 任務(wù)優(yōu)先級(jí)示意圖 |
μC/OS-II是基于搶占式內(nèi)核,當(dāng)一個(gè)任務(wù)正在執(zhí)行時(shí),如果任務(wù)就緒表中有更高級(jí)別任務(wù)就緒,就中止當(dāng)前任務(wù)切換到高優(yōu)先級(jí)任務(wù)。如圖3所示,信息分發(fā)任務(wù)在執(zhí)行過(guò)程中,信息接收任務(wù)就緒,系統(tǒng)立刻中止信息分發(fā)任務(wù),保留當(dāng)前狀態(tài)在堆棧中,然后切換到高優(yōu)先級(jí)的信息接收任務(wù),信息接收完成再返回到信息發(fā)送任務(wù)繼續(xù)執(zhí)行。
3.3任務(wù)間信息交換和同步設(shè)計(jì)與實(shí)現(xiàn)
在嵌入式多任務(wù)系統(tǒng)中,多任務(wù)之間信息交換和同步主要通過(guò)消息郵箱、消息隊(duì)列以及信號(hào)量來(lái)完成,μC/OS-II分別提供了相關(guān)函數(shù)供用戶調(diào)用,如任務(wù),消息,信號(hào)量的創(chuàng)建,消息和信號(hào)量的請(qǐng)求和發(fā)送等。
根據(jù)調(diào)度策略無(wú)線調(diào)度平臺(tái)主從設(shè)備信息交換設(shè)計(jì)圖如圖4所示:
任務(wù)間信息交換和同步設(shè)計(jì)是無(wú)線調(diào)度機(jī)制實(shí)現(xiàn)的重要環(huán)節(jié),在具體實(shí)現(xiàn)過(guò)程中主要利用μC/OS-II的消息隊(duì)列函數(shù),其中OSQPend()為消息請(qǐng)求函數(shù),OSQPost()為消息發(fā)送函數(shù)。
串口中斷與信息接收任務(wù)間通過(guò)消息隊(duì)列進(jìn)行信息傳遞代碼實(shí)現(xiàn)如下,SERIAL2RecData作為是否接收信息標(biāo)志位,由中斷置位,有信息接收時(shí),串口服務(wù)程序向信息接收任務(wù)發(fā)送消息。
void SERIAL2_ISR(void) interrupt 20 //串口接收中斷服務(wù)程序
{ SERIAL2RecBuffer[SERIAL2RecBufferTail] = SBUF1;
SERIAL2RecData = 1; //接收數(shù)據(jù)標(biāo)志位
}
void task_serial2(void) ADD_REENTRANT //串口服務(wù)程序
{ if(SERIAL2RecData == 1)
OSQPost(bt_msg_queue, (void *)pmsg);
}
評(píng)論