使用STM32F407做测试得到,压栈顺序如下:
PSR,PC,LR,R12,R3,R2,R1,R0,FPU下还有17个字的浮点寄存器
在进行保护现场的时候需要手动压栈的寄存器为:
R11,R10,R9,R8,R7,R6,R5,R4,FPU下还有16个字的浮点寄存器
关于LR是0xFFFFFFED的解释:返回线程模式,并使用线程堆栈(SP=PSP)
参考自原子的UCOS开发手册
[27:5]都为1
[4]:堆栈类型,硬件自动压栈大小,0=硬件自动压入26字(使用FPU),1=8字
[3]:0=返回进入Handler模式,1=返回后进入线程模式
[2]:0=从主堆栈中做出栈操作,返回后使用MSP,1=从进程堆栈中做出栈操作,返回后使用PSP
[1]:保留
[0]:0=返回ARM状态,1=返回Thumb状态。在CM3/CM4中必须为1