<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è) > 嵌入式系統 > 設計應用 > UC/OS-II的最高優(yōu)先級別查找方法分析

UC/OS-II的最高優(yōu)先級別查找方法分析

作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò ) 收藏
UC/OS-II是常用的嵌入式實(shí)時(shí)操作系統,該操作系統最多支持64個(gè)任務(wù),由于操作系統是優(yōu)先級搶占型實(shí)時(shí)系統,因此對任務(wù)最高優(yōu)先級如何查找是比較重要的。
在UC/OS-II中采用位圖法的方式表示,也就是每一個(gè)bit表示一個(gè)任務(wù),因此可以將一個(gè)8bits的數組成含有8個(gè)元素的數組即可。當任務(wù)已經(jīng)準確就緒以后就會(huì )將相應的位設置為1。通常采用OSRdyTbl[i],0=
由于在UC/OS-II中優(yōu)先級號越小,優(yōu)先級越高,因此我們在實(shí)際的調度過(guò)程中需要知道優(yōu)先級別最高的。本來(lái)只有64bits,可以采用簡(jiǎn)單的查詢(xún)實(shí)現,但是我們可以知道對于不同的優(yōu)先級號,查詢(xún)的時(shí)間是不相同的,這樣也就是的我們的實(shí)時(shí)系統有了一定的延時(shí)。在UC/OS-II中的實(shí)現體現了一定的優(yōu)越型,對于不同的優(yōu)先級別都是相同的時(shí)間,這樣也就使得實(shí)時(shí)型進(jìn)一步提高。他的實(shí)現方法主要是依據了查表法。具體的表格設計思路如下。根據上面的分析可以知道,我們只需要分別知道行列就能知道有限級別號。那么找到最優(yōu)先的行號和最優(yōu)先的列號也就實(shí)現了最高優(yōu)先級的查找。
實(shí)現的思路如下:
因為OSRdyGrp有8bits,那么可能存在256種情況,通過(guò)OSRdyGrp就能知道最優(yōu)先的行i,同樣OSRdyTbl[i]也是8bits,那么也有8bits,一共存在256種情況,通過(guò)他也就能知道最優(yōu)先的列j。因此我們也可以根據同樣的表實(shí)現判斷。
表的設計過(guò)程如下:
由于OSRdyGrp存在256種情況,我們只需要知道為1的最低bit就知道了最優(yōu)的行號,比如OSRdyGrp=98(d)=1100010(b),為1的最低bit為bit1,因此我們就可以根據OSRdyGrp知道最高優(yōu)先級號是在第1組中,即找到行號為1。同樣的方法也可以適用于最優(yōu)列的查找。
因此可以設計表為如下:
  1. INT8UconstOSUnMapTbl[256]={
  2. /*0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f*/
  3. 0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x00to0x0F*/
  4. 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x10to0x1F*/
  5. 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x20to0x2F*/
  6. 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x30to0x3F*/
  7. 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x40to0x4F*/
  8. 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x50to0x5F*/
  9. 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x60to0x6F*/
  10. 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x70to0x7F*/
  11. 7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x80to0x8F*/
  12. 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x90to0x9F*/
  13. 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xA0to0xAF*/
  14. 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xB0to0xBF*/
  15. 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xC0to0xCF*/
  16. 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xD0to0xDF*/
  17. 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xE0to0xEF*/
  18. 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0/*0xF0to0xFF*/
  19. };
根據上面的表格能找到每一個(gè)OSRdyGrp值對應的最高優(yōu)先級號所在的行,同樣依據上表能找到OSRdyTbl[i]每一個(gè)值對應的最高優(yōu)先級號所在的列。然后依據上面的等式TaskPrior = 8*i+j=(i<<3)+ j,分別確定i,和j。
即:
i = OSUnMapTbl[OSRdyGrp] ;// 找到行號
j = OSUnMapTbl[OSRdyTbl[i]];//找到列號
TaskPrior = 8*i+j=(i<<3)+ j;//找到最高優(yōu)先級號。
以上的位圖和查表法的相結合就很好的解決了UC/OS-II的優(yōu)先級管理問(wèn)題。
拓展:如果優(yōu)先級別號越高,表示的有限級越高時(shí),同樣也可以采用這種位圖法和查表相結合的原理。只是表格的內容存在差別而已,那時(shí)就應該選擇最高bit為1時(shí)對應的bit值。這樣就能很快的找到就緒的最大的優(yōu)先級別號。


評論


相關(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>