|
__asm void PendSV_Handler(void)
{
MRS R0, PSP
TST LR, #0x10
IT EQ
VSTMDBEQ R0!, {S16-S31}
MOV R2, LR
MRS R3, CONTROL
STMDB R0!,{R2-R11}
LDR R1,=__cpp(&curr_task)
LDR R2,[R1]
LDR R3,=__cpp(&SP_array)
STR R0,[R3, R2, LSL #2]
LDR R4,=__cpp(&next_task)
LDR R4,[R4]
STR R4,[R1]
LDR R0,[R3, R4, LSL #2]
LDMIA R0!,{R2-R11}
MOV LR, R2
MSR CONTROL, R3
TST LR, #0x10
IT EQ
VLDMIAEQ R0!, {S16-S31}
MSR PSP, R0
BX LR
ALIGN 4
}
这是任务切换时的入栈和出栈代码,有一个地方不是很明白:就是加载下一个任务堆栈中的数据到相应寄存器中MOV LR , R2和MSR CONTROL ,R3这两句应该是加载LR和CONTROL,那么到BX LR退出PendSV_Handler的时候又自动弹出了xPSR,PC,LR,这样岂不是两次赋值LR了?有点不明白 |
|