__set_MSP 和__set_MSPLIM 接口区别

__set_MSP 和 __set_MSPLIM 这两个函数虽然都与主堆栈指针(MSP)相关,但它们的功能、作用机制和适用架构截然不同。

核心区别在于:__set_MSP 设置栈的"顶部"在哪里,而 __set_MSPLIM 设置栈的"底部"边界在哪里。

以下是详细的对比:

特性 __set_MSP __set_MSPLIM
操作对象 主堆栈指针 (MSP) 寄存器 主堆栈指针限制 (MSPLIM) 寄存器
核心功能 设定栈的起始地址(栈顶) 设定栈的地址下限(栈底边界)
主要作用 切换堆栈,例如在Bootloader跳转时,为应用程序设置正确的栈顶 启用硬件栈溢出检测 。当MSP的值等于MSPLIM时,会触发一个UsageFault异常。
适用架构 所有 Cortex-M 处理器 主要是 ARMv8-M 架构(如 Cortex-M23, M33, M55 等)
使用场景 必须。程序启动或任务切换时,CPU需要知道栈的起始位置。 可选。一种增强的安全机制,用于提前发现栈溢出问题。
权限要求 特权模式 特权模式
CMSIS 函数原型 void __set_MSP(uint32_t topOfMainStack) void __set_MSPLIM(uint32_t MainStackPtrLimit)
相关推荐
wyhwust1 小时前
程序设计基础--C语言输入输出单元测试
c语言·开发语言
another heaven2 小时前
【C/C++ C++ 面向对象架构的五大特点与能力场景:封装、继承、多态、抽象与 RAII(含实战案例)】
c语言·c++·架构
晓蛋2 小时前
什么是C语言
c语言·跨平台·编程语言·高级语言·低级语言
知识分享小能手4 小时前
C学习教程,从入门到精通,C语言单片机基础 — 完整知识点手册(19)
c语言·单片机·学习
another heaven4 小时前
【C/C++ C++ 新特性中的那些内存优化的特性】
c语言·开发语言·c++
我叫洋洋4 小时前
Allegro 画布“垃圾显示“清理指南:把板子调成干净工作台(实战总结)
c语言·c++·单片机·嵌入式硬件·eda·嘉立创
wuminyu5 小时前
JVM规范学习总结-Class文件结构
java·linux·c语言·jvm·c++
H.莓飛6 小时前
【数据结构】归并与外排序
linux·服务器·c语言·开发语言·数据结构·visual studio
xiaobobo33306 小时前
关于c语言循环结构的一些思考
c语言·业务逻辑·流程控制·循环结构·移植+输入
Navigator_Z6 小时前
LeetCode //C - 1304. Find N Unique Integers Sum up to Zero
c语言·算法·leetcode