www.mikrocontroller.net

Forum: Compiler & IDEs Allg. Frage zum Optimierer


Autor: Sash (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab eine Frage zum Optimierer for ACR-GCC und Atmel programmierung:

Wenn ich ein Programm habe das ohne Optimierer in den Flash-Speicher 
passt und auch nicht auf Laufzeit optimiert sein muss, ist es dann 
trotzdem ratsam den Optimierer einzuschalten oder eher nicht ?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist dann weder ratsam, zu optimieren, noch nicht zu optimieren.
Es ist schlichtweg egal.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist trotzdem ratsam, denn wenn man ein Programm nie mit Optimizer 
probiert hat, dann ist die Überraschung gross, wenn man nach 2 Jahren 
und der soundsovielsten Erweiterung die nun endlich nicht mehr 
unoptimiert reinpasst nochmal beim Debugging von vorne anfangen muss um 
die ganzen fehlenden volatiles zu finden.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer volatiles weglässt...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...findet sich dann hier im Forum wieder. Massenhaft. Schlimmer als die 
"defekten" Pins vom Port C des Mega16/32.

Aber auch an anderen Stellen kann man Schiffbruch erleiden. 
Beispielsweise weil die "__delay_xx" Schleifchen erst mit Optimierung 
ihre wahre Kunst entfalten.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du z.B. per JTAG debuggst (lol.. denglisch) dann ist es manchmal 
echt merkwürdig, wenn der Optimierer an ist. Dann kommt es zu 
anscheinend unsinnigen Sprüngen, oder Variablen, die du z.B. zum 
debuggen eingefügt hast, fehlen einfach...

Autor: Sash (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antworten ! Ich werde das Programm mit und ohne 
Optimierer in allen Funktionen testen, dann bin ich für zukünftige 
Erweiterungen flexibel.

Das sich ein optimiertes Programm nicht so schön debuggen lässt ist mir 
auch mit ISP aufgefallen, nicht nur mit JTAG. Manche Breakpoints lassen 
sich nicht setzen z.B. .... liegt vielleicht daran, dass der Optimierer 
diese Stellen optimiert hat and deshalb in der betroffenen Zeile kein 
Breakpoint mehr stehen kann ?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sash schrieb:
> Ich werde das Programm mit und ohne
> Optimierer in allen Funktionen testen,

Das ist sicher eine gute Idee.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sash schrieb:

> Wenn ich ein Programm habe das ohne Optimierer in den Flash-Speicher
> passt und auch nicht auf Laufzeit optimiert sein muss, ist es dann
> trotzdem ratsam den Optimierer einzuschalten oder eher nicht ?

Es muss auch sichergestellt sein, daß das RAM ausreicht.

Ohne Optimierung legt gcc lokale Variablen auf dem Stapel ab, was flott 
zu merklichem (dynamischem) RAM-Verbrauch führen kann. Weil der 
Verbrauch dynamisch ist -- also erst zur Laufzeit entsteht -- ist er nur 
schwer statisch schätzbar und Tools wie avr-size helfen überhaupt nicht 
dabei.

Man sollte also eine ungefähre Vorstellung davon haben, wie viel RAM 
maximal belegt wird -- das gilt natürlich auch dann, wenn man optimieren 
lässt.

gcc kennt die Optimierungsstufe -O1, die optimiert und dabei halbwegs 
debugbare Programme erzeugt.

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Häufig kann man den Optimizer zum Debugging mittels Inline-Assembler 
auch gezielt an einzelnen Stellen am Optimieren hindern.

Beispiel:
i += 20;
asm("" : "=m" (i) : "m" (i));
i += 30;

Der Inline-Assembler verhindert, dass der Compiler die beiden Additionen 
zusammenfassen kann, da die Variable ja im Assemblercode verändert 
werden könnte. Ausserdem sorgt die Zuweisung der Variablen an 
Memory-Operanden dafür, dass der Compiler die Variable tatsächlich im 
Speicher anlegen muss.

Sehr nützlich, wenn man aufgrund der Rahmenbedingungen nicht komplett 
auf die Compileroptimierung verzichten kann.

Andreas

Autor: Link zu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> ...findet sich dann hier im Forum wieder. Massenhaft. Schlimmer als die
> "defekten" Pins vom Port C des Mega16/32.
Aus Neugier:
Was meinst du damit?
Hat das was mit JTAG zutun?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Link zu schrieb:
> A. K. schrieb:
>> ...findet sich dann hier im Forum wieder. Massenhaft. Schlimmer als die
>> "defekten" Pins vom Port C des Mega16/32.
> Aus Neugier:
> Was meinst du damit?
> Hat das was mit JTAG zutun?

Standardfrage:
Hilfe, mein <Gerät hier einsetzen, meistens ein LCD> funktioniert nicht.
Ich habe es am Port C angeschlossen.

Standardantwort (noch ehe der Frager den Code präsentiert):
JTAG am Port C abschalten

Trefferquote, das man richtig liegt: >90%

Autor: Link zu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Link zu schrieb:
>> A. K. schrieb:
>>> ...findet sich dann hier im Forum wieder. Massenhaft. Schlimmer als die
>>> "defekten" Pins vom Port C des Mega16/32.
>> Aus Neugier:
>> Was meinst du damit?
>> Hat das was mit JTAG zutun?
> Standardfrage:
> Hilfe, mein <Gerät hier einsetzen, meistens ein LCD> funktioniert nicht.
> Ich habe es am Port C angeschlossen.
> Standardantwort (noch ehe der Frager den Code präsentiert):
> JTAG am Port C abschalten
> Trefferquote, das man richtig liegt: >90%
Ach so, danke.
Irgendetwas in der Richtung habe ich erwartet.

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.