Variable volatile et static

Bonjour !

Je me pose quelques petites question concernant ces deux "qualificatifs" de variable que sont volatile et static :

  1. volatile : j'ai pigé à quoi celà consiste, simplement quel risque j'encoure si j'utilise une variable non volatile dans une interruption ? Je l'ai fait et pas de soucis ... Et qu'en est-il de l'inverse (volatile alors qu'une non volatile ferait très bien l'affaire) ? Risque d'utiliser trop de RAM ?

  2. static : la aussi j'ai compris mais je ne vois pas bien l'intérêt ! Seule la fonction qui la crée peut la modifier, mais si j'ai pas envie qu'une autre fonction ne la modifie, je n'ai qu'à simplement pas m'en servir !!

il y avait eu une discution sur le sujet là: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1284028360/15

  1. volatile : j'ai pigé à quoi celà consiste, simplement quel risque j'encoure si j'utilise une variable non volatile dans une interruption ? Je l'ai fait et pas de soucis ... Et qu'en est-il de l'inverse (volatile alors qu'une non volatile ferait très bien l'affaire) ? Risque d'utiliser trop de RAM ?

Si tu modifies une variable dans un gestionnaire d'IT et que la variable n'est pas déclarée volatile, les fonctions qui utilisent cette variable risquent de ne pas voir le changement.
C'est le cas par exemple si tu fais une boucle qui exploite une variable et que celle-ci est modifiée pendant une IT.

while (toto>seuil){}

Dans l'exemple au-dessus, si toto est modifié par une IT tu risques de ne jamais sortir du while.

Si tu déclares volatile une variable lorsque ce n'est pas nécessaire tu ralentis ton programme car cette déclaration interdit les optimisations par le compilateur sur l'usage de la variable.

  1. static : la aussi j'ai compris mais je ne vois pas bien l'intérêt ! Seule la fonction qui la crée peut la modifier, mais si j'ai pas envie qu'une autre fonction ne la modifie, je n'ai qu'à simplement pas m'en servir !!

Cela permet de gérer les conflits de nom par exemple.

Mais aussi les variables définies static à l'intérieur d'une fonction retiennent leur valeur entre deux appels. Cela permet de définir des variables locales à la fonction mais qui ne sont pas perdues.

Merci ! J'avais bien trouvé ce topic mais il me manquait quelques précisions ^^