【双堆栈指针(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用于应用任务。
【双堆栈指针的初始化】
- 系统复位时从0x00000000处读出MSP的初始值。
- 在OS初始化时,对PSP进行初始化。
【PSP指针在不同任务间切换】
- 用任务A的SP执行入栈操作,并保存任务A的SP。
- 设置PSP指向任务B的栈空间,用任务B的SP执行出栈,随后开始执行任务B。
参考摘录:
《Cortex-M内核系列和STM32-讲座2教程.pdf》
《ARM Cortex-M3权威指南.pdf》
今天的文章Cortex-M3 双堆栈指针(MSP&PSP)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/11607.html