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

待写

相关推荐
飞睿科技41 分钟前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天2 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
17(无规则自律)2 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
芯岭技术2 小时前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件
wotaifuzao3 小时前
STM32 + FreeRTOS 的订阅通知组件架构
stm32·嵌入式硬件·架构·freertos·事件驱动·嵌入式架构
小龙报4 小时前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
Lester_110111 小时前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件
小李独爱秋12 小时前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障
梁洪飞15 小时前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
进击的小头15 小时前
实战案例:51单片机低功耗场景下的简易滤波实现
c语言·单片机·算法·51单片机