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由各个任务提供。

相关推荐

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

    2024-01-17 07:14:02       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-17 07:14:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-17 07:14:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-17 07:14:02       82 阅读
  4. Python语言-面向对象

    2024-01-17 07:14:02       91 阅读

热门阅读

  1. Python-pytest使用unittest

    2024-01-17 07:14:02       51 阅读
  2. C51--测速小车

    2024-01-17 07:14:02       49 阅读
  3. 正则表达式

    2024-01-17 07:14:02       31 阅读
  4. Vue待办事项(选项卡)

    2024-01-17 07:14:02       54 阅读
  5. 自动驾驶车辆运动规划方法综述 - 论文阅读

    2024-01-17 07:14:02       61 阅读
  6. redis实现延迟任务(四)

    2024-01-17 07:14:02       59 阅读
  7. vue使用el-input监听不了回车事件解决方法

    2024-01-17 07:14:02       54 阅读
  8. vue3和vue2区别

    2024-01-17 07:14:02       44 阅读
  9. 探索 ChatGPT 中文版:开启自然语言处理新纪元

    2024-01-17 07:14:02       62 阅读
  10. leetcode2719. 统计整数数目

    2024-01-17 07:14:02       49 阅读
  11. 编程探秘:Python深渊之旅-----云端部署(六)

    2024-01-17 07:14:02       56 阅读