Sujet : Re: Analyse utilisation mémoire C
De : toto (at) *nospam* toto.com (Pascal06)
Groupes : fr.sci.electroniqueSuivi-à : fr.comp.lang.cDate : 24. Mar 2023, 08:46:58
Autres entêtes
Organisation : Nemoweb
Message-ID : <FUBzRdvuxHZhLW70_avWy1OdD5g@jntp>
References : 1 2 3
User-Agent : Nemo/0.999a
Le 03/02/2023 à 10:23, Pascal06 a écrit :
Le 02/02/2023 à 23:48, JKB a écrit :
Bonsoir,
Pas sûr que je comprenne la demande. Si c'est pour un code
s'exécutant sur une machine standard, il faut voir les sections du
binaires (.data par exemple, ou .text). Le code source ne donnera
pas grand'chose parce que le compilateur peut optimiser des tas de
choses (alignement mémoire entre autre, champs de bits...).
Pascal
Bonjour à toutes et tous,
je reviens sur ce messages, car depuis j'ai trouvé des éléments de réponses.
Il existe donc deux outils qui permettent d'analyser les fichiers map générés par le compilateur gcc:
https://github.com/govind-mukundan/MapViewerhttps://www.sikorskiy.net/info/prj/amap/Malheureusement, ces outils ne fonctionnent pas avec le code que je voulais analyser et qui est compilé avec XC8 de Microchip: celui-ci n'étant pas basé sur GCC (contrairement à XC16).
Par contre,
dans le code assembleur qui est généré (fichier .lst), il est indiqué en commentaire la taille de chacune des variables utilisées, par exemple:
1642 ;; *************** function _main *****************
1643 ;; Defined at:
1644 ;; line 112 in file "main.c"
1645 ;; Parameters: Size Location Type
1646 ;; None
1647 ;; Auto vars: Size Location Type
1648 ;; sgOld 4 63[BANK0 ] unsigned long 1649 ;; spOld 4 59[BANK0 ] unsigned long 1650 ;; sg 4 0 unsigned long 1651 ;; sp 4 0 unsigned long 1652 ;; drvConfig 2 67[BANK0 ] struct .
1653 ;; adcRawValue 2 0 unsigned short 1654 ;; msdiStatus 1 0 enum E3961
1655 ;; i 1 0 unsigned char 1656 ;; Return value: Size Location Type
1657 ;; 2 313[None ] int 1658 ;; Registers used:
1659 ;; wreg, fsr0l, fsr0h, fsr1l, fsr1h, status,2, status,0, pclath, cstack
Ce qui correspond donc tout à fait à ce que je cherchais. On voit par exemple que sgOld prend 4 octets, que c'est un unsigned long ( = uint32_t), qu'il utilise le bank0.
Le micro 8 bits utilisé est une PIC16F15244
Ce fichier lst est placé dans le dossier /dist/default du projet.
Si ça peut aider d'autre personnes ;)
Pascal