我一直在阅读 ARM 信息中心的各个部分以尝试找到我的答案,但是我发现文档让我感到困惑,所以我希望这里有人可以提供帮助。
我了解 Cortex-M 处理器中有两个堆栈:
- MSP(主堆栈指针)
- PSP(进程堆栈指针)
我试图弄清楚ARM内核如何使用每一个。
在讨论 Cortex-M3 时,ARM 信息中心中的文档说明如下:
主堆栈在复位时使用,并且始终在处理程序模式下使用(进入异常处理程序时)。进程堆栈指针仅在线程模式下作为当前堆栈指针可用。
好的,这告诉我在重置时使用了 MSP。但是,该文档还指出以下内容:
线程模式
用于执行应用软件。处理器退出复位后进入线程模式。
处理程序模式
用于处理异常。处理器在完成所有异常处理后返回线程模式。
好的,这就是让我感到困惑的地方。如果MSP在reset时使用,并且一直在Handler模式下使用,而PSP在Thread模式下使用,那么如果处理器在reset时处于Thread模式,如何在reset时使用MSP呢?