Volatile ??? [Forums - Astuces]
Volatile ??? [Forums - Astuces]
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 

Parcourir ce sujet :   1 Utilisateur(s) anonymes





Volatile ???
Modérateur
Inscrit:
24/09/2005 13:30
De 04110 - VACHERES- FRANCE
Messages: 1497
Hors Ligne
Volatile, vous avez dit volatile ? Une poule ? Un pigeon ?

Non, non, vous n'y êtes pas, c'est un aussi mot clé à ajouter devant la déclaration d'une variable pour indiquer au compilateur de ne pas chercher à l'optimiser lors de la compilation du fichier. En effet, telle que vous en avez besoin, elle peut être modifiée en dehors du "circuit linéaire" que sont le main() et les appels des fonctions, sous interruption.

Exemple typique :
Un timer qui incrémente une variable toutes les secondes sous interruption.
Si dans le code du main() vous avez :

unsigned char Pause ;
  ...
  
Pause ;
  while (
Pause 10) ;

Le compilateur va vous dire : "mais ce n'est pas possible, la variable Pause ne pourra jamais être égal à 10, on vient de la forcer à 0 juste au dessus".


Autre exemple :

unsigned char Pause ;
  ...
  
Pause ;
  for (;;)
  {
    if (
Pause == 5)
    {
      ...
    }
  }


Là, ça sera un warning + non compilation de ce code. En effet, en forçant la variable Pause à 0, pour lui, il sera tout bonnement impossible qu'elle puisse être égale à 5 juste en dessous...


Si vous lui déclarez cette même variable sous ce format là :
volatile unsigned char Pause ;
...

plus de soucis, il ne cherchera pas à optimiser et gardera vos écritures telles qu'elles.

Yvan
PS : attention à la grippe aviaire

Posté le : 20/04/2013 01:00
Le houblon, c'est bon pour la récupération.
Transférer la contribution vers d'autres applications Transférer


Re: Volatile ???
Pilier de la communauté
Inscrit:
27/09/2005 18:26
Messages: 794
Hors Ligne
Un exemple de plus encore plus pertinent : tous les registres du microcontroleur sont déclarés comme volatile.

Ainsi, le code suivant :

PTAD_PTAD0 0;
PTAD_PTAD0 1;
PTAD_PTAD0 0;
PTAD_PTAD0 1;


provoque effectivement le basculement de la pin 0 du port A, car le compilateur n'a pas cherché à optimiser ces lignes

Joël

Posté le : 20/04/2013 12:25
En Savoie, on a pas de pétrole, mais on a des Diots !
Transférer la contribution vers d'autres applications Transférer


Re: Volatile ???
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1930
Hors Ligne
A parce que si ce n’était pas en volatile le compilo aurait juste fait un PTAD_PTAD0 = 1; et aurait été super fier de lui en ignorant les lignes d'avant ?

A ben je me coucherai moins idiot encore cette fois...

Merci le chroniqueur !

Posté le : 20/04/2013 13:58
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Volatile ???
Pilier de la communauté
Inscrit:
27/09/2005 18:26
Messages: 794
Hors Ligne
Exactement Charly !

Posté le : 20/04/2013 23:18
En Savoie, on a pas de pétrole, mais on a des Diots !
Transférer la contribution vers d'autres applications Transférer



 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

Volatile ??? [Forums - Astuces]