簡體   English   中英

STM32 ExtRAM GCC-MAP文件

[英]STM32 ExtRAM GCC-MAP file

我在FreeRTOS下使用帶有外部512 * 16 RAM的STM32F417。 當我看到MAP文件時,已用內存的地址仍在內部RAM中。 RTOS堆定義:

>   static unsigned char ucHeap[ 60*1024 ]__attribute__    > ((section(".ExRam")));

arm-gcc-link.ld文件:

> rom (rx)  : ORIGIN = 0x08000000, LENGTH = 0x00100000  
> ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000  
>ram2 (rwx) : ORIGIN = 0x60000000, LENGTH = 0x00100000
>...
>ExRam (NOLOAD):    {       *(.ExRam.)  } > ram2
>...

MAP文件:

> .ExRam    0x60000000     0xf000  
>*(.ExRam.)  
>.ExRam     0x60000000     0xf000 ..\obj\heap_4.o
> 
> .ARM.extab  *(.ARM.extab * .gnu.linkonce.armextab.*)
>           0x6000f000                __exidx_start = .

變量,為什么不在0x6000000區域?:

>.bss           0x200053ac       0x2c ..\obj\tcp_in.o  
>.bss           0x200053d8        0x4 ..\obj\raw.o  
>.bss           0x200053dc       0x10 ..\obj\ip_addr.o  
>.bss           0x200053ec      0x100 ..\obj\ssl_ciphersuites.o
>.bss           0x200054ec      0x678 ..\obj\dns.o  
>.bss          0x20005b64        0x8 ..\obj\lwip_timers.o

malloc使用堆在運行時動態分配內存。 鏈接器在代碼運行之前在構建時創建映射文件。 鏈接器僅知道在編譯時定義的變量。 鏈接器不知道如何在運行時使用堆。 因此,映射文件可能無法逐項列出可能在堆中創建的變量。

在.bss和.data節的映射文件中列出的變量是在編譯時定義並靜態分配的。 它們不會出現在堆中,因為那不是堆的用途。

好的,我發現在MAP文件中沒有列出位於extRAM堆中的變量。 這意味着,如果extRAM中的堆中有變量,但未在堆地址(0x6000000)下列出,則RAM中列出的對象的大小會減小,就像內部RAM中的變量/對象一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM