Forum: Mikrocontroller und Digitale Elektronik Was bedeutet VOLATILE


von Mario (Gast)


Lesenswert?

Hallo Leute!

Ich beschäftige mich gerade mit C für µCer.
Ich habe mir ein Programm angesehen, welches Profis geschrieben haben.

Dort werden die globalen Variablen folgendermaßen definiert.

volatile int measurement_interval = 0;      /* measurement interval
over      */
volatile int mdisplay = 0;                  /* measurement display
requested  */
volatile int startflag = 0;

Was bedeutet dieses "volatile"?
Ich kenne nur static und extern.

Danke für eure Antwort.

Tschüss

Mario

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Volatile heißt "flüchtig" und ist eine Anweisung an den Compiler,
keine Annahmen über den Inhalt der Variable zu treffen, weil sich der
quasi "unterm Arsch des Compilers" ändern kann.

Daher muss jeder Lesezugriff auf die Variable auch wirklich ein
Lesezugriff sein, ein -optimierendes- Zwischenspeichern in Registern
o.ä. ist damit explizit untersagt.

Ein Anwendungsfall sind beispielsweise Variablen, die in
Interruptroutinen verändert werden können.

von Bjoern M. (salival)


Lesenswert?

Guck mal oben rechts in der Forenuebersicht, da ist ein Eingabefeld "Im
Betreff suchen". Dort tippst du "volatile" ein und drueckst <enter>.
Der Rest ergibt sich dann...

gruss, bjoern.

von ejd (Gast)


Lesenswert?

volatile sind die Variablen, die nicht nur durch das aktuelle Programm,
sondern auch durch andere Programme geändert werden. Wird des Öfteren
als Kunstgriff benutzt, um den Compiler die genannten Varablen nicht
wegoptimieren zu lassen.

mfG,
ejd

von Wolfram (Gast)


Lesenswert?

Im übrigen ist volatile nicht uC spezifisch sondern allgemeiner C
Syntax, der auch Verwendung bei der Programmierung auf dem PC für
Threads oder Treiber findet. Leider bist du da nicht der einzige, der
volatile nicht kennt.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich für mich glaube aber, dass volatile so heißt, da der RAM Speicher ja
auch ein volatiler Speicher ist. Also ist das die Anweisung an den
Compiler diese Variable im volatilen Speicher der maschine/des
Mikroprozessors abzulegen. (Und das ist der RAM)..

(Ich denke mal, die haben da einfach nur nach einem passenden Begriff
gesucht, der möglichst viel mit der Funktion zu tun haben soll, oder?)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nein, das ist zwar schön, daß Du das glaubst, aber das würde im
Umkehrschluss implizieren, daß beispielsweise "static" irgendwo
anders als im RAM abgelegt werden müsste ...
Diese "Eselsbrücke" ist daher hochgradig einsturzgefährdet.

Als C entwickelt wurde, war von Microcontrollern oder auch nur
Microcomputern noch lange nicht die Rede.

von Simon K. (simon) Benutzerseite


Lesenswert?

Hihi, in Ordnung :-)

von Marco S. (masterof)


Lesenswert?

abo

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.