Mounriver Studio利用obj中编译文件分析RAM使用情况

在 MounRiver Studio(MRS)中,编译器生成的 .map 文件 (也称为链接映射文件)是一个重要的文本报告,它详细记录了程序在内存中的布局和分配情况。通过分析这个文件,我们可以深入了解和优化嵌入式项目的资源使用。

在沁恒的一些蓝牙芯片中,例如CH572、CH592这些小资源量芯片,开发时资源消耗量会很快,在后续优化内存分布时,map文件就可以派上用场:

 

①以BLE的Peripheral为例进行分析,如下图,RAM的基地址位于0x20000000:

image

 

一般在 GNU ld 链接器生成的 .map 文件里,有一个典型的层级结构:

  • 段级(Section level):以 .highcode 这样的段名开头,它的大小列就是整个段的总大小。
  • 符号级(Symbol level):段下面缩进的每一行,是属于这个段的函数 / 变量,它们的大小是各自的占用字节数。
2910 .highcodelalign        ...  0x0   ...  // 段对齐占位
2915 .highcode             ...  0x3bf4...  // 段本身,总大小
2918 *(.highcode)          ...        ...  // 通配符,匹配所有子段
2919 .highcode             ...  0x4e  ...  // 属于该段的函数集合
2923 .highcode.RTC_GetCycle32k ... 0x18 ... // 具体函数大小
2926 .highcode.SetSysClock ...  0x1a4 ...  // 具体函数大小

 因此可以得出该程序中被函数定义所占用的RAM资源量=0x3BF4=15384字节;

 

②下图举例了一个子函数RTC_IRQHandler大小占用了0x16=22字节,如果将__HIGH_CODE修饰字删除,则RAM使用缩减22字节(当然,这只是举例,中断服务函数禁止去除__HIGH_CODE标识);

image

 

 

③ 废弃未使用的函数;如果发现一部分highcode修饰的函数,将highcode去掉后编译,结果编译大小未变化,则说明该函数被编译器列为不使用的废弃函数

image

 

④已使用的变量占用RAM,为0x4bc=1212字节:

image

 

⑤结合.lst文件分析:

image

 分析如下:

段名 Size (Hex) Size (Bytes) VMA (RAM 地址) 用途 & 说明
.highcode_init 0x000001fc 508 0x20000000 初始化代码段,属于 RAM 函数代码区,占用 508 字节 RAM
.highcode 0x00003bf4 15348 0x200001fc 核心 RAM 函数代码区,占用 15348 字节 RAM(约 15KB)
.data 0x000004bc 1212 0x20003df0 已初始化全局 / 静态变量,占用 1212 字节 RAM
.bss 0x000002a0 672 0x200042b0 未初始化全局 / 静态变量,上电自动清 0,占用 672 字节 RAM
.stack 0x00000000 0(仅占位) 0x20020000 栈段,实际大小由链接脚本配置(表中 Size 为 0 是因为它是运行时分配)

 

posted @ 2026-03-26 14:20  oTvTo  阅读(3)  评论(0)    收藏  举报