堆栈问题

MSR     PSP, R0; 
BX LR

产生异常时,两个值我们需要,一个是pc,一个是LR,通过LR找到栈,再通过栈找到pc

1、 
如果LR=0xFFFFFFF9说明产生异常的时候使用的是MSP,我们只需要读出当前sp的值,

sp  += 0x1c; 读出的内容就是产生异常时压入栈的PC的值,这个值跟反汇编代码对比,就能得到具体哪句话产生的异常。

2、 
如果LR=0xFFFFFFFD明产生异常的时候使用的是PSP,我们需要读出PSP的值,不要直接来读sp的值,在keil集成开发环境中,调试时寄存器窗口有个Banked选项,会给出当前PSP的值,当然也可以在异常处理中加入两句话:

MRS R0,PSP

我们就能在当前MSP中得到,我们PSP的值了,之后操作和上面一样,psp+=0x1c;
读出的内容就是产生异常时压入栈的PC的值,这个值跟反汇编代码对比,就能得到具体哪句话产生的异常。

你可能感兴趣的:(开发工具使用)