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 起到什么作用?

待写

相关推荐
PegasusYu1 小时前
STM32配置读取激光测距传感器VL6180X距离数据
stm32·vl6180·接近传感器·stm32g030·激光测距·飞行时间·vl6180x
mc23562 小时前
STM32F103C8T6--深入GPIO
stm32·单片机·嵌入式硬件
兆龙电子单片机设计3 小时前
【STM32项目开源】STM32单片机智能家居控制系统
stm32·单片机·物联网·开源·毕业设计·智能家居
A9better3 小时前
嵌入式开发学习日志41——stm32之SPI总线基本结构
stm32·单片机·嵌入式硬件·学习
xyx-3v3 小时前
STM32 AFIO时钟什么情况需要开启?
stm32·单片机·嵌入式硬件
充哥单片机设计3 小时前
【STM32项目开源】基于STM32的智能家居环境监测系统
stm32·嵌入式硬件·智能家居
点灯小铭4 小时前
基于单片机的四沟道步进电机玉米补种机设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
清风6666664 小时前
基于单片机的双机串口通信与数字串存储系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
三佛科技-134163842125 小时前
智能窗帘方案开发,基于国产单片机电动窗帘方案设计
单片机·嵌入式硬件·智能家居·pcb工艺
qiuiuiu4137 小时前
正点原子RK3568学习日志12-注册字符设备
linux·开发语言·单片机·学习·ubuntu