Assembler-Frage

OP #481048
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren