Bonjour,
En c++, dans une classe, le mot clef "static" permet de déclarer des variables et des fonctions comme "globales" à l'ensemble des instances de la classe.
C'est une fonction particulière, on ne devrait donc pas trouver ça souvent.
J'ai des fichiers, issus de librairies permettant de gérer du hardware (écran TFT, shield Ethernet), où presque toutes voire toutes les fonctions et les variables sont déclarées "static"
Pour le Shield Ethernet ça me semble logique car on peut avoir plusieurs instances d'une classe (typiquement des clients et un serveur, qui dérivent d'une classe plus générale) qui "partagent" des variables liées à un unique hardware qui n'ont donc aucune raison de ne pas être identiques. Pour ce cas de figure, "static" semble non seulement logique mais aussi indispensable.
En revanche pour l'écran TFT, par principe la classe n'est instanciée qu'à un seul exemplaire pour piloter un écran.
Et si on arrivait à gérer deux écrans TFT dans le même projet, il faudrait que les deux instances soient totalement indépendantes pour piloter correctement chaque écran.
Aussi, dans ce cas de figure je ne comprend pas l'usage de "static".
D'ailleurs, dans ma classe qui gère la dalle tactile, je n'ai rien de déclaré en "static".
J'imagine que dans l'embarqué, il y a des particularité qui fait qu'on utilise "static" beaucoup plus souvent que sur un PC.
J'ai aussi des variables déclarées en "volatile" et là c'est beaucoup plus évident par rapport aux usages du c++ : tout ce qui est déclaré en "volatile" correspond à des broches ou à des ports.
Il faut donc absolument éviter que le compilateur simplifie le code en regroupant ou en supprimant des lectures ou écritures de variables "volatile" car le compilateur ne peut pas savoir que le hardware va lire ou modifier ces broches.
Au total, dans l'ensemble de mon projet, j'ai beaucoup moins de déclarations "volatile" (29) que de "static" (277)
Merci
A bientôt
Partager