Forum: Mikrocontroller und Digitale Elektronik Interrupt mit if-Anweisung macht was komisches


von Sven Puga (Gast)


Angehängte Dateien:

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

von Bernd (Gast)


Lesenswert?

> Wieso passiert sowas bei einer if-Anweisung??? Das dürfts doch nicht
> beeinflussen??? Copiler-Fehler?

Das muss ein Compilerfehler sein!!!!!

von Georg G. (df2au)


Lesenswert?

Überleg dir mal, was mit dem letzten "else" in deinem Code passiert, 
wenn du noch ein "if" darüber hast. Worauf bezieht es sich dann?

von Joe (Gast)


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.

von Sven Puga (Gast)


Lesenswert?

Verd..., Georg hat natürlich recht -.-
If
else if
else if
...
Dann hab ich das if eingefügt
else

Alles klaro, danke vielmals.

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.