__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)
相关推荐
Navigator_Z29 分钟前
LeetCode //C - 1209. Remove All Adjacent Duplicates in String II
c语言·算法·leetcode
码行山野赴时序归途3 小时前
算法效率的度量(上):时间复杂度中的对数思维
c语言·数据结构·算法
单片机仿真设计4 小时前
【proteus仿真】基于 STM32 的智能垃圾桶设计(仿真图+程序)
c语言·stm32·stm32单片机·proteus·毕设·仿真
是隼人9 小时前
buuctf-pwn axb_2019_fmt32题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
老一岁10 小时前
c问题总结(2)
c语言·开发语言
奶茶树10 小时前
【C++】13. C++11新特性【上】
c语言·开发语言·c++·git·github
xys_67810 小时前
深挖C语言:动态内存管理
c语言·开发语言
wuminyu11 小时前
JDK21 FFM异步读取MSG_ZEROCOPY错误队列揭秘
java·linux·c语言·jvm·c++
拂拉氏12 小时前
【项目分享-知识讲解】 Linux第一个项目--进度条的实现与解析
c语言
江洋之道12 小时前
嵌入式LVGL UI架构实践:MVP分层 + 双链表路由,构建低耦合、易维护的嵌入式界面
c语言·架构·嵌入式·lvgl