久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5579|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

uC/OS-III 任務(wù)就緒表學(xué)習(xí)記錄

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:82083 發(fā)表于 2015-6-6 02:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
       

這段時(shí)間利用上下班的時(shí)間在看 《嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-III》這本書,里面有很多很有意思的思想。如今看到第九章,想將之前的一些心得記錄下來,本想今晚從第三章開始寫筆記,敲了一段文字之后,感覺像是抄書,覺得沒有太大意義。時(shí)間長了,連筆記都不知道如何寫。先來個(gè)簡(jiǎn)單點(diǎn)的開始吧。

uC/OS-III 的任務(wù)就緒表和uC/OS-II的就緒表差別很大,簡(jiǎn)單的了很多。
拿8位的單片機(jī),64級(jí)優(yōu)先級(jí)來說。
// 優(yōu)先級(jí)表
unsigned char OSPrioTbl[8] = {0};



每個(gè)元素的每bit位對(duì)應(yīng)的優(yōu)先級(jí)如下,優(yōu)先級(jí)數(shù)值越低表示優(yōu)先級(jí)越高:

OSPrioTbl[0]->bit0~bit7  優(yōu)先級(jí) 0 ~ 7
OSPrioTbl[1]->bit0~bit7  優(yōu)先級(jí) 8 ~ 15
OSPrioTbl[2]->bit0~bit7  優(yōu)先級(jí) 16 ~ 23
OSPrioTbl[3]->bit0~bit7  優(yōu)先級(jí) 24 ~ 31  
OSPrioTbl[4]->bit0~bit7  優(yōu)先級(jí) 32 ~ 39  
OSPrioTbl[5]->bit0~bit7  優(yōu)先級(jí) 40 ~ 47  
OSPrioTbl[6]->bit0~bit7  優(yōu)先級(jí) 48 ~ 55     
OSPrioTbl[7]->bit0~bit7  優(yōu)先級(jí) 56 ~ 63

當(dāng)某一優(yōu)先級(jí)的任務(wù)就緒,對(duì)于的bit位就會(huì)被置1,例如 優(yōu)先級(jí) 7 的任務(wù)就緒,那么
OSPrioTbl[0] 的第bit7位將會(huì)被置位。

查找最高優(yōu)先級(jí)的流程如下(原理實(shí)際上是計(jì)算零的個(gè)數(shù),零的個(gè)數(shù)恰好對(duì)于優(yōu)先級(jí)數(shù)):

OS_PRIO OS_PrioGetHighest()
{
        char i = 0,  char prio = 0;


        // 一次性比較 8位 由于空閑任務(wù)的存在,所以這個(gè)循環(huán)最終都會(huì)跳出而數(shù)組不會(huì)越界訪問。
        while( 0 == OSPrioTbl[i++])
        {
                prio += 8;
        }
        // 這個(gè)函數(shù)實(shí)際上是計(jì)算前導(dǎo)零,即計(jì)算該元素的前面有幾個(gè)零,再與prio相加即得到最高優(yōu)先級(jí)。
        prio += CPU_CntLeadZeros(OSPrioTbl[i-1]);
        return (prio);
}       


有些CPU支持CLZ指令(即計(jì)算簽導(dǎo)零數(shù)量),那么就可以充分利用該指令加速計(jì)算過程。

實(shí)際上,如果是在32位的單片機(jī)下需要64級(jí)優(yōu)先級(jí),那么這個(gè)算法還可以再優(yōu)化成如下:

unsigned  int  OSPrioTbl[2] = {0};

OS_PRIO OS_PrioGetHighest()
{
        char i = 0,  char prio = 0;


        if( 0 != OSPrioTbl[0])
                prio = CPU_CntLeadZeros(OSPrioTbl[0]);
        else
                prio = CPU_CntLeadZeros(OSPrioTbl[1]) + 32;
       
        return (prio);
}       

上述代碼并不是 uC/OS-III  的實(shí)現(xiàn),只是我自己為了方便理解寫了具備相同功能的代碼。
書籍上所述代碼如下:

OS_PRIO OS_PrioGetHighest()
{
        CPU_DATA         *p_tbl;
        OS_PRIO                prio;
        prio = (OS_PRIO)0;
        p_tbl = &OSPrioTbl[0];
        while(*p_tbl == (CPU_DATA)0)
        {
                 prio += DEF_INT_CPU_NBR_BITS;  //  DEF_INT_CPU_NBR_BITS : CPU 位寬
                p_tbl ++;
         }
        prio += (OS_PRIO)CPU_CntLeadZeros(*p_tbl);
        return(prio);
}       



太晚------- 明晚繼續(xù)----------







分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品美女 | 天堂久久天堂综合色 | 国产成人精品免高潮在线观看 | 欧美xxxx日本| 成人影视网 | 国产精品自产拍 | 国产一区二区影院 | 欧美三级电影在线播放 | 亚洲视频一区在线观看 | 国产亚洲精品a | 亚洲精品视频一区二区三区 | 韩国毛片视频 | 69av在线视频| 国产精品一区二区久久久久 | 日韩电影一区 | 亚洲精品一 | 亚洲一区二区免费看 | 特黄色一级毛片 | xxxxx黄色片| 日韩欧美字幕 | 一区二区三区中文字幕 | 中文成人在线 | 久草新在线 | 一本一道久久a久久精品蜜桃 | 在线观看av网站永久 | 日韩一区二区三区在线 | 亚洲国产精品人人爽夜夜爽 | 国产成人高清 | 亚洲国产一区二区三区在线观看 | 黄色成人免费看 | 精品99爱视频在线观看 | 国产高清精品一区二区三区 | 亚洲精品久久久久久久久久久久久 | 国产精品欧美一区二区三区不卡 | 天天操天天射天天 | 青青草亚洲 | 999国产视频 | 久久精品亚洲 | 黄色一级免费 | 一区免费看 | 国产精品视频一区二区三区不卡 |