www.mikrocontroller.net

Forum: Compiler & IDEs Problem mit eigentlich einfachem C-Programm


Autor: Hans Gräber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich Programmiere nur gelegentlich und bin nun ein Problem gestossen.
Für mein Verständnis soll das Programm eigentlich laufen, aber leider 
macht es das nicht so wie ich das will ;-)
Ich habe gestern 12 Stunden dran gesessen um das Problem zu lösen bin 
aber nicht drauf gekommen.

Programmiert wird mit dem neusten AVR-Studio und WIN-AVR. Der Controller 
ist ein tiny13.
Folgendes habe ich vor. Ich starte einen Timer und wenn dieser überläuft 
soll im Overflow-Interrupt eine Veriable hochgezählt werden. In Main 
habe ich eine While Endlos Schleife die die Variable auswertet und 
entsprechend drauf reagiert. Das Problem ist bei mir das in der 
Main-Schleife die Variable immer Null ist und dort daher nicht passiert. 
Hatte zum Test dort auch ein tmp++ eingebaut aber auch bei dem tut sich 
nichts :-(

Wer kann mir helfen ?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Variable muss als volatile deklariert werden.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier:
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
mal durchlesen.

Variablen, die im Interrupt UND im Hauptprogramm verwendet werden, als 
"volatile" deklarieren.

Autor: BeGe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nehme an der C-Code sieht in etwa so aus:

char temp = 0;

while (temp == 0);


Du solltest die Variable temp als "volatile" deklarieren sonst optimiert 
der Compiler die Überprüfung raus. Der Compiler geht davon aus, daß sich 
der Wert nicht mehr ändern kann.

Probier doch mal das:

volatile char temp = 0;
while (temp == 0);

Der Compiler weiß nun, daß sich temp zu jeder Zeit ändern kann und 
optimiert den Vergleich nicht mehr heraus....

Autor: BeGe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... Verdammt da waren aber einige schneller -;)

Autor: Hans Gräber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für die Hilfe, manchmal sieht man den Wald vor lauter Bäumen 
nicht.
Wegen einem volatile hab ich den ganzen Tag verplempert ... Sowas 
passiert mir hoffentlich nicht nochmal.

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.