luckymaxou:
Bonjour à tous,
merci J-M-L et merci microquettas
d'abord je voudrais insister sur le fait que mon post ne voulais engager aucune polémique
pas de soucis - on écrit ici entre gens de bonne compagnie et on peut sereinement exprimer son point de vue. le débat est sain et pour certaines questions il n'y a pas de solution unique.
luckymaxou:
Ma question du jour serait justement :
Exactement jusqu'à quel pourcentage à la compilation peut-on aller sur la mémoire prog et la sram sans craindre des bugs pendant l'exécution ?
merci
Votre challenge principal (d'où ma réponse un peu avancée) était le suivant selon ce que vous avez écrit:
- vous avez des contraintes de places mémoire.
Il y a deux types de mémoire à ménager la SRAM (qui sert pour stocker tout ce qui est volatile) et la mémoire flash qui sert à stocker votre programme et éventuellement des données statiques (qui n'est pas effacée quand vous éteignez votre arduino)
le problème que vous souleviez fait que l'usage de sprintf() ou sscanf() (comme on l'a vu plus haut) augmente de plusieurs kilo-octets la mémoire programme car ce sont des fonctions complexes, donc gourmandes pour stocker le code.
De plus pour faire appel à ces fonctions il vous faire appel à ces fonctions il faut passer en paramètre une chaîne de formatage qui elle même va prendre de la RAM.
Enfin, comme vous l'avez vu, un %d travaille en entier, soit sur 2 ou 4 octets suivant les arduinos, et vous n'avez besoin que d'1 octet pour représenter vos informations, donc vous gaspillez de la RAM pour rien.
La réponse à votre question ci dessus cependant n'est pas simple. En gros, si tout rentre en mémoire FLASH alors vous n'avez pas à vous soucier d'optimiser cette partie là, ça ne vous apporte rien de laisser de la mémoire programme vide... votre code n'est pas à risque. Pour ce qui concerne la RAM (ou SRAM) là il faut être judicieux. Il y a ce que vous dit le compilateur à la compilation --> c'est ce qu'il voit que vous allouer de manière statique en RAM. et ensuite il y a ce que vous allez utiliser lorsque le program tourne. il peut s'agir d'allocation dans le TAS ou dans la PILE (cf les débats ci dessus ou le lien de bricofoy où on a évoqué ce sujet)
Utiliser le TAS de manière non contrôlée sur un petit micro-processeur est dangereux, vous risquez de morceler la mémoire ce qui peut conduire à des bugs si vous ne testez pas le retour de tentative d'allocation de mémoire. si vous utilisez la PILE alors il faut regarder ce que consomment les fonctions et les appels les plus profonds (une fonction appelle une fonction qui appelle une fonction -> tout cela rajoute les variables locales et deux trois autres trucs sur la pile) et voir si ça rentre dans votre SRAM. Si oui, vous êtes bon et pas la peine de travailler sur l'optimisation, si non alors il faut plonger un peu plus les mains dans le moteur et les octets, c'est ce que je vous proposais plus haut