GNU LD可以通过内存空间打印内存使用情况,而不仅仅是散装百分比?
问题描述:
我工作的一个嵌入式项目上有几种不同的存储空间自定义链接文件中的ARM MCU:GNU LD可以通过内存空间打印内存使用情况,而不仅仅是散装百分比?
/* 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个积极使用的内存空间,我知道一个事实,即我使用一个100% (SDRAM),这是一种无用的输出。
有什么办法让链接器输出每个内存空间单独使用的百分比?现在,我必须手动打开.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。
答
Arrrgh,所以当然,我问这个问题后马上找到了答案:
--print-memory-usage
用作-Wl,--print-memory-usage
,你会得到如下:
Memory region Used Size Region Size %age Used
rom: 31284 B 2 MB 1.49%
data_tcm: 26224 B 32 KB 80.03%
prog_tcm: 0 GB 32 KB 0.00%
ram: 146744 B 320 KB 44.78%
sdram: 2 MB 2 MB 100.00%