中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > uC/OS-II源碼分析

        uC/OS-II源碼分析

        作者: 時間:2016-09-12 來源:網絡 收藏

        INT8UOSTCBBitX;/*Bitmasktoaccessbitpositioninreadytable

        INT8UOSTCBBitY;/*Bitmasktoaccessbitpositioninreadygroup

        #ifOS_TASK_DEL_EN>0

        BOOLEANOSTCBDelReq;/*表面任務是否需要刪除自己*/

        #endif

        }OS_TCB;

        uC/OS-II在通過OS_MAX_TASKS定義了最大的任務數(shù)目,這也決定了分配給用戶程序的任務控制塊OS_TCB的數(shù)目,但此外uC/OS-II還分配給系統(tǒng)任務OS_N_SYS_TASKS若干個額外的任務控制塊,供其內部使用。uC/OS-II初始化時,所以任務控制塊都被鏈接成單向空任務鏈表,任務一旦建立,空任務控制塊指針OSTCBFreeList指向的任務控制塊就賦給該任務,然后OSTCBFreeList調整為指向鏈表中下一個空任務控制塊。一旦任務被刪除,任務控制塊被還給空任務鏈表。

        任務建立時,OS_TCBInit()初始化任務控制塊,函數(shù)OSTaskCreate()或OSTaskCreateExt()調用任務控制塊初始化函數(shù)TCBInit。

        INT8UOS_TCBInit(INT8Uprio,OS_STK*ptos,OS_STK*pbos,INT16Uid,INT32Ustk_size,void*pext,INT16Uopt)

        {

        #ifOS_CRITICAL_METHOD==3/*為CPU狀態(tài)寄存器分配內存*/

        OS_CPU_SRcpu_sr;

        #endif

        OS_TCB*ptcb;

        OS_ENTER_CRITICAL();

        ptcb=OSTCBFreeList;/*從空閑TCB鏈表中取一個空TCB*/

        if(ptcb!=(OS_TCB*)0)

        {//取到了空TCB

        OSTCBFreeList=ptcb->OSTCBNext;/*更新空閑TCB鏈表頭指針*/

        OS_EXIT_CRITICAL();

        ptcb->OSTCBStkPtr=ptos;/*保存棧頂指針到TCB*/

        ptcb->OSTCBPrio=(INT8U)prio;/*保存任務優(yōu)先級到TCB*/

        ptcb->OSTCBStat=OS_STAT_RDY;/*任務狀態(tài)設置為就緒*/

        ptcb->OSTCBDly=0;/*任務不延時等待*/

        #ifOS_TASK_CREATE_EXT_EN>0//使用擴展

        ptcb->OSTCBExtPtr=pext;/*保存TCB擴展指針*/

        ptcb->OSTCBStkSize=stk_size;/*保存棧大小*/

        ptcb->OSTCBStkBottom=pbos;/*保存棧底*/

        ptcb->OSTCBOpt=opt;/*保存任務選擇項*/

        ptcb->OSTCBId=id;/*保存任務ID*/

        #else//不使用擴展

        pext=pext;

        stk_size=stk_size;

        pbos=pbos;

        opt=opt;

        id=id;

        #endif

        #ifOS_TASK_DEL_EN>0

        ptcb->OSTCBDelReq=OS_NO_ERR;//初始化刪除標志

        #endif

        ptcb->OSTCBY=prio>>3;/*預先計算X,Y,BitXandBitY*/

        ptcb->OSTCBBitY=OSMapTbl[ptcb->OSTCBY];

        ptcb->OSTCBX=prio0x07;

        ptcb->OSTCBBitX=OSMapTbl[ptcb->OSTCBX];

        #ifOS_EVENT_EN>0

        ptcb->OSTCBEventPtr=(OS_EVENT*)0;/*任務不等待任何事件發(fā)生*/

        #endif

        #if(OS_VERSION>=251)(OS_FLAG_EN>0)(OS_MAX_FLAGS>0)(OS_TASK_DEL_EN>0)

        ptcb->OSTCBFlagNode=(OS_FLAG_NODE*)0;/*任務不等待事件標志*/

        #endif

        #if(OS_MBOX_EN>0)||((OS_Q_EN>0)(OS_MAX_QS>0))

        ptcb->OSTCBMsg=(void*)0;/*沒有接收任何消息*/

        #endif

        #ifOS_VERSION>=204

        OSTCBInitHook(ptcb);

        #endif

        OSTaskCreateHook(ptcb);/*調用用戶定義的鉤子函數(shù)*/

        OS_ENTER_CRITICAL();

        OSTCBPrioTbl[prio]=ptcb;

        ptcb->OSTCBNext=OSTCBList;/*將TCB插入已經建立任務的雙向鏈表中*/

        ptcb->OSTCBPrev=(OS_TCB*)0;

        if(OSTCBList!=(OS_TCB*)0){

        OSTCBList->OSTCBPrev=ptcb;

        }

        OSTCBList=ptcb;

        OSRdyGrp|=ptcb->OSTCBBitY;/*讓用戶進入就緒態(tài)*/

        OSRdyTbl[ptcb->OSTCBY]|=ptcb->OSTCBBitX;

        OS_EXIT_CRITICAL();

        return(OS_NO_ERR);

        }

        OS_EXIT_CRITICAL();

        return(OS_NO_MORE_TCB);

        }


        上一頁 1 2 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區(qū)

        關閉