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 ?
Das hier: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Datenaustausch_mit_Interrupt-Routinen mal durchlesen. Variablen, die im Interrupt UND im Hauptprogramm verwendet werden, als "volatile" deklarieren.
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....
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.
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.