主堆栈指针MSP和堆栈指针SP的区别和联系
在ARM Cortex-M处理器中SPStack Pointer堆栈指针是一个统称而MSPMain Stack Pointer主堆栈指针是SP的两种具体实现之一。 核心区别SP的两种身份SP (堆栈指针)RTOS中使用这是寄存器R13的别名**。它像一个“通道”在任一时刻只能指向并操作一个具体的物理堆栈指针寄存器。MSP (主堆栈指针裸机使用) 与 PSP (进程堆栈指针)这是SP这个“通道”背后两个物理上独立的寄存器。SP当前具体操作哪一个取决于处理器的工作模式。 联系它们如何协同工作两者的联系体现在SP作为一个“通道”根据处理器模式动态切换指向MSP或PSP复位与异常处理Handler模式系统复位后或处理任何中断/异常时强制使用MSP。这是最高优先级、最可靠的操作环境。普通程序运行Thread模式在此模式下可以通过CONTROL寄存器的SPSEL位来选择使用哪个指针。选择MSPCONTROL[1]0。这是复位后的默认状态常用于简单的裸机程序。选择PSPCONTROL[1]1。通常在有RTOS实时操作系统时使用。 位置两个栈在内存中的哪里MSP和PSP的位置不由硬件固定而是由软件链接脚本定义它们都位于系统的RAM随机存取存储器中。MSP的位置其初始值在系统复位时由向量表Vector Table的第一个字4字节自动加载。这个值在链接时确定通常指向RAM的末尾区域。PSP的位置没有硬件自动初始化其初始值必须由用户软件如RTOS内核相当于裸机开发中的.bss段在初始化时设置。在RTOS中每个任务通常都有自己的PSP。 为什么要设计两个堆栈指针这是为了系统的安全与稳定。其核心目的是将高特权级的系统内核和异常处理使用MSP与普通的用户任务使用PSP的堆栈在物理上隔离开来。这样做可以确保即使某个用户任务的堆栈出现问题如溢出也不会破坏操作系统内核或中断处理程序运行所必需的堆栈空间。在裸机开发时会用到PSP吗极大概率用不到。在常规的裸机开发指不加RTOS直接跑while循环中全程只使用MSP主堆栈PSP进程堆栈基本处于“休眠”状态。具体原因和例外情况如下1. 为什么裸机默认不用 PSP复位默认就是 MSP芯片复位后硬件自动从向量表加载 MSP 的初始值并将CONTROL寄存器的SPSEL位清零默认就指向 MSP。全程运行在 Thread 模式裸机程序的主函数main和所有中断/异常服务函数都运行在“线程模式特权级”下。既然只有这一个“线程”在跑使用唯一的 MSP 最直接、效率最高。切换 PSP 徒增开销如果非要切到 PSP你需要手动给 PSP 寄存器赋值并修改CONTROL寄存器。这反而增加了代码复杂度且没有任何收益。2. 什么“裸机”情况下会用到 PSP虽然少但以下两种特殊裸机场景会用到你正在裸机上“手搓”任务调度器如果你不想用现成的 RTOS如 FreeRTOS而是在裸机中断里手动切换任务为了隔离不同任务的栈空间你可以主动开启 PSP让每个任务的私有栈使用 PSP而中断上下文依然使用 MSP。不过很多开发者即使手搓调度器为了省事也依然让所有任务共用 MSP通过将栈指针指向不同的数组地址。进行安全校验或内核探索为了测试 Cortex-M 的双堆栈机制或者写底层 Bootloader 时验证栈溢出保护。3. 一个容易混淆的“例外”重点很多人会误以为“中断里用 MSP主循环里用 PSP”是硬件默认的这是错的硬件默认行为复位后无论是主循环还是中断一律使用 MSP。切换时机只有当你主动编写代码将CONTROL[1]置 1 后主循环Thread模式才会切到 PSP而中断Handler模式不受影响永远强制使用 MSP。 给你的裸机开发建议如果你刚入门完全忽略 PSP 的存在只把 MSP 管好就行。只需关注启动文件中的Stack_Size定义确保 MSP 的栈空间通常位于 RAM 末尾足够大防止溢出。不要试图在裸机中随意修改 SP 寄存器指向 PSP这很容易导致内核硬故障HardFault因为此时 PSP 寄存器还是“野值”未初始化。总结一句话裸机开发默认只用 MSP如果你没写操作系统任务切换代码PSP 就不会被启用。专注于 MSP 的栈大小规划是裸机开发中最稳健的做法。

相关新闻

MNE-Python中的信号空间分离(SSS)与Maxwell滤波技术详解

MNE-Python中的信号空间分离(SSS)与Maxwell滤波技术详解

MNE-Python中的信号空间分离(SSS)与Maxwell滤波技术详解 【免费下载链接】mne-python MNE: Magnetoencephalography (MEG) and Electroencephalography (EEG) in Python 项目地址: https://gitcode.com/gh_mirrors/mn/mne-python 在脑磁图(MEG)数据分析中,环…

2026/7/20 15:19:26阅读更多 →
TMS320F280015x DCSM安全模块寄存器详解与实战配置指南

TMS320F280015x DCSM安全模块寄存器详解与实战配置指南

1. DCSM安全模块:嵌入式系统的“门禁”与“保险柜”在嵌入式系统,尤其是汽车电子和工业控制这类对安全性和可靠性要求极高的领域,开发者面临一个核心矛盾:系统需要足够的灵活性以便于调试、更新和维护,同时又必须严防死…

2026/7/20 15:19:26阅读更多 →
CAN总线消息对象配置详解:从寄存器到FIFO与动态管理

CAN总线消息对象配置详解:从寄存器到FIFO与动态管理

1. CAN总线消息对象:通信的基石与核心配置 在嵌入式系统,尤其是汽车电子和工业控制领域,CAN总线因其高可靠性和实时性成为首选的通信协议。但很多工程师在初次接触CAN驱动开发时,往往对数据手册中复杂的“消息对象”配置感到困惑。…

2026/7/20 15:19:26阅读更多 →
单片机IO扩展利器:74HC595芯片详解与应用

单片机IO扩展利器:74HC595芯片详解与应用

1. 项目背景与核心需求 当我们在开发单片机项目时,经常会遇到一个令人头疼的问题:IO口不够用。特别是当我们需要驱动多个LED、数码管或传感器时,有限的IO资源往往成为项目开发的瓶颈。以常见的51单片机为例,P0-P3四个端口总共只有…

2026/7/21 8:27:11阅读更多 →
具身智能的TVA-VLA双引擎架构(5)

具身智能的TVA-VLA双引擎架构(5)

前沿技术探索:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,是集深度强化学习(DRL)、卷积神经网络(CNN…

2026/7/21 8:27:11阅读更多 →
具身智能的TVA-VLA双引擎架构(3)

具身智能的TVA-VLA双引擎架构(3)

前沿技术探索:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,是集深度强化学习(DRL)、卷积神经网络(CNN…

2026/7/21 8:27:11阅读更多 →
具身智能的TVA-VLA双引擎架构(2)

具身智能的TVA-VLA双引擎架构(2)

前沿技术探索:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,是集深度强化学习(DRL)、卷积神经网络(CNN…

2026/7/21 8:27:11阅读更多 →
具身智能的TVA-VLA双引擎架构(系列)

具身智能的TVA-VLA双引擎架构(系列)

前沿技术探索:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,是集深度强化学习(DRL)、卷积神经网络(CNN…

2026/7/21 8:27:11阅读更多 →
从RLE到结构化位图:一个“无损压缩”思路的工程化演进

从RLE到结构化位图:一个“无损压缩”思路的工程化演进

引言:当Mask本身也需要压缩 在前几轮的讨论中,我们构建了一个自适应的权重压缩方案: 核心思路:[23, 39, 99, 258] (mask, 10[2,3,9] 1[3,9,9]) (另一组mask, 100[2] 10[5] 1[8]) 我们用 Mask(掩码) 来…

2026/7/21 8:25:11阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →