Pages: [1]   Go Down
Author Topic: Variable volatile et static  (Read 1539 times)
0 Members and 1 Guest are viewing this topic.
Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3836
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !!
Logged


France
Offline Offline
Faraday Member
**
Karma: 40
Posts: 3636
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il y avait eu une discution sur le sujet là: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1284028360/15
Quote
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.
Code:
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.


Quote
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 !!
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.
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3836
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged


Pages: [1]   Go Up
Jump to: