www.mikrocontroller.net

Forum: Compiler & IDEs Vor Umstellung auf Squeeze


Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gemeinschaft,

da ich gerade (vor der Umstellung auf Squeeze) die für mich kritischen 
Anwendungen überprüfe, hätte ich da gerne mal eine Frage.

Gibt es bereits Erkenntnisse zu der avr-gcc Version 4.3.5?
Die alte in Lenny war 4.3.2. (und arbeitete hervorragend)

avr-objdump und avr-objcopy:
OldLenny:2.18.0  Squeeze:2.20.1

Gleiche Frage auch für den avrdude:
OldLenny:5.5  Squeeze:5.10


Wenn schon jemand Erfahrung (auch während der Testing Phase) gemacht 
hat, würde ich mich freuen.

Besten Dank vorab

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Norbert schrieb:
> Gibt es bereits Erkenntnisse zu der avr-gcc Version 4.3.5?
> Die alte in Lenny war 4.3.2. (und arbeitete hervorragend)

Die 4.3-Serie für den AVR hat eigentlich keinen guten Ruf, weil sie in
vielen Fällen deutlich längeren und langsameren Code generiert als die
4.2-Serie. In 4.4 und 4.5 ist das teilweise wieder verbessert worden.
Ich glaube aber nicht, dass du dir Nachteile einhandelst, wenn du 4.3.5
anstelle von 4.3.2 nimmst

Ich benutze abere auch heute noch primär den 4.2.4 (sofern der verwende-
te AVR-Typ unterstützt wird) und lasse gelegentlich mal einen 4.4.x oder
4.5.x über den Code laufen, um zu sehen, was sich getan hat. In manchen
Punkten schneiden die neuen Versionen signifikant besser ab, aber leider
eben nicht in allen.

> avr-objdump und avr-objcopy:
> OldLenny:2.18.0  Squeeze:2.20.1
>
> Gleiche Frage auch für den avrdude:
> OldLenny:5.5  Squeeze:5.10

Mit den Binutils hatte ich noch nie nennenswerte Probleme, so dass ich
dort immer nur eine einzige (relativ aktuelle) Version installiert habe.
Gleiches gilt für den Avrdude und auch die AVR-Libc.

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:

> Die 4.3-Serie für den AVR hat eigentlich keinen guten Ruf, weil sie in
> vielen Fällen deutlich längeren und langsameren Code generiert als die
> 4.2-Serie. In 4.4 und 4.5 ist das teilweise wieder verbessert worden.
> Ich glaube aber nicht, dass du dir Nachteile einhandelst, wenn du 4.3.5
> anstelle von 4.3.2 nimmst

Ahh, gute Info. Hatte bis jetzt noch keine akuten Platzprobleme, aber 
werde die Info bzgl. 4.2 / 4.4 im Hinterkopf behalten.

Über Geschwindigkeitsprobleme konnte ich mich aber noch nicht 
beschweren, habe zZ einen:
Software-USB plus
115.200bps UART plus
free-running 8Kanal ADC (IRQ alle 111µs) plus
'endlose' float Operationen plus
SPI EEPROM read/write plus
SPI zu zweitem AVR
bei maximaler Belastung absolut stabil laufen :-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Die 4.3-Serie für den AVR hat eigentlich keinen guten Ruf, weil sie in
> vielen Fällen deutlich längeren und langsameren Code generiert als die
> 4.2-Serie.

Das stimmt so nicht.
Es sind nur einige default-Schalter ungünstig eingestellt.
Z.B. werden kleine Funktion geinlined unabhängig von ihrer Größe und 
Aufrufzahl.
Mit "-fno-inline-small-functions" erreicht man ne deutliche 
Verbesserung.

Gegenüber den Vorgängern ist auch der Schalter "--combine 
-fwhole-program" möglich, der nochmal kräftig eindampft.
Er entdeckt auch viele volatile-Sünden, d.h. wenn der Code danach immer 
noch läuft, hat man es richtig gemacht.
Er entfernt auch alle (scheinbar) unbenutzten Funktionen, d.h. 
init-Sektionen und z.B. Signaturen im Flash müssen als used deklariert 
werden.

Die Nachfolger kann ich nicht prüfen, da ich unter Windows arbeite 
(WINAVR).
Bei den Nachfolgern ist aber ein Bug in der "Delay.h".


Peter

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
>> Die 4.3-Serie für den AVR hat eigentlich keinen guten Ruf, weil sie in
>> vielen Fällen deutlich längeren und langsameren Code generiert als die
>> 4.2-Serie.
>
> Das stimmt so nicht.
> Es sind nur einige default-Schalter ungünstig eingestellt.

Die Dinge, die durch Kommandozeilenoptionen beseitigt werden können,
stören mich ja nicht. Wenn ich sehe, dass da zu viele Funktionen
geinlinet werden, dann finde ich auch die zugehörige Option. Oft ist es
aber so, dass arithmetische Ausdrücken manchmal in 16 Bit gerechnet
werden, obwohl 8 Bit erkennbar ausreichend wären. Oft werden auch
unnötige Registertransfers gemacht. Dafür habe ich keine Optionen
gefunden, und die 4.2-Version ist in dieser Hinsicht zwar nicht perfekt,
aber doch deutlich besser.

Und warst nicht du einer von denjenigen, die damals bei Erscheinen der
4.3er wie die Rohrspatzen über die Verschlimmbesserungen gescholten
haben? ;-)  (vielleicht verwechsle ich dich aber auch mit jemandem)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Und warst nicht du einer von denjenigen, die damals bei Erscheinen der
> 4.3er wie die Rohrspatzen über die Verschlimmbesserungen gescholten
> haben? ;-)

Das muß 2008 gewesen sein, da gab es in kurzer Folge mehrere Versionen 
des WINAVR.
Die letzte von 2010 scheint aber ganz o.k. zu sein, auch bei der 
Codegröße.

Ich kann mich noch erinnern, ältere AVR-GCC hatten char-Returnwerte 
immer auf 16Bit aufgebläht.
Tote RETs gabs auch (2 RET hintereinander).
Und Switch-Anweisungen waren schlecht implementiert, da waren 
unleserliche if-else-Monster deutlich kürzer. Mit dem 2010-er WINAVR ist 
es genau umgekehrt.


Peter

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.