在cortex-M3有异常发生时,系统自动保存xPSP, PC, LR, R12,{R3-R0}到当前task所使用的堆栈,之后系统切换到特权级的handle模式,并使用MSP,此时LR = 0xFFFFFFFD,从进程堆栈中做出栈操作,返回后使用PSP。此处只考虑无中断嵌套情况,由于入栈时顺序为:
PSP -----> R0 LOW
R1 |
R2 |
R3 |
R12 |
LR |
PC |
xPSP HIGH
从当前PSP中找到PC指针,该PC指向异常返回后代码继续执行的位置,而LR指向PC所在的函数的返回位置,如下图所示:
main{
function1
{
...
...
PC-------exception occur, and save the xPSP, PC, LR, R12,{R3-R0}
}
LR----->function2
{
}
}
(正常函数调用时PC指针不用压栈,返回后将LR的内容赋值给PC,即可正确返回。)
阅读(1515) | 评论(0) | 转发(0) |