2016-10-09 5 views
0

J'utilise STM32F417 avec 512 * 16 RAM externe sous FreeRTOS. Quand je vois un fichier MAP, l'adresse de la mémoire utilisée est toujours dans la RAM interne. RTOS Tas def:STM32 ExtRAM GCC-MAP fichier

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

fichier-gcc-link.ld bras:

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

MAP fichier:

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

variable, pourquoi pas dans 0x6000000 région ?:

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

Répondre

0

OK, J'ai trouvé que dans le fichier MAP ne sont pas listées les variables situées dans le tas extRAM. Cela signifie que les objets listés dans la RAM sont de taille inférieure s'il y a des variables situées dans le tas dans extRAM mais qui ne sont pas listées sous heap address (0x6000000) de la même manière que les variables/objets situés dans la RAM interne.

1

Le tas est utilisé par malloc pour allouer de la mémoire dynamiquement, au moment de l'exécution. L'éditeur de liens crée le fichier map au moment de la construction, avant que votre code ne soit en cours d'exécution. L'éditeur de liens ne connaît que les variables définies lors de la compilation. L'éditeur de liens n'a aucune connaissance de la façon dont le tas sera utilisé au moment de l'exécution. Par conséquent, le fichier map ne peut pas détailler les variables qui peuvent être créées dans le tas.

Les variables répertoriées dans le fichier de mappage dans les sections .bss et .data sont définies au moment de la compilation et attribuées de manière statique. Ils n'apparaissent pas dans le tas parce que ce n'est pas ce que le tas est pour.