μCOS-II移植到ARM處理器上的幾個(gè)要點(diǎn)
LDR r5, [r4]
STR sp, [r5] ; 保存棧指針在占先任務(wù)的TCB 上
; 取得高優(yōu)先級(jí)任務(wù)的TCB 地址
LDR r6, addr_OSTCBHighRdy
LDR r6, [r6]
LDR sp, [r6] ;得到新任務(wù)的堆棧指針
; OSTCBCur = OSTCBHighRdy
STR r6, [r4] ; 設(shè)置當(dāng)前新任務(wù)的TCB 地址set new current task TCB
address
LDMFD sp!, {r4}
MSR SPSR_cxsf, r4
LDMFD sp!, {r4}
MSR CPSR_cxsf, r4
LDMFD sp!, {r0-r12, lr, pc}
(3)OSIntCtxSw();中斷級(jí)的任務(wù)切換函數(shù)
LDMIA sp!,{a1-v1, lr}
SUBS pc, lr, #4
SUB lr, lr, #4
MOV r12, lr
MRS lr, SPSR
AND lr, lr, #0xFFFFFFE0
ORR lr, lr, #0xD3
MSR CPSR_cxsf, lr
(4)OSTickISR();中斷服務(wù)函數(shù)
STMDB sp!,{r0-r11,lr}
;interrupt disable(not nessary)
mrs r0, CPSR
orr r0, r0, #0x80 ; 設(shè)置中斷禁止標(biāo)
msr CPSR_cxsf, r0 ;中斷結(jié)束
; rI_ISPC= BIT_TIMER0;
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
完成了上述工作以后,μCOS-II 就可以正常運(yùn)行在ARM 處理器上了。
評(píng)論