STM32(Cortex-M) 双堆栈MSP/PSP科普

https://blog.csdn.net/Guet_Kite/article/details/76020069
https://blog.csdn.net/zhuimeng_ruili/article/details/118163303

MSP/PSP是什么?作用?

MSP主堆栈指针,PSP进程堆栈指针。

MSP:复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)
PSP:由用户的应用程序代码使用。
两个堆栈指针,同一时刻只能用一个。

作用:提升程序健壮性。一定程度上保证应用的数据(栈)空间不会溢出到操作系统数据(栈)空间;

运行时行为?

无操作系统:
程序复位后运行使用的一直是MSP,异常或中断、程序运行均使用MSP。
有操作系统:
程序复位运行时,使用的一直是MSP,在任务开始运行时,osKernelStart->....->vPortStartFirstTask(portasm.s/freertos),将任务栈push到PSP,并切换到PSP。
在发生异常或中断时,CPU自动进入Hanlder模式,CPU会自动设置CONTROL对应bit[1]为0,强制使用MSP。
OS或程序将CONTROL bit[1]设置为1,则进入线程模式,使用PSP。

栈空间来源?

IAR中在Options-->Linker-->Config-->Edit中更改栈空间大小,也可以直接在icf文件中更改。

编译生成的bin文件的首4个字节为栈指针SP/MSP,带操作系统的话PSP由各个任务提供。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值