|
有没有高手帮我解释下UCOSII移植到ARM7TDMI中OSINTCTXSW()中的代码?
[复制链接]
AREA OSINTCTXSW,CODE,READONLY
EXPORT OSIntCtxSw()
add r7, sp, #16
mrs r1,SPSR
orr r1, r1, #0xc0 //关闭IRQ, FIQ
msr CPSR_cxsf, r1
CPSR中的control field ( PSR[7:0])
ldr r0,[r7, #52] //从IRQ 堆栈中得到IRQ'S LR 指针
sub r0,r0,#4 //当前PC地址是(saved_LR - 4}
STMFD sp!, {r0} //保存任务PC
STMFD sp!, {lr} //保存LR
mov lr, r7 //得到lr的值
LDMFD lr!,{r0-r12} //从FIQ堆栈中得到保存的寄存器
STMFD sp!,{r0-r12} //在任务堆栈中保存寄存器
add r7, sp, #16 这几汇编中,为什么sp要加上16?堆栈初始化时,sp是指向哪里的? ARM中堆栈是如何工作的?
|
|