μC/OS-II在S3C44BOX上的移植
?。?)OS_CPU.H
在OS_CPU.H文件中定義。與編譯器相關(guān)的數(shù)據(jù)類型。μS/OS-II為了保證可移植性,程序中沒有直接使 用int、unsigned int等定義,而是自己定義了一套數(shù)據(jù)類型,例如,INT16U表示16位無符號整型。對于 32位內(nèi)核ARM微控制器,INT16U是unsianed short型;若是16位的處理器,則是unsigned int型。; μC/OS-II使用的變量類型如表1所示。
表1 μC/OS-II使用的變量類型
同時,在該文件中還定義了使能和禁止中斷宏、棧的增長方向、定義符號OS_STK_GROWTH的值;還定義 了μC/OS-II的OS TASK SW宏,該宏是μC/OS-II從低優(yōu)先級任務切換到高優(yōu)先級任務時的調(diào)用,可以 采用下面兩種方式定義:一種是如果處理器支持軟中斷,那么可以使用軟中斷向量指向OSCtxSw函數(shù);另 一種是直接調(diào)用OSCrxSw函數(shù)。
(2)OS_CPU_A.ASM
在該文件中有4個匯編函數(shù)需要移植,如下:
●OSStartHighRdy函數(shù):該函數(shù)由OSStart函數(shù)調(diào)用,OSStart函數(shù)負責調(diào)度就緒狀態(tài)的任務開始運行 ,而其中OSStartHighRdy負責獲取新任務的堆棧指針,并從堆棧指針中恢復新任務的所有處理器寄存器 。函數(shù)要移植的原因就是因為它涉及將處理器寄存器保存到堆棧。
●OSCtxSw函數(shù):該函數(shù)由OS_TASK_SW宏調(diào)用,OS_TASK_SW宏由OSSched函數(shù)調(diào)用,OSSched函數(shù)負責任 務之間的切換。OSCtxSw函數(shù)在OSSched函數(shù)中負責將當前任務對應的處理器寄存器保存到堆棧中,并將 任務中需要恢復的處理器寄存器從堆棧中恢復出來。
●OSlntCtxSw函數(shù):該函數(shù)由OSlntExit函數(shù)調(diào)用,OSlntExit函數(shù)由OSTickISR函數(shù)調(diào)用。OSlntCtxSw 負責在定時中斷中任務之間的切換,保存當前任務堆棧指針,并將新任務對應的處理器寄存器從堆棧中 恢復出來。
●OSTickISR函數(shù):時間節(jié)拍函數(shù),由定時中斷產(chǎn)生,主要負責在進入時保存處理器寄存器,完成任務 時切換,退出時恢復寄存器并返回。
?。?)OS_CPU_C.C
OS_CPU_C.C文件中有6個函數(shù)需要移植。
其中,OSTaskStklnit函數(shù)是在任務創(chuàng)建時被調(diào)用的,它負責初始化任務的堆棧結(jié)構(gòu)。其他的5個函數(shù)均 為鉤子函數(shù):OSTaskCreateHook、OSTaskDelHook、OSTaskSwHook、OSTaskStatHook、OSTimeTickHook, 這些函數(shù)主要用來擴展;μC/OS-II的功能。
評論