GNU LD 能否按内存 space 打印内存使用情况,而不是仅作为批量百分比?
Can GNU LD print memory usage by memory space, rather then just as a bulk percentage?
我正在 ARM mcu 上开发一个嵌入式项目,该项目有一个带有多个不同内存的自定义链接器文件 spaces:
/* 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
}
具体来说,我有许多具有不同特性的不同存储设备(、普通 RAM(中间有一个 D-Cache)和一个外部 SDRAM),所有这些都映射为一部分相同地址 space.
我专门将不同的变量放在不同的内存 space 中,具体取决于要求(我是否正在使用 DMA,是否有 cache-coherence 问题,我是否期望溢出 D-cache,等等...)。
如果我超出任何一个部分,我会收到链接器错误。但是,除非我这样做,否则链接器只会将内存使用量打印为批量百分比:
Program Memory Usage : 33608 bytes 1.6 % Full
Data Memory Usage : 2267792 bytes 91.1 % Full
鉴于我有 3 个活跃使用的内存 spaces,而且我知道我正在使用其中一个(SDRAM)的 100%,这是一种无用的输出。
有没有办法让链接器分别输出每个内存space的使用百分比?现在,我必须手动打开 .map
文件,搜索 header 部分,然后从 .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%
我正在 ARM mcu 上开发一个嵌入式项目,该项目有一个带有多个不同内存的自定义链接器文件 spaces:
/* 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
}
具体来说,我有许多具有不同特性的不同存储设备(
我专门将不同的变量放在不同的内存 space 中,具体取决于要求(我是否正在使用 DMA,是否有 cache-coherence 问题,我是否期望溢出 D-cache,等等...)。
如果我超出任何一个部分,我会收到链接器错误。但是,除非我这样做,否则链接器只会将内存使用量打印为批量百分比:
Program Memory Usage : 33608 bytes 1.6 % Full
Data Memory Usage : 2267792 bytes 91.1 % Full
鉴于我有 3 个活跃使用的内存 spaces,而且我知道我正在使用其中一个(SDRAM)的 100%,这是一种无用的输出。
有没有办法让链接器分别输出每个内存space的使用百分比?现在,我必须手动打开 .map
文件,搜索 header 部分,然后从 .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%