MSP主堆栈指针

1、MSP主堆栈指针是系统复位后默认使用的堆栈指针,通常用于处理内核和异常(如中断服务函数)的堆栈操作,MSP本身是CPU内部寄存器,记录当前栈顶位置。

Cortex-M内核实际上有2个堆栈指针:

MSP:主堆栈指针

PSP:进程堆栈指针,在简单的裸机系统中,不需要关心PSP。

芯片上电后,CPU会自动从Flash起始地址(0x0000 0000)读取MSP的初始值,然后将这个值加载到MSP寄存器中;这里为什么Flash的起始地址是0X0000 0000 而不是0X8000 0000?其实,这是同一个地址,只不过CPU看到的地址是地址别名或重映射之后的地址,而0X8000 0000是Flash的真实物理地址,GD32芯片内部有一个内存重映射的逻辑模块MMU负责实现。

2、ARM Cortex-M处理器在芯片上电复位时,有一个固定不变的硬件行为:就是从地址0X0000 0000读取MSP的初始值,并且从0X0000 0000读取复位向量的入口地址(PC指针)。

3、所有的异常(NMI不可屏蔽中断、硬件错误、SysTick等)都使用MSP

所有的中断服务函数(ISR)也使用MSP

如果没跑RTOS,main()函数也是用MSP。

如果MSP超出了分配的堆栈空间,访问非法内存区域,会触发MemMange Fault或HardFault。

4、NMI是不可屏蔽中断,优先级很高。

相关推荐
李永奉7 小时前
杰理可视化SDK开发-【BUG】配置“TWS两边同时按消息使能”功能后,按键单击功能无效失灵
开发语言·单片机·嵌入式硬件·物联网·bug
执迷不悟8237 小时前
51单片机--中断/定时/PWM
单片机·嵌入式硬件·51单片机
A小调的码农9 小时前
OPENOCD+MSYS+VSCODE:从“灯不亮“到“终于亮了“
ide·vscode·stm32·单片机·编辑器
Dlrb121110 小时前
单片机通信协议---串口及串口通信
单片机·嵌入式硬件·串口·uart·modbus·波特率·主机从机
嵌入式-老费11 小时前
esp32开发与应用(用好ttl转485模块)
stm32·单片机·嵌入式硬件
謓泽11 小时前
【6.30】芯片 Bring-up 三步核心|从短路检查到 SPI 排障全拆解!
单片机·嵌入式硬件
KaifuZeng12 小时前
模电面试问题汇总四
单片机·嵌入式硬件·面试·模电
csg110712 小时前
PIC单片机PWM信号生成与控制
单片机·嵌入式硬件·物联网·自动化
执迷不悟82313 小时前
51单片机--通信/串口
单片机·嵌入式硬件·51单片机
捷瑞电子工坊13 小时前
电赛入门实战:基于MSPM0G3507(MOG3507)的GPIO点灯实验
单片机·嵌入式硬件·mspm0g3507·电赛入门