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