J'ai construit du code pour un simulateur et j'essaie maintenant d'utiliser la chaîne d'outils gratuite de TI pour effectuer une compilation croisée sur une cible avec 64 Ko de nvram. Le compilateur affirme que mon code dépasse de 34 ko la ROM:
(...) msp430-elf/bin/ld: region `ROM' overflowed by 33716 bytes
Une autre ligne indique qu'il ne peut pas contenir le champ .text
dans l'espace qui lui est alloué. Je ne peux pas croire que mes ajouts totalisent 34 ko, sans parler du débordement des fichiers binaires de ce montant.
-Os -s
au compilateur. math.h
(en fait, il s'agit de la seule partie qui effectue de l'arithmétique en virgule flottante), appelez strtod
et appelez sprintf
.Existe-t-il des outils ou des méthodes pour décomposer ce qui rend les fichiers binaires si volumineux?
GNU binutils a des outils pour vous aider à déterminer la taille de chaque symbole ou simplement de chaque fichier objet.
Regardez par exemple size
: https://manpages.debian.org/jessie/binutils/size.1.en.html
nm
vaut également la peine d'essayer, car il peut afficher la taille de chaque symbole dans le code de l'objet: https://manpages.debian.org/jessie/binutils/nm.1.en.html
Une inspection minutieuse des résultats de size
et nm
vous donnera l’intuition de savoir ce qui prend beaucoup de place et ce qui ne l’est pas.
Sachez que printf
, sprintf
et bon nombre des fonctions de bibliothèque les plus complexes peuvent souvent occuper quelques ko de ROM en plus.
La prise en charge des virgules flottantes à l’aide de soft-floats alourdira également le code par rapport à l’utilisation de hard-float, c’est-à-dire l’utilisation de l’émulation logicielle par rapport aux instructions matérielles pour gérer les virgules flottantes.
Parfois, le compilateur ajoute une quantité incroyable de ballonnements :)
Une fois, j’ai également eu des problèmes de mémoire avec un contrôleur MSP430 minuscule . La chaîne d’outils TI relie de grandes bibliothèques à votre binaire si des valeurs négatives sont possibles ou si la virgule flottante est utilisée. Dans mon cas, cela représentait environ 10% à 20% de l'utilisation totale de la mémoire.
Le logiciel gratuit Composer Studio de TI fournit une visualisation très puissante de la mémoire (Affichage -> Allocation de la mémoire).
Ce qui m'a beaucoup aidé a été de changer le modèle d'initialisation dans les paramètres de l'éditeur de liens et d'autres options d'optimisation. Je ne travaille actuellement pas avec un contrôleur MSP430, je ne peux donc pas vous donner plus de détails.
Il existe également AMAP, un petit et facile à utiliser pour visualiser les fichiers .map: http://www.sikorskiy.net/prj/amap/
Il aurait été agréable d’avoir un outil semblable à kdirstat permettant de comparer visuellement la taille des symboles.
Bien que ce ne soit pas une réponse directe à la question, j'ai finalement utilisé l'implémentation CORDIC de Voidware pour éviter d'utiliser les fonctions volumineuses de <math.h>
: https://github.com/enthdegree/cordic_wrapped