<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > μC/OS2Ⅱ在軍用FM80386EX處理器上的移植應用

μC/OS2Ⅱ在軍用FM80386EX處理器上的移植應用

作者: 時(shí)間:2009-02-25 來(lái)源:網(wǎng)絡(luò ) 收藏
 測試

本文引用地址:http://dyxdggzs.com/article/152642.htm

  為了驗證μC/OS-Ⅱ內核運行的正確性,編寫(xiě)了以下測試程序:系統時(shí)鐘周期設為20ms,設置4個(gè)任務(wù),Task1.Task4,任務(wù)的優(yōu)先級分別為4,5,6,7,每個(gè)任務(wù)都有1個(gè)變量TasknData;任務(wù)1和任務(wù)2延時(shí)50個(gè)系統周期,任務(wù)3和任務(wù)4延時(shí)100個(gè)系統周期,每執行1次任務(wù)循環(huán),將該任務(wù)的變量加1,如下:

 每次運行10s,觀(guān)察OSTime變量與TasknData的值.其中OSTime記錄了系統時(shí)鐘數.初值均為0,10s后,得到如下的值:

結果分析:10s系統時(shí)鐘應該是10×50=500≈510;任務(wù)1和任務(wù)2每個(gè)循環(huán)延時(shí)50個(gè)系統周期,也就是1s,所以10s內應該運行10次;任務(wù)3與任務(wù)4在10s內應該運行5次;上面的結果可以證明內核已經(jīng)正常運行,并實(shí)現基本任務(wù)調度;為了便于分析程序運行的先后順序,在每個(gè)任務(wù)中加入myprintf語(yǔ)句,把任務(wù)4改為打印任務(wù),為最低.在任務(wù)1中加入1個(gè)發(fā)送郵箱,任務(wù)2中加入接受郵箱.

運行10s后,PC串口接受到如下數據(省略“Iamthetask”前綴):2a1a2b2a1b31a2b2a1b2b1b31a2b2a1b1a2b1b3.....從該次試驗結果分析可看出,內核的通訊功能運行正常.

  分析

  1) 在中斷子程序里啟動(dòng)任務(wù)的方法.使用μC/OS-Ⅱ嵌入式操作系統后,為了縮短中斷處理時(shí)間,常常需要將某些比較費時(shí)的程序作為任務(wù)從中斷子程序里獨立出來(lái),同時(shí),這個(gè)任務(wù)又需要由中斷來(lái)激活.我們可以通過(guò)信號量、郵箱、消息隊列來(lái)實(shí)現這個(gè)目的.以郵箱為例,在C程序中,需要先創(chuàng )建郵箱MyMbox,在調用OSMboxPend()函數等待消息,在中斷子程序里發(fā)送就可以了.

  2) μC/OS-Ⅱ內存管理不夠完善.在μC/OS-Ⅱ的實(shí)例中我們發(fā)現,在不知道系統初始化后給用戶(hù)留下了多少自由內存空間的情況下,很難定義內存分區所使用數組的大小.定義大了,造成內存的浪費;定義小了,系統會(huì )崩潰.我們通過(guò)把連續的大塊內存按分區管理來(lái)解決上述問(wèn)題.

  3) 對代碼臨界區的改進(jìn).對于內核程序,在較長(cháng)的臨界段代碼中插入可重入點(diǎn);對于可供用戶(hù)調用的函數用信號量機制改寫(xiě)1遍,主要是改寫(xiě)有關(guān)信號量的函數.

  4) 系統時(shí)鐘中斷的改進(jìn).μC/OS-Ⅱ中,系統時(shí)鐘中斷的核心函數是OSTimeTick,該函數查找每1個(gè)延時(shí)的任務(wù)是否到期,如果到期則將其放入就緒列表,也就是內核只提供延時(shí)OSTimeDly()函數.但在許多情況下需要延時(shí)一定時(shí)間以觸發(fā)某1個(gè)事件的發(fā)生,或者需要1個(gè)定時(shí)器.這里借鑒了Linux內核原理,引入了32個(gè)靜態(tài)定時(shí)器.

  運行時(shí)需要注意的問(wèn)題

  由于DOS下的C編譯器提供的運行庫沒(méi)有考慮多線(xiàn)程的問(wèn)題,運行庫中的全局變量和部分函數只適用于單線(xiàn)程.這些函數包括errno,-doserrno,strtok,sterror,tmpnam,tmpfile,asctime,gmtime,ecvt,fcvt等.在μC/OS-Ⅱ中使用這些函數時(shí)應注意,要避免2個(gè)任務(wù)同時(shí)調用這些函數,我們可以使用信號量同步對這些函數進(jìn)行調用.DOS是不能重入的,在調用DOS服務(wù)期間,是不能再次調用DOS的,否則會(huì )引起系統的崩潰.所以在μC/OS-Ⅱ中,可以調用BIOS或直接操縱硬件,但應盡量減少DOS重入.

  結語(yǔ)

  μC/OS-Ⅱ和其他一些著(zhù)名的嵌入式操作系統不同,它的啟動(dòng)過(guò)程比較簡(jiǎn)單.μC/OS-Ⅱ的內核是和程序放在一起編譯成1個(gè)文件,使用者只需要把這個(gè)文件轉換格式寫(xiě)入ROM中就可以運行了.上電后,它會(huì )和普通程序一樣運行.通過(guò)詳細研究μC/OS-Ⅱ的特點(diǎn)和內核結構,完成了μC/OS-Ⅱ在上的并對相關(guān)代碼并詳盡的對內核進(jìn)行測試、分析,對內存管理、代碼臨界區、信號量機制提出改進(jìn)方法,使之更加有效的在上運行.成功后,μC/OS-Ⅱ可的完成各個(gè)任務(wù)的調度,并且通過(guò)嵌入式操作系統μC/OS-Ⅱ在各個(gè)任務(wù)間實(shí)現通信.μC/OS-Ⅱ具有良好的性和很小的代碼量,隨著(zhù)各種智能嵌入式系統的復雜化和系統性需求的提高,功能強大的實(shí)時(shí)操作系統μC/OS-Ⅱ將會(huì )有更大的發(fā)展空間.


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>