mikrocontroller.net

Forum: Compiler & IDEs volatile


Autor: Milchknilch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau passiert wenn ich eine variable mit volatile ausserhalb einer 
funktion definiere?

Konkret:

volatile unsigned char lcd_menue_control;  <--Steht  ausserhalb von 
main()

lcd_menue_control wird inerhalb eines Interrupts verändert. Danach kann 
ich in Main die Veränderung feststellen, aber in einer von main() 
aufgerufenen Funktion ist die Änderung wieder weg???

heisst volatile nicht soviel wie global?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

volatile bedeutet das compiler nicht an dieser Variable herumoptimieren 
soll.
Der Compiler könnte z.B. bei

char i=4;
while(i);

die while-Schleife wegoptimieren. Deklarierst du die Variable i aber 
volatile sagst du damit dem Compiler die Variable kann sich aus aus ihm 
nicht ersichtlichen Gründen (INT, Timer usw.) ändern und dann verzichtet 
er auf obige optimierungen. Ohne deinen Sourcecode zu kennen kann ich 
dir aber auch nicht genauer helfen.

Matthias

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.