2016-12-30 40 views
4

我工作的一個嵌入式項目上有幾種不同的存儲空間自定義鏈接文件中的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。

回答

3

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%