www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Was bedeutet VOLATILE


Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ejd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hihi, in Ordnung :-)

Autor: Marco S. (masterof)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abo

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.