|
发表于 2014-4-10 13:12:10
|
显示全部楼层
高手没明白我的意思啊。我问的是在线程模式并且用PSP指针时切换到handler模式,在这个过程R0--R3,R12,PC,PSR,LR这些寄存器都被压进哪个堆栈了?是PSP还是MSP。然后我们进行正常的异常返回(BL LR) ,这是出栈是从哪个堆栈出栈。
如果我们在异常返回时修改了EXC_RETURN,使返回后使用MSP,那么这时出栈操作从哪个堆栈进行。需不需要在异常里进行堆栈调整?
我的理解(对M3而言)
"在线程模式并且用PSP指针时切换到handler模式,在这个过程R0--R3,R12,PC,PSR,LR这些寄存器都被压进哪个堆栈了?是PSP还是MSP"
1,这个过程是压入线程自己的堆栈(即PSP中),这样可以实现任务断点的保存;
如果我们在异常返回时修改了EXC_RETURN,使返回后使用MSP,那么这时出栈操作从哪个堆栈进行。需不需要在异常里进行堆栈调整?
2,handler处理中,需要将PSP堆栈指向新的任务,返回时也是PSP中出栈,这样出栈过程就实现任务跳转!
3,我刚刚软件仿真了一下,进入handler后,MSP指针的值没有改变,应该可以说明,从线程模式进入handler模式时压入的是PSP!
|
|