GNU LD peut-il imprimer l’utilisation de la mémoire par espace mémoire, plutôt que sous forme de pourcentage?

Je travaille sur un projet intégré sur un mcu ARM qui a un fichier de liaison personnalisé avec plusieurs espaces mémoire différents:

/* 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 } 

Plus précisément, j’ai un certain nombre de dispositifs de mémoire différents avec des caractéristiques différentes ( TCM , RAM simple (avec un D-Cache dans le chemin) et une SDRAM externe), tous mappés dans le même espace adresse.

Je place spécifiquement différentes variables dans les différents espaces mémoire, en fonction des besoins (suis-je DMA dedans, ai-je des problèmes de cohérence de cache, dois-je m’attendre à déborder du D-cache, etc.).

Si je dépasse l’une des sections, j’obtiens une erreur de l’éditeur de liens. Cependant, à moins que je ne le fasse, l’éditeur de liens n’imprime que l’utilisation de la mémoire sous forme de pourcentage global:

  Program Memory Usage : 33608 bytes 1.6 % Full Data Memory Usage : 2267792 bytes 91.1 % Full 

Étant donné que j’ai 3 espaces de mémoire utilisés, et que je sais que j’utilise 100% de l’un d’entre eux (la SDRAM), c’est une sortie inutile.

Existe-t-il un moyen de faire en sorte que l’éditeur de liens affiche le pourcentage d’utilisation pour chaque espace mémoire individuellement? À l’heure actuelle, je dois ouvrir manuellement le fichier .map , rechercher l’en-tête de la section, puis soustraire manuellement la taille de la mémoire totale disponible spécifiée dans le fichier .ld .

Bien que ce soit un peu mineur, il serait bien de laisser simplement l’éditeur de liens faire:

 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 

Ceci est avec GCC-ARM, et donc GCC-LD.

Bien sûr, je trouve la réponse juste après avoir posé la question:

--print-memory-usage

Utilisé comme -Wl,--print-memory-usage , vous obtenez les éléments suivants:

  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%