新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 從 μC/OS 升級到 μC/OS-II

        從 μC/OS 升級到 μC/OS-II

        作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

        OSTaskStkInit()中。

        程序清單L10.9μC/OS 中的 OSTaskCreate()

        UBYTEOSTaskCreate(void(*task)(void*pd),void*pdata,void*pstk,UBYTE

        p)

        {

        UWORDOS_FAR*stk;

        UBYTEerr;

        OS_ENTER_CRITICAL();

        if(OSTCBPrioTbl[p]==(OS_TCB*)0){

        OSTCBPrioTbl[p]=(OS_TCB*)1;

        OS_EXIT_CRITICAL();(1)

        stk=(UWORDOS_FAR*)pstk;

        *--stk=(UWORD)FP_OFF(pdata);

        *--stk=(UWORD)FP_SEG(task);

        *--stk=(UWORD)FP_OFF(task);

        *--stk=(UWORD)0x0202;

        *--stk=(UWORD)FP_SEG(task);

        *--stk=(UWORD)FP_OFF(task);

        *--stk=(UWORD)0x0000;

        *--stk=(UWORD)0x0000;

        *--stk=(UWORD)0x0000;

        *--stk=(UWORD)0x0000;

        *--stk=(UWORD)0x0000;

        *--stk=(UWORD)0x0000;

        *--stk=(UWORD)0x0000;

        *--stk=(UWORD)0x0000;

        *--stk=(UWORD)0x0000;

        *--stk=_DS;

        err=OSTCBInit(p,(voidfar*)stk);(2)

        if(err==OS_NO_ERR){

        if(OSRunning){

        OSSched();

        }

        }else{

        OSTCBPrioTbl[p]=(OS_TCB*)0;

        }

        return(err);

        }else{

        OS_EXIT_CRITICAL();

        return(OS_PRIO_EXIST);

        }

        }

        程序清單 L10.10 μC/OS-II中的OSTaskStkInit()

        void*OSTaskStkInit(void(*task)(void*pd),void*pdata,void*ptos,

        INT16Uopt)

        {

        INT16U*stk;

        opt=opt;

        stk=(INT16U*)ptos;

        *stk--=(INT16U)FP_SEG(pdata);

        *stk--=(INT16U)FP_OFF(pdata);

        *stk--=(INT16U)FP_SEG(task);

        *stk--=(INT16U)FP_OFF(task);

        *stk--=(INT16U)0x0202;

        *stk--=(INT16U)FP_SEG(task);

        *stk--=(INT16U)FP_OFF(task);

        *stk--=(INT16U)0xAAAA;

        *stk--=(INT16U)0xCCCC;

        *stk--=(INT16U)0xDDDD;

        *stk--=(INT16U)0xBBBB;

        *stk--=(INT16U)0x0000;

        *stk--=(INT16U)0x1111;

        *stk--=(INT16U)0x2222;

        *stk--=(INT16U)0x3333;

        *stk--=(INT16U)0x4444;

        *stk=_DS;

        return((void*)stk);

        }

        10.4.2OSTaskCreateHook()

        OSTaskCreateHook()在μC/OS中沒有,如程序清單L10.11所示,在由.μC/OS 向μC/OS-II升級時,定義一個空函數(shù)就可以了。注意其中的賦值語句,如果不把Ptcb賦給Ptcb,有些編譯器會產(chǎn)生一個警告錯誤,說定義的Ptcb變量沒有用到。

        程序清單10.11 μC/OS-II 中的OSTaskCreateHook()

        #ifOS_CPU_HOOKS_EN

        OSTaskCreateHook(OS_TCB*ptcb)

        {

        ptcb=ptcb;

        }

        #endif

        OS_CFG.H

        OS_CPU_HOOKS _EN設(shè)為1時,OSTaskCreateHook()的代碼才會生成。這樣做的好處是允許

        用戶移植時可在不同文件中定義鉤子函數(shù)。

        10.4.3OSTaskDelHook()

        OSTaskDelHook() 這個函數(shù)在μC/OS中沒有,如程序清單10.12所示,從μC/OS 到μC/OS-II,只要簡單地定義一個空函數(shù)就可以了。注意,如果不用賦值語句將ptcb賦值為ptcb,有些編譯程序可能會產(chǎn)生一些警告信息,指出定義的ptcb變量沒有用到。

        程序清單L10.12 μC/OS-II中的OSTaskDelHook().

        #ifOS_CPU_HOOKS_EN

        OSTaskDelHook(OS_TCB*ptcb)

        {

        ptcb=ptcb;

        }

        #endif

        也還是要用條件編譯管理指令來處理這個函數(shù)。只有把OS_CFG.H. 文件中的

        OS_CPU_HOOKS_EN 設(shè)為1,OSTaskDelHook()的代碼才能生成。這樣做的好處是允許用戶移植時在不同的文件中定義鉤子函數(shù)。

        10.4.4OSTaskSwHook()

        OSTaskSwHook() 在μC/OS 中也不存在。從μC/OS向μC/OS-II升級時,只要簡單地定義一個空

        函數(shù)就可以了,如程序清單L10.13所示。

        程序清單L10.13 μC/OS-II中的OSTaskSwHook()函數(shù)

        #ifOS_CPU_HOOKS_EN

        OSTaskSwHook(void)

        {

        }

        #endif

        也還是要用編譯管理指令來處理這個函數(shù)。 只有把OS_CFG.H 文件中的OS_CPU_HOOKS_EN設(shè)為1,OSTaskSwHook() 的代碼才能生成。.

        10.4.5OSTaskStatHook()

        OSTaskStatHook()在μC/OS中不存在,從μC/OS向μC/OS-II升級時,只要簡單地定義一個空函數(shù)就可以了,如程序清單L10.14所示。

        也還是要用編譯管理指令來處理這個函數(shù)。 只有把OS_CFG.H 文件中的OS_CPU_HOOKS_EN設(shè)為1,OSTaskSwHook() 的代碼才能生成。

        程序清單L10.14 μC/OS-II中的OSTaskStatHook()函數(shù)

        #ifOS_CPU_HOOKS_EN

        OSTaskStatHook(void)

        {

        }

        #endif

        10.4.6OSTimeTickHook()

        OSTimeTickHook()在μC/OS中不存在,從μC/OS向μC/OS-II升級時,只要簡單地定義一個空函數(shù)就可以了,如程序清單L10.15所示。

        也還是要用編譯管理指令來處理這個函數(shù)。 只有把OS_CFG.H 文件中的OS_CPU_HOOKS_EN設(shè)為1,OSTimeTickHook()的代碼才能生成。

        .

        程序清單L10.15 μC/OS-II中的OSTimeTickHook()

        #ifOS_CPU_HOOKS_EN

        OSTimeTickHook(void)

        {

        }

        #endif

        10.5總結(jié)

        表T10.3總結(jié)了從μC/OS向μC/OS-II.升級需要改變得地方。其中processor_name.?是μC/OS中

        移植范例程序的文件名。

        表 T10.3 升級 μC/OS到 μC/OS-I要修改的地方


        上一頁 1 2 3 下一頁

        關(guān)鍵詞:

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 石屏县| 赞皇县| 美姑县| 兰考县| 大理市| 禹城市| 勃利县| 龙川县| 乌兰浩特市| 台山市| 嫩江县| 来凤县| 荣昌县| 卓尼县| 浪卡子县| 宜兰县| 阿拉尔市| 吉木萨尔县| 神池县| 墨江| 察哈| 那坡县| 衡阳市| 阳朔县| 许昌市| 临沭县| 沁源县| 洛川县| 陆川县| 克东县| 马关县| 嘉荫县| 蓝田县| 通榆县| 盐亭县| 霍城县| 开化县| 贵港市| 聂拉木县| 滦南县| 敖汉旗|