μC/OS-II系統在A(yíng)VM處理器上的移植
LDR r6,addr_OSTCBHighRdy
LDR r6,[r6]
LDR sp,[r6] ;得到新任務(wù)的堆棧指針
;OSTCBCur=OSTCBHighRdy
STR r6,[r4]
;得到當前新任務(wù)的TCB地址
LDMFD sp!,{r4}
MSR SPSR_cxsf,r4
LDMFD sp!,{r4}
MSR SPSR_cxsf,r4
LDMFD sp!,{r0-r12,lr pc}
OSIntCtxSw() ;中斷級的任務(wù)切換函數
LDMIA sp!,{al-vl,lr}
SUBS pc,lr,#4
SUB lr,lr,#4
MOV r12,lr
MRS lr,SPSR
AND lr,lr,#0XFFFFFE0
ORR lr,lr,#0XD3
MSR CPSR_CXSF,lr
OSTickISR() ;中斷服務(wù)函數
STMDB sp!,{r0-r11,lr}
MRS r0,CPSR
ORR r0,r0,#0x80; ;設置中斷禁止標志
MSR CPSR_cxsf,r0 ;中斷結束
LDR r0,I_ISPC
LDR r1,=BIT_TIMER0
STR r1,{r0}
BL IrqStart
BL osTimeTick
BL IrqFinish
LDR r0,=need_to_swap_context
LDR R2,[R0]
CMP r2,#1
LDREQ pc,=_CON_SW
完成上述工作后,μC/OS-II就可以運行在A(yíng)RM處理器上了。
3 使用μC/OS-II系統應注意的問(wèn)題
①μC/OS-II和Linux等分時(shí)操作系統不同,不支持時(shí)間片輪轉法。它是一個(gè)基于優(yōu)先級的實(shí)時(shí)操作系統。每一個(gè)任務(wù)的優(yōu)先級必須不同(分析它的源碼會(huì )發(fā)現,μC/OS-II把任務(wù)的優(yōu)先級當作任務(wù)在標識來(lái)使用,如果優(yōu)先級相同,任務(wù)將無(wú)法區分)。進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)首先得到CPU的使用權,只有等它交出CPU的使用權后,其它任務(wù)才可以被執行。所以,它只能就是多任務(wù),不能就是多進(jìn)程,至少不是我們所熟悉的那種多進(jìn)程。
②μC/OS-II對共享資源提供了保護的機制。μC/OS-II是一個(gè)支持多任務(wù)的操作系統。我們可以把一個(gè)完整的程序劃分成幾個(gè)任務(wù),不同的任務(wù)執行不同的功能。對于共享資源(比如串口),μC/OS-II也提供了很好的解決辦法,一般情況下使用的是信號量方法。我們創(chuàng )建一個(gè)信號量并對它進(jìn)行初始化,當一個(gè)任務(wù)需要使用一個(gè)共享資源時(shí),它必須先申請得到這個(gè)信號量。在這個(gè)過(guò)程中即使有優(yōu)先權更高的任務(wù)進(jìn)入了就緒態(tài),因為無(wú)法得到信號量,也不能使用該資源。在μC/OS-II中稱(chēng)為優(yōu)先級反轉。簡(jiǎn)單地說(shuō),就是高優(yōu)先級任務(wù)必須等待低優(yōu)先級任務(wù)的完成。在上述情況下,在兩個(gè)任務(wù)之間發(fā)生優(yōu)先級后轉是無(wú)法避免的。所以不在使用μC/OS-II時(shí),必須對所開(kāi)發(fā)的系統了解清楚才能選擇對于某種共享資源是否使用信號量。
③μC/OS-II內存管理不夠完善。在分析許多μC/OS-II的應用實(shí)例中發(fā)現,任務(wù)??臻g和內存分區的創(chuàng )建采用了定義全局數組的方法,這樣實(shí)現起來(lái)固然簡(jiǎn)單,但不夠靈活有效。
編譯器會(huì )將全局數組作為未初始化的全局變量,放到應用程序映像的數據段。數組的大小是固定的,生成映像后不可能在使用中動(dòng)態(tài)地改變。對于任務(wù)??臻g來(lái)說(shuō),數組定義大了會(huì )造成內存浪費;定義小了任務(wù)棧溢出,會(huì )造成系統崩潰。對于內存分區,在不知道系統初始化后給用戶(hù)留下了多少自由內存空間的情況下,很難定義內存分區所使用數組的大小。此外,現在μC/OS-II只支持固定大小的內存分區,容易造成內存浪費。μC/OS-II將來(lái)應該被改進(jìn)以支持可變大小的內存分區。因此,系統初始化后能清楚地掌握自由內存空間的情況是很重要的。所以,應避免使用全局數組分配內存空間,關(guān)鍵是要知道整個(gè)應用程序在編譯、鏈接后代碼段和數據段的大小,在目標板內存中是如何定位,以及目標板內存的大小。
總之,隨著(zhù)各種智能嵌入式系統的復雜化和系統實(shí)時(shí)性需求的提高,伴隨應用軟件朝著(zhù)系統化發(fā)展的加速,功能強大的實(shí)時(shí)操作系統μC/OS-II將會(huì )有更大的發(fā)展。
評論