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

[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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值