Hallo, ich hab ein Problem mit der Code-Optimierung mit AVR Studio und dem GCC-Compiler. Sobald ich die die Optimierung einschalte werden mir diverse Variablenzuweisungen wegoptimiert. Wie z.B. die in Zeie 150. Ohne diese Zuweisungen funkioniert aber das ganze Programm nicht. Jetzt frage ich mich natürlich warum diese Zuweisungen wegoptimiert werden. Ich muss dazusagen das ich ein relativer Anfänger mit AVR und C bin. Als Ziel verwende ich einen Mega32. Danke schon mal für eure Hilfe. Gruß Tobias
:
Verschoben durch Admin
In Zeile 150 steht keine Zuweisung, sondern "if(Puffer == 1)". Und bei den Zuweisungen in der Nähe bezweifle ich, dass sie wegoptimiert werden. Werde bitte etwas konkreter. Welche Zuweisung genau? Und dann zeige bitte auch den Assemblercode, wo sie dann fehlen soll. PS: Dass sich das Programm mit Optimierung anders verhält, liegt wohl eher an fehlenden volatiles.
Auf Zeile 150 finde ich
1 | if(Puffer == 1) |
Könntest Du hinschreiben, welche Zuweisung Du meinst? Und möglichst nicht nur die Zeilennummer, denn die Codeansicht hat sowas nicht. Und die Mühe, das Ding für Dich herunterzuladen und extra in den Editor zu nehmen, spart man sich gern, so dass Du auf diesem Weg Aussicht auf weniger Antworten hast.
Wegoptimieren tut der gcc grundsätzlich nur Variablen, die nicht gebraucht werden. Da kannst du dich drauf verlassen. Mit einer Ausnahme: Variablen, die sowohl im Imterrupt und im Hauptprogramm verwendet werden. Solche müssen dann mit volatile deklariert werden.
Hab die Variablen jetzt mit volatile deklariert. Nun läufts. Sollte man also globale Variablen immer als volatile deklarieren?
Tobias schrieb: > Hab die Variablen jetzt mit volatile deklariert. Nun läufts. Sollte man > also globale Variablen immer als volatile deklarieren? Nein. Man sollte nachschauen, wozu das volatile überhaupt gut ist, und dann nur die Variablen volatile deklarieren, bei denen es nötig ist.
Tobias schrieb: > Hab die Variablen jetzt mit volatile deklariert. Nun läufts. Sollte man > also globale Variablen immer als volatile deklarieren? Nein. Du sollst diejenigen Variablen als volatile deklarieren, die das ihrem Charakter nach auch sind. Für die von Dir genannte Variable 'Zustand' (Zeile 250) gilt das nicht -- insofern stimmt entweder die Fehlerbeschreibung oder die Lösung nicht. Volatile deklariert gehören aber auf jeden Fall die Variablen, die außerhalb des Hauptprogramm-Flusses, z.B. im Interrupt, geändert werden. Dazu gehören in Deinem Programm mindestens Zufallszahl, Taster, und Zurueck.
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.