ARM Corte-M4函数调整自动压栈顺序

使用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开发手册

[31:28]:返回标识,为0xF

[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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容