gpt4 book ai didi

GNU LD 可以按内存空间打印内存使用情况,而不是仅按体积百分比打印吗?

转载 作者:太空狗 更新时间:2023-10-29 17:21:11 27 4
gpt4 key购买 nike

我正在 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),所有这些都映射为同一地址空间的一部分。

我专门将不同的变量放在不同的内存空间中,具体取决于要求(我是否进入其中,我是否有缓存一致性问题,我是否希望溢出 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。

最佳答案

啊啊啊,所以当然,问完问题我马上就找到了答案:

--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%

关于GNU LD 可以按内存空间打印内存使用情况,而不是仅按体积百分比打印吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41389450/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com