【发布时间】:2026-02-07 22:50:01
【问题描述】:
我正在 ARM mcu 上开发一个嵌入式项目,该项目有一个自定义链接器文件,其中包含多个不同的内存空间:
/* Memory Spaces Definitions */
MEMORY
{
rom (rx) : ORIGIN = 0x00400000, LENGTH = 0x00200000
data_tcm (rw) : ORIGIN = 0x20000000, LENGTH = 0x00008000
prog_tcm (rwx) : ORIGIN = 0x00000000, LENGTH = 0x00008000
ram (rwx) : ORIGIN = 0x20400000, LENGTH = 0x00050000
sdram (rw) : ORIGIN = 0x70000000, LENGTH = 0x00200000
}
具体来说,我有许多具有不同特性的不同存储设备(TCM、普通 RAM(带有 D-Cache)和外部 SDRAM),它们都映射为同一地址空间的一部分。
我特意在不同的内存空间中放置了不同的变量,具体取决于要求(我是 DMA 进入它,我是否有缓存一致性问题,我是否希望溢出 D 缓存等等。 .).
如果我超出任何一个部分,我会收到链接器错误。但是,除非我这样做,否则链接器只会将内存使用情况打印为批量百分比:
Program Memory Usage : 33608 bytes 1.6 % Full
Data Memory Usage : 2267792 bytes 91.1 % Full
鉴于我有 3 个积极使用的内存空间,并且我知道我正在使用其中一个(SDRAM)的 100%,这是一种无用的输出。
有没有办法让链接器分别输出每个内存空间的使用百分比?现在,我必须手动打开.map 文件,搜索节标题,然后手动从.ld 文件中指定的总可用内存中减去大小。
虽然这是一件小事,但让链接器来做肯定会很好:
Program Memory Usage : 33608 bytes 1.6 % Full
Data Memory Usage : 2267792 bytes 91.1 % Full
data_dtcm : xxx bytes xx % Full
ram : xxx bytes xx % Full
sdram : xxx bytes xx % Full
这适用于 GCC-ARM,因此也适用于 GCC-LD。
【问题讨论】: