μC/OS2Ⅱ在軍用FM80386EX處理器上的移植應(yīng)用
為了驗證μC/OS-Ⅱ內(nèi)核運行的正確性,編寫了以下測試程序:系統(tǒng)時鐘周期設(shè)為20ms,設(shè)置4個任務(wù),Task1.Task4,任務(wù)的優(yōu)先級分別為4,5,6,7,每個任務(wù)都有1個變量TasknData;任務(wù)1和任務(wù)2延時50個系統(tǒng)周期,任務(wù)3和任務(wù)4延時100個系統(tǒng)周期,每執(zhí)行1次任務(wù)循環(huán),將該任務(wù)的變量加1,如下:
每次運行10s,觀察OSTime變量與TasknData的值.其中OSTime記錄了系統(tǒng)時鐘數(shù).初值均為0,10s后,得到如下的值:
結(jié)果分析:10s系統(tǒng)時鐘應(yīng)該是10×50=500≈510;任務(wù)1和任務(wù)2每個循環(huán)延時50個系統(tǒng)周期,也就是1s,所以10s內(nèi)應(yīng)該運行10次;任務(wù)3與任務(wù)4在10s內(nèi)應(yīng)該運行5次;上面的結(jié)果可以證明內(nèi)核已經(jīng)正常運行,并實現(xiàn)基本任務(wù)調(diào)度;為了便于分析程序運行的先后順序,在每個任務(wù)中加入myprintf語句,把任務(wù)4改為打印任務(wù),為最低.在任務(wù)1中加入1個發(fā)送郵箱,任務(wù)2中加入接受郵箱.
運行10s后,PC串口接受到如下數(shù)據(jù)(省略“Iamthetask”前綴):2a1a2b2a1b31a2b2a1b2b1b31a2b2a1b1a2b1b3.....從該次試驗結(jié)果分析可看出,內(nèi)核的通訊功能運行正常.
1) 在中斷子程序里啟動任務(wù)的方法.使用μC/OS-Ⅱ嵌入式操作系統(tǒng)后,為了縮短中斷處理時間,常常需要將某些比較費時的程序作為任務(wù)從中斷子程序里獨立出來,同時,這個任務(wù)又需要由中斷來激活.我們可以通過信號量、郵箱、消息隊列來實現(xiàn)這個目的.以郵箱為例,在C程序中,需要先創(chuàng)建郵箱MyMbox,在調(diào)用OSMboxPend()函數(shù)等待消息,在中斷子程序里發(fā)送就可以了.
2) μC/OS-Ⅱ內(nèi)存管理不夠完善.在μC/OS-Ⅱ的應(yīng)用實例中我們發(fā)現(xiàn),在不知道系統(tǒng)初始化后給用戶留下了多少自由內(nèi)存空間的情況下,很難定義內(nèi)存分區(qū)所使用數(shù)組的大小.定義大了,造成內(nèi)存的浪費;定義小了,系統(tǒng)會崩潰.我們通過把連續(xù)的大塊內(nèi)存按分區(qū)管理來解決上述問題.
3) 對代碼臨界區(qū)的改進.對于內(nèi)核程序,在較長的臨界段代碼中插入可重入點;對于可供用戶調(diào)用的函數(shù)用信號量機制改寫1遍,主要是改寫有關(guān)信號量的函數(shù).
4) 系統(tǒng)時鐘中斷的改進.μC/OS-Ⅱ中,系統(tǒng)時鐘中斷的核心函數(shù)是OSTimeTick,該函數(shù)查找每1個延時的任務(wù)是否到期,如果到期則將其放入就緒列表,也就是內(nèi)核只提供延時OSTimeDly()函數(shù).但在許多情況下需要延時一定時間以觸發(fā)某1個事件的發(fā)生,或者需要1個定時器.這里借鑒了Linux內(nèi)核原理,引入了32個靜態(tài)定時器.
運行時需要注意的問題
由于DOS下的C編譯器提供的運行庫沒有考慮多線程應(yīng)用的問題,運行庫中的全局變量和部分函數(shù)只適用于單線程.這些函數(shù)包括errno,-doserrno,strtok,sterror,tmpnam,tmpfile,asctime,gmtime,ecvt,fcvt等.在μC/OS-Ⅱ中使用這些函數(shù)時應(yīng)注意,要避免2個任務(wù)同時調(diào)用這些函數(shù),我們可以使用信號量同步對這些函數(shù)進行調(diào)用.DOS是不能重入的,在調(diào)用DOS服務(wù)期間,是不能再次調(diào)用DOS的,否則會引起系統(tǒng)的崩潰.所以在μC/OS-Ⅱ中,可以調(diào)用BIOS或直接操縱硬件,但應(yīng)盡量減少DOS重入.
結(jié)語
μC/OS-Ⅱ和其他一些著名的嵌入式操作系統(tǒng)不同,它的啟動過程比較簡單.μC/OS-Ⅱ的內(nèi)核是和應(yīng)用程序放在一起編譯成1個文件,使用者只需要把這個文件轉(zhuǎn)換格式寫入ROM中就可以運行了.上電后,它會和普通程序一樣運行.通過詳細研究μC/OS-Ⅱ的特點和內(nèi)核結(jié)構(gòu),完成了μC/OS-Ⅱ在軍用FM80386EX上的移植并對相關(guān)代碼并詳盡的對內(nèi)核進行測試、分析,對內(nèi)存管理、代碼臨界區(qū)、信號量機制提出改進方法,使之更加有效的在處理器上運行.移植成功后,μC/OS-Ⅱ可實時的完成各個任務(wù)的調(diào)度,并且通過嵌入式操作系統(tǒng)μC/OS-Ⅱ在各個任務(wù)間實現(xiàn)通信.μC/OS-Ⅱ具有良好的實時性和很小的代碼量,隨著各種智能嵌入式系統(tǒng)的復(fù)雜化和系統(tǒng)實時性需求的提高,功能強大的實時操作系統(tǒng)μC/OS-Ⅱ?qū)懈蟮陌l(fā)展空間.
評論