新聞中心

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)閉