这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32为什么有两个SP指针?MSP和PSP

共1条 1/1 1 跳转至

STM32为什么有两个SP指针?MSP和PSP

院士
2024-07-17 16:32:12     打赏

SP在嵌入式系统里面通常指堆栈指针,指向最后一个被压入元素的地址。在Cortex-M3内核架构下,MCU使用了双堆栈,即MSP和PSP。

  • MSP:Main_Stack_Pointer,即主栈

  • PSP:Process_Stack_Pointer,即任务栈

MSP还是PSP?

Cortex-M3的双堆栈设计下,虽然是两个堆栈,但同一时间只能使用其中一个SP。内核使用MSP还是PSP,则要看当前的运行模式。

MSP主堆栈指针在复位后默认使用,在handler模式下,也只允许使用MSP。而在普通模式,可以使用PSP。

为什么是两个SP?

我觉得Cortex-M3内核设计两个SP的主要目的和新增一个systick定时器的目的是一致的,即主要为了配置RTOS的设计使用,以充分保证RTOS的安全性和鲁棒性。

在RTOS的运行中,操作系统kernel和异常事件使用MSP,而用户任务则使用PSP。MSP和PSP之间的切换会在内核处理异常事件时自动完成。这样,当用户任务实现过程中堆栈溢出不会影响到MSP的堆栈,从而保证了kernel的稳定。Kernel的堆栈不会被破坏,这也给kernel处理异常事件提供了环境保证。

当然,前后台(裸机)设计模式下,内核也仅使用MSP指针。其实RTOS在上电复位到切换线程之前用的也都是MSP指针,也就是线程切换之前都是一个前后台程序的状态。





关键词: STM32     MSP     PSP     双堆栈    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]