Forum: Compiler & IDEs AVR GCC Problem mit Optimierung


von Tobias (Gast)


Angehängte Dateien:

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

: Verschoben durch Admin
von Stefan E. (sternst)


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.

von Hc Z. (mizch)


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.

von Klaus (Gast)


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.

von Tobias (Gast)


Lesenswert?

Sorry, Tippfehler. Ich meite Zeile 250.

von Tobias (Gast)


Lesenswert?

Hab die Variablen jetzt mit volatile deklariert. Nun läufts. Sollte man 
also globale Variablen immer als volatile deklarieren?

von Stefan E. (sternst)


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.

von Hc Z. (mizch)


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.

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
Noch kein Account? Hier anmelden.