在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > UC/OS-II的最高優(yōu)先級別查找方法分析

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

            作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏
            UC/OS-II是常用的嵌入式實時操作系統(tǒng),該操作系統(tǒng)最多支持64個任務,由于操作系統(tǒng)是優(yōu)先級搶占型實時系統(tǒng),因此對任務最高優(yōu)先級如何查找是比較重要的。
            在UC/OS-II中采用位圖法的方式表示,也就是每一個bit表示一個任務,因此可以將一個8bits的數(shù)組成含有8個元素的數(shù)組即可。當任務已經(jīng)準確就緒以后就會將相應的位設置為1。通常采用OSRdyTbl[i],0=
            由于在UC/OS-II中優(yōu)先級號越小,優(yōu)先級越高,因此我們在實際的調(diào)度過程中需要知道優(yōu)先級別最高的。本來只有64bits,可以采用簡單的查詢實現(xiàn),但是我們可以知道對于不同的優(yōu)先級號,查詢的時間是不相同的,這樣也就是的我們的實時系統(tǒng)有了一定的延時。在UC/OS-II中的實現(xiàn)體現(xiàn)了一定的優(yōu)越型,對于不同的優(yōu)先級別都是相同的時間,這樣也就使得實時型進一步提高。他的實現(xiàn)方法主要是依據(jù)了查表法。具體的表格設計思路如下。根據(jù)上面的分析可以知道,我們只需要分別知道行列就能知道有限級別號。那么找到最優(yōu)先的行號和最優(yōu)先的列號也就實現(xiàn)了最高優(yōu)先級的查找。
            實現(xiàn)的思路如下:
            因為OSRdyGrp有8bits,那么可能存在256種情況,通過OSRdyGrp就能知道最優(yōu)先的行i,同樣OSRdyTbl[i]也是8bits,那么也有8bits,一共存在256種情況,通過他也就能知道最優(yōu)先的列j。因此我們也可以根據(jù)同樣的表實現(xiàn)判斷。
            表的設計過程如下:
            由于OSRdyGrp存在256種情況,我們只需要知道為1的最低bit就知道了最優(yōu)的行號,比如OSRdyGrp=98(d)=1100010(b),為1的最低bit為bit1,因此我們就可以根據(jù)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. };
            根據(jù)上面的表格能找到每一個OSRdyGrp值對應的最高優(yōu)先級號所在的行,同樣依據(jù)上表能找到OSRdyTbl[i]每一個值對應的最高優(yōu)先級號所在的列。然后依據(jù)上面的等式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)先級號。
            以上的位圖和查表法的相結(jié)合就很好的解決了UC/OS-II的優(yōu)先級管理問題。
            拓展:如果優(yōu)先級別號越高,表示的有限級越高時,同樣也可以采用這種位圖法和查表相結(jié)合的原理。只是表格的內(nèi)容存在差別而已,那時就應該選擇最高bit為1時對應的bit值。這樣就能很快的找到就緒的最大的優(yōu)先級別號。


            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉