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
> Wieso passiert sowas bei einer if-Anweisung??? Das dürfts doch nicht > beeinflussen??? Copiler-Fehler? Das muss ein Compilerfehler sein!!!!!
Ü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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.