基于A(yíng)RM7支持觸摸屏和實(shí)時(shí)操作系統的開(kāi)發(fā)與應用
C/OS-II嵌入式操作系統的移植
C/OS-II作為操作系統的內核,主要的任務(wù)就是完成多任務(wù)之間的調度和同步,協(xié)調各個(gè)硬件源不會(huì )沖突。與其它嵌入式操作系統相比,它具有系統透明、可拆減、接口簡(jiǎn)單的特點(diǎn)。下面就如何在S3C44B0進(jìn)行操作系統移植和修改作簡(jiǎn)要的描述:
(1)重新修改OS_CPU.H文件
a)定義數據類(lèi)型:C/OS-Ⅱ不使用C語(yǔ)言中的short、int、long等與處理器類(lèi)型有關(guān)的數據類(lèi)型,而代之以移植性強的數據類(lèi)型,這樣既直觀(guān)又便于移植;
b)定義堆棧增長(cháng)類(lèi)型和ARM運行的模式:雖然ARM處理器對堆棧向上與向下的兩種增長(cháng)方式都予以支持,但由于編譯器ADS僅支持堆棧從上往下,并且必須是滿(mǎn)遞減堆棧,所以在文件中用來(lái)定義堆棧增長(cháng)方式的常量OS_STK_GROWTH 的值為1;
c)需對外部函數聲明:如在C/OS-II.h頭文件中,有些要移植的函數已經(jīng)聲明,包括:OSTaskStkInit()、OSIntCtxSw(void)、OSStartHighRdy(void) 。
(2)修改OS_CPU_C.C文件
a)任務(wù)堆棧初始化函數OSTaskStkInit():在編寫(xiě)任務(wù)堆棧初始化函數OSTaskStkInit()之前,必須先根據處理器的結構和特點(diǎn)確定任務(wù)的堆棧結構;
b)鉤子函數:C/OS-II為了用戶(hù)在系統函數中書(shū)寫(xiě)自己的代碼而預置了一些鉤子函數(如OSTimeTickHook),這些函數在移植時(shí)可全為空函數,可根據用戶(hù)的需要添加。
(3)重點(diǎn)編寫(xiě)OS_CPU_A.S文件
a)開(kāi)/關(guān)中斷函數:在ARM7處理器核中可利用改變程序狀態(tài)寄存器CPSR中的相應控制位實(shí)現;
b)OSStartHighRdy(void):OSStart()函數調用OSStartHighRdy()來(lái)使就緒態(tài)任務(wù)中優(yōu)先級最高的任務(wù)開(kāi)始執行;
c)OS_TASK_SW(void):μC/OS-II通過(guò)調用OSSched()函數來(lái)完成任務(wù)調度的,OSSched()先將最高優(yōu)先級任務(wù)的地址裝載到OSTCBHighRdy,再通過(guò)調用OS_TASK_SW()執行任務(wù)級的任務(wù)切換,OS_TASK_SW主要完成保護現場(chǎng),完成用于的任務(wù),恢復現場(chǎng);
d)OSIntCtxSw(void):OSIntExit()通過(guò)調用OSIntCtxSw(),在中斷服務(wù)程序中執行任務(wù)切換功能。
e)時(shí)鐘節拍函數:在本移植中,只使用了ARM的IRQ中斷。由于不同的ARM芯片的中斷系統并不完全一樣,因此不可能編寫(xiě)出對所有使用ARM核的處理器通用的中斷及節拍移植代碼,但是這是后續任務(wù)管理中重點(diǎn)需要操作系統進(jìn)行處理的,OSTickISR的實(shí)現代碼見(jiàn)程序清單。
程序清單 OSTickISR()
OSTickISR
STMFD SP!, {R0-R3,R12,LR}
BL OSIntEnter
BL user_function ;調用用戶(hù)
處理的中斷處理程序
BL OSIntExit
LDMFD SP!,{R0-R3,R12,LR}
SUBS PC,LR,#4
評論