ARMV7-M 的两个栈顶寄存器

参考:

ARMV7的通用寄存器(核心寄存器、Core Register)

照例先上原文:

80a1d9f923744117a06fc9d84b738bb4.png

11a4048c4c64419e8fcd12515e59125f.png

不是人话的翻译:

ARMV7-M有两个栈顶寄存器:

MSP(SP_main):主要的栈寄存器

PSP(SP_process):进程寄存器

栈顶指针(SP),分为主要栈寄存器和进程栈寄存器。当前的栈依赖运行模式,在线程模式下由CONTROL.SPSEL 来决定,复位完成后默认使用 PSP。


以下为是人话 的翻译:

 ARMV7-M 的 R13(SP)寄存器,在物理上有两个:

MSP(SP_main):主要的栈寄存器

PSP(SP_process):进程寄存器

当我们访问R13时,实际访问的 MSP 还是 PSP 由当前运行模式和 CONTROL.SPSEL 共同决定。

在“管理者模式”下,R13 对应的物理寄存器是 MSP;

在“线程模式”下,R13对应的物理寄存器,由 CONTROL.SPSEL 决定,当 CONTROL.SPSEL == 0 时,使用MSP;当CONTROL.SPSEL == 1 时,使用 PSP。

由于ARMV7-M复位后运行在“线程模式”下,且 CONTROL.SPSEL == 0,因此,ARMV7-M复位后R13对应的物理寄存器是 MSP。

又因为我们知道,进入除了“复位例外”的其他例外后,内核处于管理者模式(ARMV7-M 的工作模式和特权等级),因而此时,R13对应的物理寄存器是MSP。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十三香炖猪肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值