当前位置: 首页 > news >正文

Cortex-M 内存布局学习整理

Cortex-M 详细内存布局图(地址:由低向高)

image


说明:

1. 为什么“向上”和“向下”增长很重要?

  • 堆 (Heap) - 向上增长:当你调用 malloc() 时,分配器会从 .bss 段结束的地方开始,寻找空闲内存,地址是越来越大的。
  • 栈 (Stack) - 向下增长:这是 Cortex-M 的硬件特性(Full Descending Stack)。在启动时,MSP 指针指向 RAM 的末尾(高地址)。每当有一个函数调用、局部变量定义或发生中断压栈时,SP 指针的值会减小
  • 碰撞风险 (Stack Overflow):如果你的函数嵌套太深或者局部变量分配巨大,栈指针会一路减小,直到撞上向上增长的堆或者 .bss 段。这就发生了著名的栈溢出,会导致程序莫名其妙地崩溃。

2. 向量表的“特殊地位”

  • 你会发现向量表始终在 Flash 的最开头(低地址)。
  • 这是因为 CPU 复位瞬间,固定会去寻址 0x0000 0000(映射后的物理 Flash 地址)。它第一眼必须看到向量表。

3. .data 段的“物理隔离”

  • 在 Flash 里的 .dataLMA (加载地址)
  • 在 RAM 里的 .dataVMA (运行地址)
  • 搬运工:在你的 startup_xxxx.s 汇编代码中,有一段循环代码会读取 Flash 中的“变量初始值”,然后写入到 RAM 的“变量运行地址”中。

4. 栈顶指针的初始化

  • 在向量表的最开头(第一个 4 字节),存放的不是代码地址,而是 初始堆栈指针 (MSP) 的数值
  • 硬件上电时,先读取这个值送到 SP 寄存器,然后再读取第二个 4 字节(Reset Handler)送到 PC

小结

  • 程序运行(代码/常量):在 Flash 低地址区。
  • 静态数据(全局变量):在 RAM 低地址区。
  • 动态数据(堆):从 RAM 低地址往高地址跑。
  • 函数现场(栈):从 RAM 最高地址往低地址跑。

这种“两头往中间挤”的设计,最大限度地利用了 RAM 空间,但也带来了溢出碰撞的风险。

http://www.jsqmd.com/news/133063/

相关文章:

  • 20、创建和实现外部内容类型及相关操作指南
  • VR-Reversal:3D视频转换与自由视角探索的终极指南
  • 如何快速使用HTML转Figma工具:网页导入设计的完整指南
  • 2025年评价高的UV光疗美甲灯/便携式美甲灯厂家最新TOP实力排行 - 行业平台推荐
  • 21、实现 .NET 程序集连接器及相关操作
  • 基于深度学习的野生动物视觉跟踪系统任务书
  • 22、在 Outlook 中使用外部列表的全面指南
  • SteamShutdown:告别下载等待的智能自动关机神器
  • Cursor试用限制全攻略:go-cursor-help一键重置技术方案深度解析
  • FAE医学影像分析平台:零基础快速掌握放射组学技术
  • Figma与HTML的完美对话:从设计到代码的智能转换艺术
  • GPT-SoVITS训练损失曲线解读:如何调参更有效?
  • 2025年口碑好的喷淋塔废气处理/废气处理净化塔高评分品牌推荐(畅销) - 行业平台推荐
  • 高效下载B站视频:开源工具BilibiliDown完整操作指南
  • BilibiliDown极速Hi-Res音频下载完整指南:一键获取无损音质
  • 解锁车辆识别新维度:VeRi-776关键点标注全解析
  • 终极宝可梦编辑器完整指南:打造个性化游戏体验
  • FastAPI快速上手:请求与响应的核心玩法
  • 深度谢谢基于 __YOLOv8 + Streamlit__ 的 __无人机罂粟毒品植株识别系统 深度学习目标检测YOLOV8模型如何训练无人机罂粟检测数据集 罂粟植株识别
  • GroundingDINO技术深度解析:跨模态目标检测的革命性突破
  • 数字频率计设计输入保护电路:操作指南与元器件选型建议
  • TVBoxOSC完整使用指南:从安装到精通的全流程解析
  • 轻松搭建NAS媒体库智能管家:MoviePilot实战指南
  • 终极指南:Salt Player - 免费开源Android音乐播放器完全使用手册
  • Mastering GPU Parallel Programming with CUDA: ( HW SW )
  • BilibiliDown无损音频下载终极指南:轻松获取Hi-Res高品质音乐
  • GPT-SoVITS中文语音克隆表现如何?实测结果揭晓
  • Advance R Programming
  • ASMR下载器终极指南:5步实现批量资源自动同步
  • MoviePilot自动化部署指南:轻松打造智能NAS媒体库