UC/OS-II的最高優(yōu)先級(jí)別查找方法分析
在UC/OS-II中采用位圖法的方式表示,也就是每一個(gè)bit表示一個(gè)任務(wù),因此可以將一個(gè)8bits的數(shù)組成含有8個(gè)元素的數(shù)組即可。當(dāng)任務(wù)已經(jīng)準(zhǔn)確就緒以后就會(huì)將相應(yīng)的位設(shè)置為1。通常采用OSRdyTbl[i],0=
由于在UC/OS-II中優(yōu)先級(jí)號(hào)越小,優(yōu)先級(jí)越高,因此我們?cè)趯?shí)際的調(diào)度過程中需要知道優(yōu)先級(jí)別最高的。本來只有64bits,可以采用簡單的查詢實(shí)現(xiàn),但是我們可以知道對(duì)于不同的優(yōu)先級(jí)號(hào),查詢的時(shí)間是不相同的,這樣也就是的我們的實(shí)時(shí)系統(tǒng)有了一定的延時(shí)。在UC/OS-II中的實(shí)現(xiàn)體現(xiàn)了一定的優(yōu)越型,對(duì)于不同的優(yōu)先級(jí)別都是相同的時(shí)間,這樣也就使得實(shí)時(shí)型進(jìn)一步提高。他的實(shí)現(xiàn)方法主要是依據(jù)了查表法。具體的表格設(shè)計(jì)思路如下。根據(jù)上面的分析可以知道,我們只需要分別知道行列就能知道有限級(jí)別號(hào)。那么找到最優(yōu)先的行號(hào)和最優(yōu)先的列號(hào)也就實(shí)現(xiàn)了最高優(yōu)先級(jí)的查找。
實(shí)現(xiàn)的思路如下:
因?yàn)镺SRdyGrp有8bits,那么可能存在256種情況,通過OSRdyGrp就能知道最優(yōu)先的行i,同樣OSRdyTbl[i]也是8bits,那么也有8bits,一共存在256種情況,通過他也就能知道最優(yōu)先的列j。因此我們也可以根據(jù)同樣的表實(shí)現(xiàn)判斷。
表的設(shè)計(jì)過程如下:
由于OSRdyGrp存在256種情況,我們只需要知道為1的最低bit就知道了最優(yōu)的行號(hào),比如OSRdyGrp=98(d)=1100010(b),為1的最低bit為bit1,因此我們就可以根據(jù)OSRdyGrp知道最高優(yōu)先級(jí)號(hào)是在第1組中,即找到行號(hào)為1。同樣的方法也可以適用于最優(yōu)列的查找。
因此可以設(shè)計(jì)表為如下:
- INT8UconstOSUnMapTbl[256]={
- /*0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f*/
- 0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x00to0x0F*/
- 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x10to0x1F*/
- 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x20to0x2F*/
- 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x30to0x3F*/
- 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x40to0x4F*/
- 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x50to0x5F*/
- 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x60to0x6F*/
- 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x70to0x7F*/
- 7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x80to0x8F*/
- 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x90to0x9F*/
- 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xA0to0xAF*/
- 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xB0to0xBF*/
- 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xC0to0xCF*/
- 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xD0to0xDF*/
- 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xE0to0xEF*/
- 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0/*0xF0to0xFF*/
- };
根據(jù)上面的表格能找到每一個(gè)OSRdyGrp值對(duì)應(yīng)的最高優(yōu)先級(jí)號(hào)所在的行,同樣依據(jù)上表能找到OSRdyTbl[i]每一個(gè)值對(duì)應(yīng)的最高優(yōu)先級(jí)號(hào)所在的列。然后依據(jù)上面的等式TaskPrior = 8*i+j=(i<<3)+ j,分別確定i,和j。
即:
i = OSUnMapTbl[OSRdyGrp] ;// 找到行號(hào)
j = OSUnMapTbl[OSRdyTbl[i]];//找到列號(hào)
TaskPrior = 8*i+j=(i<<3)+ j;//找到最高優(yōu)先級(jí)號(hào)。
以上的位圖和查表法的相結(jié)合就很好的解決了UC/OS-II的優(yōu)先級(jí)管理問題。
拓展:如果優(yōu)先級(jí)別號(hào)越高,表示的有限級(jí)越高時(shí),同樣也可以采用這種位圖法和查表相結(jié)合的原理。只是表格的內(nèi)容存在差別而已,那時(shí)就應(yīng)該選擇最高bit為1時(shí)對(duì)應(yīng)的bit值。這樣就能很快的找到就緒的最大的優(yōu)先級(jí)別號(hào)。
關(guān)鍵詞:
UCOS-II最高優(yōu)先級(jí)別查找方
相關(guān)推薦
-
Gao | 2003-02-17
-
-
-
-
唐朝 | 2003-07-11
-
wsser | 2004-07-25
-
jameszxj | 2003-09-06
-
技創(chuàng)快刀 | 2004-04-29
-
-
-
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論