Forum: Compiler & IDEs Benötige ich volatile


von Martin (Gast)


Lesenswert?

Guten morgen,

ich habe eine ISR Timer OVF auf meinem AVR.
Dort wird eine Variable zeit bei jedem overflow erhöht. (zeit++)

Im Hauptprogramm soll zeit mit einem Grenzwert verglichen werden und bei 
Übereinstimmung bzw. Überschreiten der Zeit etwas getan werden (if 
zeit>=GRENZE). D.h. zeit wird im Hauptprogramm nur gelesen, aber nicht 
verändert. Muss ich zeit dann als volatile deklarieren oder nicht?

Danke.

von Malte S. (maltest)


Lesenswert?

Ja, sonst weiß das Hauptprogramm ja nicht, dass sich ihr Wert 
"unvorhersehbar" geändert haben könnte und es läuft munter vor sich hin.

von Matthias L. (Gast)


Lesenswert?

ja

von Martin (Gast)


Lesenswert?

Ok, danke.

Nur zum Verständnis noch etwas hinterher. Wenn zeit nur in der ISR 
erhöht wird und der Vergleich nicht mehr im Hauptprogramm stattfindet, 
sondern in der ISR selbst, dann würde ich es nicht benötigen, richtig?

von Matthias L. (Gast)


Lesenswert?

Ja

von Martin (Gast)


Lesenswert?

Danke an alle "Helfer"

von Falk B. (falk)


Lesenswert?

Siehe Interrupt

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Zudem ist darauf zu achten, dass das Ändern von zeit atomar 
geschieht.

von Malte S. (maltest)


Lesenswert?

Johann L. schrieb:
> Zudem ist darauf zu achten, dass das Ändern von zeit atomar
> geschieht.

Grundsätzlich ist darauf zu achten, im genannten Beispiel wäre das 
vollkommen unnötig.

von Detlev T. (detlevt)


Lesenswert?

Malte S. schrieb:
> Grundsätzlich ist darauf zu achten, im genannten Beispiel wäre das
> vollkommen unnötig.

Wieso? Steht hier irgendwo, dass zeit nur ein Byte belegt?

von Malte S. (maltest)


Lesenswert?

Natürlich tut es das. Es ist ja ein 8-Bitter.
Nee, in ehrlich: ich ziehe meine in diesem Zusammenhang leichtsinnige 
Annahme zurück und behaupte das Gegenteil bzw. betone, dass "darauf 
achten" weit wichtiger ist, als da rübergekommen sein mag!

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.