<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/OS優(yōu)先級調度機制在PowerPC上的優(yōu)化

μC/OS優(yōu)先級調度機制在PowerPC上的優(yōu)化

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

  在這段代碼中,首先判斷前32個(gè)任務(wù)是否有處于就緒態(tài)的,如果沒(méi)有的話(huà),再對后32個(gè)任務(wù)進(jìn)行判斷。由于優(yōu)先級最低的空閑任務(wù)總是處于就緒態(tài),所以后32個(gè)任務(wù)總能返回一個(gè)有效值。該代碼在前32個(gè)任務(wù)有就緒態(tài)時(shí)運行7條指令,在前32個(gè)任務(wù)均沒(méi)有就緒時(shí)需要執行10條指令;而μC/OS原有的代碼編譯出來(lái)的匯編程序,則需要運行15條指令。

  使用這個(gè)方法的另一個(gè)好處是不再需要使用256字節的OSUnMapTbl表,任務(wù)控制塊TCB也不需要使用OSTCBX、OSTCBY和OSTCBBitY、OSTCBBitX變量,每個(gè)ECB中也不再需要OSRdyGrp,這也減少了對ROM和RAM的占用。

4 改進(jìn)擴展任務(wù)數的優(yōu)先級調度性能

  當對μC/OSII支持的任務(wù)數進(jìn)行擴展時(shí),按照μC/OSII原有的做法,需要按照高低字節分別查找OSUnMapTbl對照表。任務(wù)數為256時(shí),尋找最高優(yōu)先級就緒任務(wù)的函數將需要運行約35條指令。數出前導零數目的指令在這種情況下的作用將更加顯著(zhù),對于32位PowerPC處理器,精心設計的代碼可以做到僅需10條指令就將任務(wù)數擴展到1024個(gè)。

  此時(shí)OSRdyGrp擴展為32位,OSrdyTbl擴展成32個(gè)32位的數組。從OSRdyGrp得到的前導零數目,就是任務(wù)優(yōu)先級高5位的值,乘以4可以得到該字的相對偏移地址;在OSRdyTbl中,定義高位對應高優(yōu)先級任務(wù),低位對應低優(yōu)先級任務(wù),則其前導零數目就是任務(wù)優(yōu)先級低5位的值,和高5位的值移位相加就得到完整的任務(wù)優(yōu)先級。通過(guò)將OSRdyGrp和OSRdyTbl定義成結構體,利用結構體首地址的相對尋址來(lái)分別讀取其數值,可以減少一次取地址的操作。

  尋找最高優(yōu)先級就緒態(tài)的最終代碼如下:

typedef struct {//定義結構體
  INT32U Tbl[32];
  INT32U Grp;
} OSTaskRdyBlock;
OSTaskRdyBlock OSRdy;//定義全局變量OSRdy
asm INT16U FindHighestRdyTask(void){
  lisr5,OSRdy@ha//將OSRdy結構體指針載入r5寄存器
  orir5,r5,OSRdy@l
  lwzr3,128(r5)//OSRdy.Grp在結構體中具有固定偏移量
  cntlzwr3,r3//數出OSRdyGrp的前導零數目
  slwir6,r3,2//得到OSRdyTbl的地址偏移量
  lwzxr4,r6,r5//通過(guò)結構體指針,讀取OSRdy.Tbl的對應字
  cntlzwr4,r4//計算OSRdyTbl對應字的前導零數目
  slwir3,r3,5//任務(wù)優(yōu)先級高5位移位
  addr3,r4,r3//和優(yōu)先級低5位相加,得到完整優(yōu)先級
  blr//返回
}

  在64位的PowerPC 更有cntlzd(Count Leading Zero Double word)指令,一次就可以找出64個(gè)任務(wù)中優(yōu)先級最高的那個(gè),就更沒(méi)有必要使用μC/OSII中的算法了。

5 總結

  RTOS實(shí)時(shí)內核μC/OS和μC/OSII中,任務(wù)調度算法巧妙,性能優(yōu)異,在應用領(lǐng)域很有影響力,被移植到各種上。然而由于是為8位設計的,對于那些具有優(yōu)先級硬件算法指令的16/32/64位,μC/OSII的軟件算法就完全失去了優(yōu)勢。應該利用這類(lèi)CPU的特有指令,優(yōu)化任務(wù)調度算法,使RTOS的實(shí)時(shí)性達到最佳。對于這類(lèi)處理器,僅移植μC/OSII軟件算法是很不夠的,應該利用相關(guān)硬件算法指令。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

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

關(guān)鍵詞: 嵌入式 CPU

評論


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