Forum: Mikrocontroller und Digitale Elektronik AVR-Programmierung mit CodeVision


von Gerhard Greber (Gast)


Lesenswert?

Hallo,
hab folgendes Problem: Eine 16-Bit Variable wird im Timer-Interrupt
dekrementiert und in main() auf Null abgefragt. Gelegentlich passiert
es nun, dass die Null-Bedingung bereits beim Wert 0x00ff erfüllt ist.
Schaut man sich die LST-File an, sieht man, dass der Zugriff auf die
Variable mit 2 Assemblerbefehle efolgt, zwischen denen natürlich ein
Interrupt dazwischen funken kann.
Erfolgt in main() genau zwischen den 2 Ladebefehlen ein Interrupt,
indem nun der Zählerwert z.B. von 0x0100 auf 0x00ff dekrementiert wird,
steht letztendlich eine 0x0000 in der Variable (niederwertiges Byte wird
zuerst geladen).
Durch 2-maliges Abfragen der Variable bzw. Sperren des Interrupts
hab ich derzeit das Problem gelöst. Gibt es dafür eine saubere
Lösung ?
Gruss Gerhard

von Dirk B (Gast)


Lesenswert?

Während dem Zugriff auf kritische Variablen würde ich die Interrupts
deaktivieren.

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.