mikrocontroller.net

Forum: Compiler & IDEs Codegröße WinAVR vs. AVR Studio (mit gcc)


Autor: Tommy M. (muello)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe bisher kleiner Projekte mit dem WinAVR (mit dem Notepad und 
angepasstem Makefile) programmiert. Aus Neugierde habe ich ein bereits 
getesteten Quellcode direkt in ein GCC-Projekt kopiert und compiliert. 
Wie zu erwarten, gabs keine Probleme.

Beim Vergleich der Hex-Files ist mir aufgefallen, dass das 
WinAVR-Hex-File nur ca. halb zu groß (5,47kB) ist, wie das GCC-AVR-File 
(11,7kB). Ich habe unter AVR-Studio die gleiche Optimierung (-s) 
eingestellt und habe keinen richtigen Ansatz, welche Optionen ich noch 
anpassen könnte/sollte.

Hat jemand eine Idee?

Grüße
Tommy

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tommy Müller wrote:

> Beim Vergleich der Hex-Files ist mir aufgefallen, dass das
> WinAVR-Hex-File nur ca. halb zu groß (5,47kB) ist, wie das
> GCC-AVR-File (11,7kB).

Was ein Widerspruch in sich ist: beides sind vom AVR-GCC erzeugte
Files (und zwar sogar von exakt dem gleichen Compiler -- AVR Studio
benutzt den von WinAVR installierten).

> Ich habe unter AVR-Studio die gleiche Optimierung (-s) eingestellt
> und habe keinen richtigen Ansatz, welche Optionen ich noch anpassen
> könnte/sollte.

Naja, erst einmal ist die Größe des Hexfiles nicht entscheidend,
sondern die tatsächliche Größe des Codes.  Das Hexfile hat Overhead.

Zweitens, bist du dir ganz sicher, dass du im AVR Studio die
Optimierung angepasst hast?  Dort würde ich es zuerst vermuten, da die
dummerweise mit einer Voreinstellung von -O0 (null) daher kommen.

Drittens, Schuss ins Blaue: du benutzt irgendwelche
Gleitkommaoperationen, linkst aber nicht gegen -lm.  Auch das ist
wieder etwas, was AVR Studio bei den Voreinstellungen ,,vergessen''
hat.  Wackele durch alle Menüs durch und füge libm.a zu den
Bibliotheken hinzu.

Autor: Tommy M. (muello)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

vielen Dank für die schnelle Antwort. Mir war schon klar, dass ich unter 
AVR-Studio mit dem GCC kompiliere. Und gerade deshalb fande ich es 
"sonderbar", dass unterschiedliche Dateigrößen des Hex-Files auftraten.
Die Optimierung hatte ich aber richtig eingestellt.

Dein "Blau-Schuss" traf (wie schon so oft :-) ins Schwarze...Kannst du 
mir etwas kongreter sagen, was du mit "gegen -lm" linken meinst?

Unter AVR-Studio kann ich zudem noch weitere "Link Objects" wählen:
libc.a
libm.a
libprintf_flt.a
libprintf_min.a
libscanf_flt.a
libscanf_min.a
Wo finde ich weitere Informationen, wo es sinnvoll ist, entsprechende 
"Link Objects" einzubinden?

Im Voraus schonmal vielen Dank...
Tommy

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tommy Müller wrote:

> Dein "Blau-Schuss" traf (wie schon so oft :-) ins Schwarze...Kannst
> du mir etwas kongreter sagen, was du mit "gegen -lm" linken meinst?

Dass auf der Linker-Kommandozeile ein -lm am Ende auftaucht.  Das
entspricht ausgeschrieben der Bibliothek libm.a.

> Unter AVR-Studio kann ich zudem noch weitere "Link Objects" wählen:
> libc.a

Die wird standardmäßig immer gelinkt, eine solche Auswahl ist also
nicht sinnvoll.

> libm.a

Die sollte man immer mit reinnehmen, aber AVR Studio hat das vergessen.

> libprintf_flt.a
> libprintf_min.a
> libscanf_flt.a
> libscanf_min.a

Das sind die eingeschränkten bzw. erweiterten Varianten von vfscanf()
und vfprintf().  Die haben aber als solche keinen großen Sinn, da sie
nur wirksam werden, wenn auch noch -Wl,-u,vfscanf mit auf der
Linker-Kommandozeile davor steht.  Das müsste man bei AVR Studio
irgendwo unter "custom options" unterbringen.  Wieder etwas, was AVR
Studio ,,vergessen'' hat: ein benutzerfreundlicheres Interface für die
printf- und scanf-Varianten.  Manche Leute auf avrfreaks.net empfehlen
daher, grundsätzlich den primitiven Makefile-Generator von AVR Studio
abzuklemmen und gleich Mfile zu nehmen.

Autor: Tommy M. (muello)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

vielen Dank für deine Antworten...

Grüße
Tommy

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.