栈顶指针
MSR cpsr_cxsf, r4 ;从堆栈中恢复中断前任务的cpsr,注意此时irq才被重新允许
LDMFD sp!, {r0-r12,lr,pc} ;恢复中断前任务的 r0-r12,lr和pc,返回被中断的任务
;******OSTickISR函数代码完成,下面是临界段代码前后开关中断的函数******
EXPORT ARMDisableInt ARMDisableInt
MRS r0, cpsr ;由于任务和内核都运行在svc模式下,因此可方便地操作cpsr STMFD sp!, {r0} ; 保存当前的cpsr ORR r0, r0, #0xc0 ;屏蔽FIQ,IRQ中断 MSR cpsr_c, r0 ;回写cpsr,只屏蔽IRQ中断 MOV pc, lr ;返回 EXPORT ARMEnableInt
ARMEnableInt ;必须和ARMDisableInt成对使用
LDMFD sp!, {r0} ;弹出在ARMDisableInt中被保存的cpsr MSR cpsr_c, r0 ;恢复关中断前的cpsr MOV pc, lr ;返回 END ;汇编代码结束
;*****OS_CPU_A.S文件结束****** 4 小结
这里较详细地叙述了轻量级的实时内核μC/OS-II在ARM7处理器(S344B0X)的移植过程,并给出了简练而实用的代码,移植代码和移植思想对于μC/OS-II在其他ARM处理器上的移植具有较强的借鉴意义。