IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Que veut dire "volatile" devant une variable ?


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut Que veut dire "volatile" devant une variable ?
    je développe en C sur un PIC16F877 (microcontroleur microchip) j'ai trouvé un exemple d'utilisation du Convertisseur Analogique Numérique qui fonctionne très bien, en tout cas qui se compile très bien (j'ai pas encore eu le temps de tester le code)

    Dans une Procedure, il déclare une variable avec le terme "volatile" devant le type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    unsigned int ReadADC(unsigned char ADC_Channel){
     
    	volatile unsigned int ADC_VALUE;
    .......
    }
    A quoi sert ce prefixe ?

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    Il indique au compilo de ne pas optimiser les acces a cette variable, et en particulier de considérer que sa valeur peut-etre modifiée autrement que par l'execution en cours (autre thread, interuption ou signal et que sais-je encore...)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut
    Coucou,

    En fait, le compilateur réordonne les instructions.
    Quand il ne voit pas de lien direct entre elles, il arrive qu'il les execute dans un ordre different dans un soucis d'optimisation.

    Or si ta variable peut etre modifie par une execution en parallele (ou autre), il se peut que l'optimisation du compilateur provoque des changements...

    volatile permet d'eviter que le compilateur touche a ta variable.

    J'espere ne pas dire de betise...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    he bien comme ça c'est clair !
    merci à vous deux

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Points : 90
    Points
    90
    Par défaut
    Même si tu as marqué résolu je dois quand même te préciser que volatile ne te protège pas que lorsque tu optimises ton code et que son usage est requis même en mode "non-optimisé" !
    Les compilateurs mettent généralement les variables dans des registres pour accès durant l'éxécution d'une routine (optimisé ou non), et définir ta variable comme volatile te garantie que sa valeur sera toujours relue en mémoire à chaque accès et non stockée dans un registre temporaire, ce qui ralentit l'éxécution de ton code mais te protège.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Que veut dire une class loaded?
    Par khaigo dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 09/10/2010, 07h31
  2. Que veut dire les + dans une table?
    Par La Zélie dans le forum Modélisation
    Réponses: 2
    Dernier message: 01/02/2008, 15h06
  3. Que veut dire le "T" devant un nom de classe?
    Par Jhulk dans le forum Delphi
    Réponses: 5
    Dernier message: 08/06/2006, 08h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo