Bonjour,
J'ai besoin d'un éclaircissement au sujet de la déclaration des variables.
J'ai compris la différence entre les qualificatifs "Static" et "Volatile". Que physiquement une "Volatile" est stockée en RAM est qu'une Static dans un registre de stockage.
Ma première question est: quand est-il des variables sans qualificatif ( ex: int toto = 2;)?
Ma deuxième question qu'est ce qu'un registre de stockage? un espace EEPROM?
Static est un qualificatif que l'on colle devant une variable locale (c'est-à-dire déclarée à l'intérieur d'une fonction) pour la rendre persistante. Sa valeur est conservée entre deux appels à la fonction. Elle est allouée en RAM exactement comme une variable globale, mais elle n'est visible donc utilisable qu'à l'intérieur de la fonction (code plus propre)
Volatile est un qualificatif qui doit être mis devant une variable globale, lorsqu'elle est susceptible d'être utilisée / modifiée par une routine d'interruption (si la variable occupe plusieurs octets, évite de se retrouver avec une interruption au milieu de sa mise à jour).
En variable globale : un emplacement RAM est réservé de manière permanente à cette variable, dont l'initialisation à 2 intervient dans la séquence de démarrage de l'arduino (initialisation de la ram)
En variable locale : un emplacement temporaire lui est réservé dans la pile (en RAM aussi), libéré lorsque l'on sort de la fonction. L'initialisation à 2 est effectuée par du code exécutable inséré par le compilo au début de la fonction.
Un registre de stockage : à un niveau débutant, pas besoin de s'en préoccuper, c'est le compilo qui gère et/ou les librairies systèmes utilisées.
Il s'agit de registres au niveau du microcontroleur.
L'Eeprom, c'est pour du stockage d'information persistante, y compris en cas de coupure électrique.
C'est le disque dur de nos arduino, mais avec une capacité de réécriture un peu limitée.
L'endroit idéal pour stocker des paramètres de fonctionnement (identifiants de sondes, adresses, seuils, etc.) lorsqu'on souhaite pouvoir les modifier occasionnellement, sans avoir à modifier un #define dans un code source + compil + téléversement.
Merci pour ces précisions.
Lorsque tu dis que le qualificatif Volatile "évite de se retrouver avec une interruption au milieu de sa mise à jour". Cela veut-il dire que le microcontroleur peut ne pas finir une instruction de mise à jour de mémoire pour traiter une interruption?