mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik For-Endlosschleife in Main funktioniert nicht


Autor: Thomas K (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Minutes muss volatile sein, sonst optimiert sie der Compiler weg.

Autor: Thomas K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das kann ja nicht sein wenn die variable aktiv verwendet wird, oder
nicht?
schließlich wird sie ja raufgezählt jede minute!

Autor: Thomas K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh, es geht jetzt wirklich.
bitte um erklärung!?

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Thomas K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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! :)

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.