Hallo zusammen,
ich habe folgendes Problem..
In einer Funktion sende ich ein Byte über I2C an einen Slave
Funktion()
{
...
bTransferComplete = FALSE;
I2CSendByte(...);
while (bTransferComplete == FALSE);
...
}
Das Flag wird in einer Interrupt-Funktion, wenn das Byte rausgegangen
ist auf TRUE gesetzt --> ist auch auf 1.
Das Programm bleibt aber trotzdem in der while-schleife hängen, obwohl
das bTransferComplete Flag auf TRUE ist.
Ich denke durch die Compliler - Optimierung wird nur zu Begin der
while-Anweisung der Inhalt der Addresse bTransferComplete in das
Register R0 geladen, dann nicht mehr. Also vergleicht er immer den
Inhalt des Register R0 mit 0 und dies verändert sich ja nicht.
Wie kann ich das umgehen? Wie ist hier eine saubere Vorgehensweise?
Bin über jeden Vorschlag dankbar!
Danke im voraus!
Gruß
Ehren schrieb: > Wie kann ich das umgehen? Wie ist hier eine saubere Vorgehensweise? bTransferComplete als Volatile deklarieren
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.