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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.