Forum: Mikrocontroller und Digitale Elektronik Assembler-Frage


von Jan K. (jeangonzales)


Lesenswert?

Hallo,

ich habe folgenden Ausschnitt eines C-Programms, das an einer Stelle 
synchron auf das Setzen eines Bits warten muss (wird über einen 
Interrupt gesetzt - und ja, ich bin sicherm dass der Interrupt ausgelöst 
wuird und das bit auch wirklich gesetzt wird!):
1
uint8_t miTWIMode;
2
3
...
4
5
while (!(miTWIMode == TWI_MODE_IDLE))
6
  ;

TWI_MODE_IDLE = 0. Ich will also so lange warten, bis die Variable 
miTWIMode den Wert "0" annimmt.

Das Problem ist nun, dass obwohl miTWIMode über einen Interrupt auf 0 
gesetzt wird, diese Schleife niemals verlassen wird.

Der erzeugte Assemblercode sieht so aus:
1
lds r24,miTWIMode
2
.L94
3
tst r24
4
brne .L94

Das kann doch nicht funktionieren - der Wert von miTWIMode wird doch nur 
einmal vor der Schleife eingelesen, oder?

Bin ich total bescheuert, oder was mache ich falsch?

Wenn ich in der Schleife irgend was kompilizierteres mache (z.B. ein 
Zeichen auf der UART ausgeben), dann klappts wunderbar.

von Jan K. (jeangonzales)


Lesenswert?

Alles klar,  Problem gelöst - jetzt hab ich endlich mal das 
Schlüsselwort "volatile" verwenden können ;)

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.