__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)
相关推荐
山下梅子酒2256 小时前
洛谷-入门-B2079
c语言
Mr_Macallon7 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
wuminyu8 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
Felven8 小时前
B. Reverse a Permutation
c语言
Logic1019 小时前
C语言/数据结构排序题解:三个数的最大乘积——排序后比较两种候选情况
c语言·数据结构·数组·排序·时间复杂度·算法题·负数处理
无忧.芙桃9 小时前
位图妙用:512MB 实现 40 亿整数的存在性查询
c语言·c++·面试·哈希算法
听风若依9 小时前
数据在内存中的存储-纸面笔记整理
c语言·笔记
殷色玫瑰10 小时前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
Code_Solitude10 小时前
C语言:关于二维数组的作业总结
java·c语言·前端
老花眼猫12 小时前
数学艺术图案画-曼陀罗(93)
c语言·经验分享·青少年编程·课程设计