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


von Tommy M. (muello)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Tommy M. (muello)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Tommy M. (muello)


Lesenswert?

Hallo Jörg,

vielen Dank für deine Antworten...

Grüße
Tommy

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.