Hallo Leute,
ich bastle grad an ner Heizungsüberwachung und hab da eine Funktion drin die die vorige Temperatur prevTemp mit der momentanen Temperatur vergleicht und bei einer Änderung einen grünen oder roten Pfeil an den Bildschirm klatscht und da würde sich "volatile prevTemp" doch anbieten .
it directs the compiler to load the variable from RAM and not from a storage register
Laut Arduino Referenz ist volatile nur für interrupts. Ist es sinnvoll volatile auch für normale funktionen zu nutzen oder soll man das lassen?
void drawTemp(int _oben, int _mitte, int _unten, long _unix ) {
volatile int prevTempOben;
drawArrow(_oben, prevTempOben);
tft.setCursor(50, pY + 10);
tft.println(_oben);
prevTempOben= _oben;
......
volatile sagt für den Compiler, dass sich der Wert der Variable unabhängig vom Programm ändern kann. Das kann entweder von einem einem anderen Prozess aus geschehe oder durch einen Interrupt - mehr Möglichkeiten gibt's hier nicht. Aber wenn nichts anderes den Wert der Variable ändern kann, dann ist volatile nicht förderlich.
Der Wert von prevTempOben muss ja erhalten bleiben. Es gibt ja keine andere möglichkeit variablen in Funktionen zu definieren ohne sie bei jedem Durchlauf wieder zu überschreiben,wie ich es also verstehe, ist es besser "int prevTempOben" global zu definieren.
Ich dachte mir einfach, es ist schöner wenn alle deklarationen in der Funktion beieinander stehen.
Wie aber Serenifly sagt,schaden wird es nicht also probier ich mal rum...
Progammieren ist nicht in allen Punkten demokratisch.
z.B. hier zählt keine Meinung.
Es ist einfach nur unsinnig.
Vermutlich solltest du die Bedeutung von volatile nochmal nachlesen.
Ich kann nur vermuten, dass du stattdessen eine lokale statische Variable verwenden wolltest.
Aber selbst dann, gibt es vermutlich "schönere" Möglichkeiten.
Andonoc:
Es gibt ja keine andere möglichkeit variablen in Funktionen zu definieren ohne sie bei jedem Durchlauf wieder zu überschreiben
1.) Man kann lokale Variablen als static deklarieren. Dann behalten sie ihren Wert
2.) Man kann Variablen als Referenz übergeben damit Änderungen außerhalb sichtbar sind
Wenn dass dein Problem ist sehe ich aber nicht wie du da auf volatile gekommen bist. Das ist etwas völlig anderes
Eventuell einfach mal übersetzen : Volatile heißt flüchtig.
Es sagt dem Compiler das die Variable sich ändern obwohl er das nicht sieht.
Solche Variablen, wo der Compiler nicht sehen kann das sie sich ändern (z.b. im Interrupt)
würde er ohne das Keyword volatile komplett wegoptimieren und dann wundert man sich warum
der Code nicht läuft.