AVR GCC Problem mit Optimierung

Gast #1508380
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:
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.
Gast
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.
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.