Hallo! Ich habe glaube ich ein großes Problem. An meinem ATMEGA8 hängt ein LCD und wird im 4-Bit-Modus angesteuert. Funktioniert auch tadellos. Ich habe mehrere Delayfunktionen mit Timern realisiert. Der 16-Bit Timer ist für die Sekunden (meiner "Uhr) und der andere für die Delays zur Ansteuerung. Ich habe die Variablen hours und minuten in denen logischerweise die Zeit drinsteht. Jetzt will ich einen Alarm realisieren der auf PORTD.7 ist und auf 0 gesetzt werden muss wenn z.B. hours und minutes auf einen vorher festgelegtem Wert sind. Wenn ich diese Abfrage in einem Timerinterrupt mache geht sie problemlos. Ich will sie aber in der For-Schleife in Main ausführen. Nur es funktioniert nicht. Nicht mal wenn ich nur minutes>=1 überprüfe. Ich bitte um eure immer sehr kompetente Hilfe! :) Danke, Thomas K
Minutes muss volatile sein, sonst optimiert sie der Compiler weg.
das kann ja nicht sein wenn die variable aktiv verwendet wird, oder nicht? schließlich wird sie ja raufgezählt jede minute!
Der Compiler sieht keine Grund warum sich die Variable minute ändern soll, da in der Schleife nix damit passiert. Also wird die ganze Schleife wegoptimiert. Mit Volataile sagt man dem Compiler, dass die Variable auch von "aussen" verändert werden kann, also kann er da nix wegoptimieren.
hmm. achso. er optimiert also in jeder funktion einzeln? dachte er sieht, dass in einer anderen funktion die variable verändert wird und optimierts nicht weg. danke, jedenfalls! :)
In C gibt es sowas wie einen "Interrupt" nicht. Da deine Interruptroutine ja nicht regulär innerhalb der Schleife aufgerufen wird, wird "Minuten" auch aus Compilersicht nie geändert. Dass der Interrupt aufgerufen wird ist ja eine reine Hardwaresache, das geht aus der Software ja nicht hervor.
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.