En parlant de mémoire, j'ai justement un truc étrange...
Quand je compile mon sketch, j'obtiens 2 lignes d'informations :
- 1 ligne sur la taille du sketch en octets
- 1 ligne sur le "volume" de variable globale vs le reste de mémoire disponible à l'allocation dynamique en cours d'exécution.
Concernant cette notion de "variable globale", je pensais que c'était un peu comme en Java que j'ai plus l'habitude d'utiliser et que ces variables étaient celles déclarées en tête de classe / sketch, visibles et utilisables par toutes les fonctions.
C'est pourtant la définition que j'ai pu trouver concernant arduino.
... Et pourtant, quelque chose m'échappe...
Dans mon sketch principal, j'ai une fonction dédiée au Bluetooth.
Cette fonction doit recevoir une "trame" de données par Bluetooth, la décoder et effectuer des traitements en fonction...
Mes trames sont par exemple "101:30&5" :
- 101 correspondant à mon id de commande (par exemple modifier température).
- et ce qui suit les : sont les données, ici 30&5 pouvant être 30°C le jour avec 5°C de variation la nuit.
Dans ma fonction j'ai donc un "gros" switch case sur l'id de commande, puis dans les différents case, je décode les trames de données qui n'ont pas forcément toutes le même format.
Pour décoder ces trames, la seule fonction que j'ai trouvé et réussi à utiliser et la fonction sscanf() que j'utilise par exemple comme cela :
char* data = '30&5';
char* pattern = '%d&%d';
int temp, var;
sscanf(data, pattern, &temp, &var);
updateParam(temp, var);
J'ai effectivement une variable globale de type enum me permettant d'avoir les ids de commande et de les utiliser dans mon switch case...
Les autres variables (data, pattern, temp, var...) pour chaque case sont déclarées en local au sein de la fonction !
Et mon souci... Quand je compile, j'obtiens un message du type "les variables globales occupent 76% de l'espace, problème potentiel de mémoire à l'exécution"...
Et si je commente tous le switch case, je descends à 50% de variables globales !!!
Du coup, j'ai testé en remplaçant le switch case par une bonne succession de if à l'ancienne (je sais qu'en Java, le switch est gourmand)... Et au final, idem avec les if.
Alors je vais essayer tout à l'heure en commentant juste le contenu des if, voire si ça change quelque chose et si c'est lié aux déclarations de variables et utilisation du sscanf à répétition mais dans ce cas, je comprends pas bien le message de compilation et la notion de variable globale !