Interrupt mit if-Anweisung macht was komisches

Gast #4511333
Lesenswert?
• ▲
▼
Hi Zusammen

Im Anhang findet ihr ein Programmteil, mit welchem ich ein Display 
ansteuere. Da ich diesen am erweitern bin, nutze ich eine Kontroll-LED, 
um mir die Daten anzeigen zu können. Komischerweise, und das passierte 
schon bei anderen Programmen, funktioniert dieser Programmteil nicht, 
wenn ich eine Abfrage einer Variabel mach (ist fast zu unterst im 
Programmteil):
if (STATUS00 == 0) {PORTB |= (1<<LED_rot);}
Wenn ich diese Afrage lösche bzw. eben mit // deaktiviere, zeigt mir das 
Display die gewünschten Daten an. Sobald ich aber STATUS00 oder eine 
andere Variable abfragen möchte, zeigt mir das Display einfach irgendwas 
an.
STATUS00 ist definiert als
volatile unsigned int STATUS00;
Ich kann auch einfach
if (STATUS00 == 0) {}
abfragen, damit zeigts immer noch einfach irgendwas an.

Wieso passiert sowas bei einer if-Anweisung??? Das dürfts doch nicht 
beeinflussen??? Copiler-Fehler?
Hab Atmel Studio 7.0.634
ATmega644A

Falls gewünscht kann ich auch das ganze Programm hochladen, was aber 
nicht nötig sein dürfte.

lg Sven
Angehängte Dateien:
Gast #4511362
Lesenswert?
• ▲
▼
Wenn bei der Prüfung der If-Bedingung ein IRQ auftritt, dann werden in 
der IRQ-Routine auch Statusbits geändert und die If-Bedingung nicht 
korrekt ausgeführt.

Also prüfen, ob alle Register und das Statusregister auf dem Stack 
gerettet werden und vor dem verlassen der IRQ-Routine auch zurückgelesen 
werden.

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