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

STM32学习——.map文件知识的学习

1.查阅.map文件,先寻找Memory Configuration

查看整个代码运行程序的详情,比如flash的起始地址、大小,RAM的起始地址和大小等,根据这些地址可以判断某些段是在flash当中还是在SRAM当中。

2.再看程序的入口和主代码区域

  • _estack是栈顶指针;
  • _Min_Heap_Size/_Min_Stack_Size是链接脚本里预留的最小堆/最小栈
  • .isr_vector是中断向量表,放在Flash的起始地址

向量表结构
前4字节为MSP初始值,后4字节为复位向量地址(即Reset_Handler函数地址)

  • .text是代码段,有起始地址和大小

要懂得怎么看:先看段名,再看地址,再看大小

.text 0x08000190 0xb11c

代码段在 Flash 里,从 0x08000190 开始,占 0xb11c 字节

补充:

.rodata:只读常量段。存放常量,一般由const修饰的变量,放在flash中

局部变量在栈(stack)中

3.再看.data和.bss段

这两个是RAM的核心内容,都属于静态内存分配。

1).data段是已经初始化过非零值全局变量和局部静态变量,存放在Flash当中,程序运行时从Flash当中拷贝到RAM当中。其中

  • 0x20000000运行地址(VMA - Virtual Memory Address),即.data段在RAM中的目标位置
  • 0x1d4:段大小,468字节(十六进制0x1d4转换为十进制)
  • load address 0x0800eb7c加载地址(LMA),即.data段在Flash中的实际位置

.data段存放的变量

2).bss段是未初始化的或初始化为0全局变量和局部静态变量

  • .bss段(Block Started by Symbol)是程序内存布局中用于存储未初始化的全局变量和静态变量的静态内存区域。该段内容在可执行文件中不占用实际存储空间,其内存分配由链接脚本记录地址范围并由系统在运行时完成
  • 初始化机制:程序启动时,操作系统会自动将.bss段清零,确保所有未初始化或初始化为0的变量在程序执行前已成0

  • _sidata.data初值在 Flash 里的起始地址
  • _sdata.data在 RAM 里的起始地址
  • _edata.data在 RAM 里的结束地址
  • _sbss.bss起始地址
  • _ebss.bss结束地址
  • _estack:栈顶地址

4.Discarded input sections区域

Discarded input sections指的是在链接过程中被识别为未使用的代码或数据段,这些段因为没有被其他部分引用而被链接器主动丢弃,不会包含在最终的二进制文件中

可以利用该部分查看未使用的函数和变量,从而优化代码

http://www.cnnetsun.cn/news/1954302.html

相关文章:

  • 宝塔面板SSH提示连接被拒绝_检查服务器端口开关
  • 别再只盯着评分了!用BPR算法处理隐式反馈数据,让你的推荐系统更懂用户
  • 幻境·流金入门必看:DiffSynth-Studio+玄金美学环境搭建详解
  • Python函数实战:从基础分段到高级参数处理
  • 揭秘煤炉Mercari防封号终极指南
  • 从扫地机器人到无人机:用Python模拟Bug1/Bug2算法,看经典避障如何影响现代机器人
  • 【FPGA】Vivado综合进程异常终止(PID Not Specified)排查与修复指南
  • 亮数据 Bright Data 第二季度直播倒计时!
  • 别再只改单元格了!PyQt5 QTableWidget表头(horizontalHeader/verticalHeader)的5个实用技巧与避坑指南
  • 别再让虚拟机卡顿了!保姆级详解VMware ESXi内存回收三剑客:TPS、Ballooning与Swapping
  • 新概念英语(第三册)精读与场景应用——Lesson 6 至 Lesson 10 核心主题解析
  • 请在vscode中使用opencode
  • 知识博主如何用直播筛选高意向客户
  • 生物信息学必备:用R语言密度图揪出测序数据中的异常分布(含带宽调整技巧)
  • 配置爆炸危机预警!SITS2026最新数据:单系统平均配置项达2143+,AI生成方案已成P0级技术刚需——立即获取首批200个预训练领域模型访问权限
  • Avalonia开发环境搭建全攻略:从Visual Studio到Rider的保姆级教程
  • 程序员转行大模型领域,大龄程序员转行难于上青天?4大困境+破局指南,助你华丽转身!
  • 告别手动切图!用这款PSD转UGUI插件,5分钟搞定Unity界面还原(附避坑指南)
  • 无网环境下的救星:详解Win10离线部署.NET Framework 3.5的四种实战方案
  • 机房动环监控系统的核心功能与监测优势是什么?
  • 3分钟极速瘦身:Win11Debloat让你的Windows系统飞起来
  • 科研绘图两难:精准与美观如何兼得?
  • 生成式AI实时会话系统设计:3层缓冲机制+4级优先级队列+2种流控算法(附Go/Python可运行参考实现)
  • C#怎么模拟键盘按键输入_C#如何实现自动化脚本【教程】
  • CMakeList自定义库与头文件路径:从基础配置到高级场景实践
  • 别再盲目选AI编程工具!2026奇点大会权威报告指出:83%开发者用错提示工程配置,导致效率反降41%——附5步校准清单
  • 若依(Ruoyi)SpringBoot后台权限系统高危漏洞深度剖析:SQL注入与任意文件读取
  • Cup_of_TEA - Writeup by AI
  • 日本汽车的恐惧,又一个市场被中国汽车破局了,死亡螺旋开始了
  • 直播回顾 | 测试智能体与智能化测试平台分享