AVR-Programmierung mit CodeVision

Gast #117334
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

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