Cortex-M3 双堆栈指针(MSP&PSP)

[复制链接]
7053|0
手机看帖
扫描二维码
随时随地手机跟帖
keer_zu|  楼主 | 2021-7-13 11:09 | 显示全部楼层 |阅读模式
Cortex-M3 双堆栈指针(MSP&PSP)
【双堆栈指针(MSP&PSP)】
  • Cortex-M3内核中有两个堆栈指针(MSP & PSP),但任何时刻只能使用到其中一个。
  • 复位后处于线程模式特权级,默认使用MSP。
  • 通过SP访问到的是正在使用的那个指针,可以通过MSR/MRS指令访问指定的堆栈指针。
  • 通过设置CONTROL寄存器的bit[1]选择使用哪个堆栈指针。CONTROL[1]=0选择主堆栈指针;CONTROL[1]=1选择进程堆栈指针。
  • Handler模式下,只允许使用主堆栈指针MSP。
【双堆栈指针在OS中的应用】
典型的OS环境中,MSP和PSP的用法如下:
  • MSP用于OS内核和异常处理。
  • PSP用于应用任务。


1525660ed03d74bae2.png



【双堆栈指针的初始化】
  • 系统复位时从0x00000000处读出MSP的初始值。
  • 在OS初始化时,对PSP进行初始化。
5406060ed03e783276.png
【PSP指针在不同任务间切换】
  • 用任务A的SP执行入栈操作,并保存任务A的SP。
  • 设置PSP指向任务B的栈空间,用任务B的SP执行出栈,随后开始执行任务B。
7232460ed03f12a100.png

参考摘录:
《Cortex-M内核系列和STM32-讲座2教程.pdf》
《ARM Cortex-M3权威指南.pdf》


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1304

主题

12236

帖子

53

粉丝