Cortex-M处理器:堆栈、内存保护与异常中断机制解析
1. 堆栈指针与堆栈限制寄存器
在Cortex - M处理器中,堆栈的管理至关重要。通常会使用PSP(进程堆栈指针),因为在异常发生前它是当前选定的堆栈指针。堆栈分离可以防止应用任务中的堆栈损坏或错误影响操作系统使用的堆栈,同时简化了操作系统的设计,实现更快的上下文切换。
对于实现了TrustZone安全扩展的系统,安全和非安全软件会管理CONTROL寄存器中的相应SPSEL位。在线程模式下,当安全状态之间进行函数调用时,处理器可以在不同的SPSEL设置之间切换。在处理模式下,会根据异常/中断的安全域使用MSP_S或MSP_NS。
1.1 堆栈指针和堆栈限制寄存器的设置与访问
处理器上电后:
- 若未实现TrustZone,处理器会通过读取向量表自动初始化MSP(主堆栈指针)。
- 若实现了TrustZone,处理器会通过读取安全向量表自动初始化MSP_S。
其他未通过复位序列初始化的堆栈指针需要由软件进行初始化。例如,安全软件在完成安全初始化后启动非安全应用时,必须先初始化非安全MSP(MSP_NS)。
虽然一次只能选择一个堆栈指针(使用SP或R13访问),但在处理器处于特权状态时,可以直接对MSP和PSP进行读写操作。如果处理器处于安全特权状态,软件还可以访问非安全堆栈指针。CMSIS - CORE软件框架提供了一系列用于堆栈指针访问的函数,如下表所示:
| CMSIS - CORE函数 | 用途 | 适用安全状态 |
| ---- | ---- | ---- |
| __get_MSP(void) | 获
超级会员免费看
订阅专栏 解锁全文
36

被折叠的 条评论
为什么被折叠?



