主堆栈指针(MSP)与进程堆栈指针(PSP)

电器工程 stm32 堆栈指针
2022-01-19 06:54:31

我正在阅读 STM32 编程手册,在“第 18 页”的某处我看到了这两种堆栈指针。我一直认为只有一个堆栈,因此在 MCU 中只有一个堆栈指针存在,现在我对这些指针是什么以及主题之间有什么区别以及它们中的每一个用于什么感到困惑?

1个回答

你在某种程度上是正确的,在皮质 m (你的 stm32 是,虽然我不能说是哪个变体,除非你指定一个部分)有一个活动堆栈指针r13,但这可以是MSPor PSP

原因之二是为了使用户能够轻松实现多任务“操作系统”。

这个想法是PSP单个任务使用或进程堆栈指针,内核使用MSP.

当异常发生时,堆栈帧被推送到当前活动的堆栈指针,然后切换到使用MSP异常处理程序。在多任务系统中,如果调度程序导致异常,此时您将PSP指向的位置更改为下一个任务的堆栈指针,并从异常中返回。新堆栈指针的解堆栈然后将执行返回到下一个任务。

如果您希望查看同时使用两者的代码示例,我为 Cortex M4f 编写的调度程序可在BitBucket上找到,它没有记录,但它相当简单。一条svc指令用于启动调度器,然后pendsv异常处理任务切换,该Tick函数应从定时器中调用以保证任务切换。