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.