AVR GCC Problem mit Optimierung

Gast #1508380
Lesenswert?

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
Angehängte Dateien:
#1508394
Lesenswert?

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.
#1508398
Lesenswert?

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.
Gast #1508401
Lesenswert?

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.
#1508441
Lesenswert?

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.
#1508472
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren