Файл STM32 ExtRAM GCC-MAP

Я использую STM32F417 с внешней 512*16 RAM под FreeRTOS. Когда я вижу файл MAP, адрес используемой памяти все еще находится во внутренней памяти. RTOS Heap def:

>   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

2 ответа

Куча используется malloc для динамического выделения памяти во время выполнения. Компоновщик создает файл карты во время сборки, прежде чем ваш код будет запущен. Компоновщик знает только о переменных, которые определены во время компиляции. Компоновщик не знает, как будет использоваться куча во время выполнения. Поэтому файл карты не может перечислять переменные, которые могут быть созданы в куче.

Переменные, перечисленные в файле карты в разделах.bss и.data, определяются во время компиляции и распределяются статически. Они не появляются в куче, потому что это не то, для чего куча.

ОК, я обнаружил, что в файле MAP нет перечисленных переменных, расположенных в куче extRAM. Это означает, что объекты, перечисленные в ОЗУ, имеют меньший размер, если в extRAM есть переменные, расположенные в куче, но не перечислены в адресе кучи (0x6000000) так же, как переменные / объект, находящийся во внутренней ОЗУ.

Другие вопросы по тегам