STM32八股【6】-----CortexM3的双堆栈(MSP、PSP)设计

STM32的线程模式(Thread Mode)和内核模式(Handler Mode)以及其对应的权级和堆栈指针

线程模式:

正常代码执行时的模式(如 main 函数、FreeRTOS任务)

可以是特权级(使用MSP)也可以是非特权级(使用PSP)

异常模式:

正在执行中断服务程序

永远是特权级,使用MSP

模式 栈指针 特权级 应用场景
线程模式 MSP 特权级 系统启动初期
线程模式 PSP 非特权级 RTOS用户任务
内核模式 MSP 特权级 中断服务程序、系统调用处理

在RAM上的分布情况

text 复制代码
地址 ↓ 增大 (低 → 高)                       物理地址范围
┌──────────────────────────────┐
│         RAM 结束              │ 0x2002_0000
├──────────────────────────────┤
│          MSP 栈区             │← 异常模式、中断使用
│      (Main Stack Pointer)     │
│      ↓ 向下增长               │
├──────────────────────────────┤
│         PSP - 任务A 栈        │← 任务A执行时使用
│      (Process Stack Pointer)  │
│      ↓ 向下增长               │
├──────────────────────────────┤
│         PSP - 任务B 栈        │← 任务B执行时使用
│      ↓ 向下增长               │
├──────────────────────────────┤
│         PSP - 任务C 栈        │← 任务C执行时使用
│      ↓ 向下增长               │
├──────────────────────────────┤
│          全局变量区           │
│        BSS / DATA段等         │
├──────────────────────────────┤
│          堆(heap)区         │↑ 向上增长
├──────────────────────────────┤
│         RAM 起始地址          │ 0x2000_0000
└──────────────────────────────┘

RTOS任务如何从MSP切换到PSP?SVC_Handler 起到什么作用?

待写

相关推荐
mftang1 小时前
STM32Cube IDE 详细介绍
ide·stm32·嵌入式硬件
克莱斯勒ya1 小时前
嵌入式编码器(Embedded Coder)
嵌入式硬件
码农三叔1 小时前
(9-2-02)电源管理与能源系统:能耗分析与功率管理(2)高峰功耗控制+ 电源分配架构
嵌入式硬件·机器人·人机交互·能源·人形机器人
恒锐丰小吕1 小时前
屹晶微 EG27519 高速低侧单通道驱动芯片(带EN使能)技术解析
嵌入式硬件·硬件工程
上海合宙LuatOS1 小时前
LuatOS ——fota 升级教程
开发语言·人工智能·单片机·嵌入式硬件·物联网·php·硬件工程
Real.w2 小时前
极客星闪 | 筑基:轻量级方案之 VS Code + HiSpark 插件开发环境搭建
stm32·单片机·嵌入式硬件
上海合宙LuatOS2 小时前
LuatOS 框架的设计原理
java·开发语言·单片机·嵌入式硬件·物联网·硬件工程
LS_learner2 小时前
ROS2(Robot Operating System 2)接口详解
嵌入式硬件
电化学仪器白超2 小时前
PPTSYNC软件配置①
python·单片机·嵌入式硬件·自动化
dump linux16 小时前
内核驱动调试接口与使用方法入门
linux·驱动开发·嵌入式硬件