概述
MSP(主堆栈指针)与PSP(进程堆栈指针),是ARM Cortex-M系列处理器里,用来管理堆栈的两个相互独立的指针寄存器。
用途与使用场景
MSP(主堆栈指针)
专用于异常处理模式(Handler Mode)及特权级线程模式。当处理器响应中断、异常或执行系统调用等内核代码时,硬件自动切换至MSP作为当前堆栈指针。系统复位后,MSP为默认激活的堆栈指针,确保内核初始化与异常响应的可靠性。
PSP(进程堆栈指针)
专用于用户级线程模式。在实时操作系统(RTOS)环境中,通过配置CONTROL寄存器的SPSEL位,可将堆栈指针切换至PSP,从而为每个用户任务分配独立的堆栈空间。该机制实现了用户任务堆栈与内核堆栈的物理隔离,显著提升系统健壮性、安全性与多任务调度的可预测性。
控制机制
在 ARM Cortex-M 架构中,CONTROL 寄存器用于管理当前线程模式下的堆栈指针选择,其行为在不同处理器模式下有明确区分:
-
Thread 模式:
通过
CONTROL.SPSEL 位(在安全扩展环境下对应 CONTROL_S 或 CONTROL_NS)动态选择堆栈:-
0:使用 MSP(Main Stack Pointer,主堆栈指针)--- 默认配置 -
1:使用 PSP(Process Stack Pointer,进程堆栈指针)--- 用于用户任务或线程上下文
-
-
Handler 模式:
所有异常(Exception)与中断(Interrupt)处理均强制切换至 MSP,无论
SPSEL位状态如何。此设计确保内核级代码(如中断服务例程)运行在受控、隔离的堆栈环境中,避免用户态堆栈污染或溢出对系统稳定性造成影响。
该机制是 Cortex-M 系列处理器实现特权级与用户级堆栈分离的核心机制,保障了实时系统的可靠性和安全性。
安全扩展下的差异(Armv8-M架构)
在启用 ARM Cortex-M33/M52 等支持 TrustZone 安全扩展的处理器时,堆栈指针被明确划分为安全(Secure)与非安全(Non-secure)两个独立域,以实现硬件级的权限隔离:
-
MSP_S(Main Stack Pointer - Secure)与 PSP_S(Process Stack Pointer - Secure):专用于安全状态,处理敏感操作,如加密引擎、密钥管理、安全启动等;
-
MSP_NS(Main Stack Pointer - Non-secure)与 PSP_NS(Process Stack Pointer - Non-secure):专用于非安全状态,运行普通应用程序与非特权代码。
当发生安全状态与非安全状态之间的切换(如通过 SMC 指令或异常进入安全监控模式)时,处理器硬件会自动、透明地切换至对应的堆栈指针,确保上下文隔离,防止非安全代码访问或污染安全堆栈数据,从而保障系统整体的安全性与完整性。
堆栈边界保护
堆栈限制寄存器(MSPLIM / PSPLIM)是 ARMv8-M 架构中用于增强系统安全性的关键硬件机制,专为 Cortex-M23、M33 等处理器设计,旨在防止堆栈溢出导致的内存破坏与安全漏洞。
该机制为两种堆栈指针分别提供边界检查:
-
MSPLIM(Main Stack Pointer Limit):限制主堆栈指针(MSP)的最低有效地址,用于 Handler 模式及非特权线程模式下的主堆栈。
-
PSPLIM(Process Stack Pointer Limit):限制进程堆栈指针(PSP)的最低有效地址,专用于线程模式下由软件显式选择的进程堆栈。
在启用 ARM TrustZone 安全扩展 的系统中,上述寄存器均存在安全(Secure)与非安全(Non-secure)两个隔离版本:
|-----------|------|-----------------|-----------------|
| 寄存器名称 | 作用域 | 适用堆栈 | 处理器支持 |
| MSPLIM_S | 安全态 | 安全主堆栈(MSP_S) | Cortex-M23, M33 |
| PSPLIM_S | 安全态 | 安全进程堆栈(PSP_S) | Cortex-M23, M33 |
| MSPLIM_NS | 非安全态 | 非安全主堆栈(MSP_NS) | Cortex-M33 |
| PSPLIM_NS | 非安全态 | 非安全进程堆栈(PSP_NS) | Cortex-M33 |
这些寄存器为 32 位,其最低三位(bit2:0)固定为 0,强制堆栈限制地址对齐至 双字(8 字节)边界,确保内存访问的原子性与安全性。默认复位值为 0,即禁用边界检查;必须由特权软件在初始化阶段显式配置,方可启用保护。
当堆栈指针(SP)因异常调用、递归过深或缓冲区溢出而低于对应限制寄存器的值时,硬件将自动触发 UsageFault 异常,并进入异常处理流程,从而阻止非法内存访问,为实时操作系统(RTOS)与安全关键应用提供底层防护。
亿道电子技术有限公司是国内资深的研发工具软件提供商,成立于2002年,同时在上海、北京、深圳、江苏、珠海、成都、台北均设有办公室。公司面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。
20多年来,亿道电子已经与全球多家知名企业,包括ARM、Altium、Ansys、Qt、Green Hills、Perforce、Minitab、Eplan、TESSY、OpenText、Visu-IT、Ashling、FESCARO、Adobe、Incredibuild、JFrog、PLS等建立了稳固的战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家本土客户,为客户提供芯片级开发工具、EDA设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式GUI工具等软件工具。亿道电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。