Bonjour à tous,
Voilà le message qui s'affiche en fin de compilation de mon programme:
Le croquis utilise 11 520 octets (4%) de l'espace de stockage de programmes. Le maximum est de 253 952
Les variables globales utilisent 6 189 octets (75%) de mémoire dynamique,
ce qui laisse 2 003 octets pour les variables locales. Le maximum est de 8 192 octets. La mémoire disponible faible, des problèmes de stabilité pourraient survenir.
Comment interpréter ce message, il semble pourtant rester pas mal de ressources ?
Quels sont les risques ?
Ça dépend si tu as beaucoup de variables locales ou non.
La cause peut-être:
Que n'as-tu pas de variables locales et tout est en globale ce qui pourrait expliquer que tu utilises pas mal de RAM.
Que tu utilises des librairies gourmandes en mémoires (graphique, SD-card, réseau)
Le risque c'est un plantage du programme si la mémoire vient à manquer.
Ce qu'il faut savoir, c'est que toutes les chaînes de caractères constantes contenues dans ton code occupent un emplacement fixe dans la RAM, comme les variables globales.
Ainsi, un simple
Serial.print("blabla");
revient exactement au même que
char txt[7] = "blabla"; //variable globale qui occupe 7 octets en RAM
...
Serial.print(txt);
Le "blabla" mange 7 caractères de la RAM.
C'est un problème ultra-classique de débutants : on arrive très vite à saturer la toute petite RAM d'un arduino avec des Serial.print
Arduino éteint, le "blabla" est stocké quelque part dans la mémoire flash, avec tout le code exécutable.
Au démarrage de l'Arduino, avant d'entrer dans la fonction setup(), "blabla" est recopié depuis la flash dans la RAM.
La solution consiste à lire la chaîne de caractères dans la flash au lieu de la RAM, lors de l'exécution des instructions du programme. C'est un poil plus lent, mais au moins cela ne monopolise pas de la RAM en permanence.
Dans le cas des Serial.print, c'est très facile à faire :
Il donne des informations sur l'utilisation des mémoires ainsi que des solutions pour pallier les problèmes (dont celui cité par "bricoleau" ci-dessus).