__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)
相关推荐
Nebula嵌入式9 小时前
【C语言】09-深入解析main函数
linux·c语言·开发语言·嵌入式
天空'之城11 小时前
C 语言工业级通用组件手写 23:卡尔曼滤波(简易版)
c语言·卡尔曼滤波·嵌入式算法·工业级组件
888CC++11 小时前
C语言与C++的区别:从面向过程到面向对象
java·c语言·c++
库玛西14 小时前
C++ 运行时多态 :核心总结与原理图解
c语言·c++·笔记
天空'之城16 小时前
C 语言工业级通用组件手写 21:限幅消抖滤波
c语言·嵌入式算法·工业级组件·限幅消抖滤波
Aurorar0rua16 小时前
CS50 x 2024 Notes Algorithms - 07
c语言·开发语言·学习方法
神罚天下ET16 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
noipp19 小时前
推荐题目:洛谷 P3726 [AHOI2017/HNOI2017] 抛硬币
c语言·数据结构·c++·算法·编程·洛谷·luogu
c2385619 小时前
C/C++每日一练14
c语言·c++·算法
apocelipes21 小时前
Linux NTSYNC 简明教程
c语言·并发·linux编程