Forum: Compiler & IDEs Problem mit Interrupts, die glob. int´s veraendern


von Friedemann Schlosser (Gast)


Lesenswert?

Mir fiel folgendes Problem auf:

ich definiere eine globale 16bit-Variable per

static volatile unsigned char xy;

Nun wird im z.B. im Timer0-Interrupt eine Messung ausgefuehrt, deren 
Ergebnis in xy landet. Das Hauptprogramm soll diese nun auswerten und 
holt sich das Ergebnis per

wert = xy;

dies wird uebersetzt in

lds r24, xy
lds r25, (xy)+1

Was passiert nun, falls der Interrupt genau zwischen diesen beiden 
Befehlen auftritt und xy veraendert, bekommt das Hauptprogramm dann den 
halben alten und den halben neuen Wert?

Was waere ein moeglicher Workaround, Interrupt waehrend des Werte-holens 
abschalten oder lock bits?

Gruss!

von Friedemann Schlosser (Gast)


Lesenswert?

Ok, Problem wurde schon beantwortet:

Mit cli und sei die Problemstelle einkapseln.

von Joerg Wunsch (Gast)


Lesenswert?

Genau, nicht in zwei verschiedenen Foren zugleich posten. ;-)

von Friedemann Schlosser (Gast)


Lesenswert?

Hatte nur befuerchtet, mein Englisch versteht keiner ;-)))

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.