www.mikrocontroller.net

Forum: Compiler & IDEs AVR GCC Problem mit Optimierung


Autor: Tobias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf Zeile 150 finde ich
  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.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, Tippfehler. Ich meite Zeile 250.

Autor: Tobias (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.