avr-size: invalid option -- C

OP #2919235
Lesenswert?

Ich habe bis jetzt immer mit dem WinAVR-Paket, auf das vom Tutorial 
verwiesen wird (http://sourceforge.net/projects/winavr/files/), 
'gearbeitet'. Nun habe ich mir GCC 4.7.2 installiert und bekomme beim 
Build die im Betreff genannte Fehlermeldung. Wie kann ich mir jetzt das 
Makefile mit korrekten Optionen für avr-size erzeugen lassen?
Moderator Persönliche Seite #2919313
Lesenswert?

Die Option -C war ein grässlicher Hack, den Eric Weddington in
WinAVR eingebracht hat und sich nicht ausreden ließ.  (Ihm war
dabei von vornherein klar, dass eine solche Option zumindest in
der gewählten Implementierung keine Chance hat, es jemals in die
offiziellen Binutils zu schaffen.)

Benutze die Option -B und ggf. den avr-size.sh Script, den es zuvor
für diesen Zweck gab.
OP #2919375
Lesenswert?

Jörg Wunsch schrieb:
> Dann entweder ein solches benutzen, oder das Kommando avr-size durch
> einen Wrapper ersetzen, der das -C einfach ignoriert und das richtige
> (umbenannte) avr-size.exe mit -B aufruft.

Hmm.
Ich glaube, ich hab' noch was vergessen:
Build wird vom AVR-Studio (4.18) gestartet. Wenn ich das richtig 
verstanden habe, wird aus den Projekteinstellungen ein Makefile 
gebastelt.
Heißt das jetzt: Fehlermeldung erstmal ignorieren und avr-size extra 
aufrufen! Oder kann da in einer Konfigurationsdatei einfach fix was 
geändert werden?
OP #2920069
Lesenswert?

Johann L. schrieb:
> Da lässt sich einiges durch Optionen nachtrimmen, bei mir bis zu 7%
> besseren Code (beide Varianten mit -Os aber weiteren Optionen).

Kann schon sein. Ich habe bei dem Projekt, was ich mir zum Vergleich 
rausgesucht habe, an den Optionen erstmal nichts geändert.
Optionen =
 wie von AVR Studio vorgegeben + -fno-inline-small-functions + -Os
GCC 4.3.3 -> 1018 bytes (99.4% Full)
GCC 4.7.2 -> 1048 bytes (102.3% Full)

 ohne -fno-inline-small-functions
GCC 4.3.3 -> 1114 bytes (108.8% Full)
GCC 4.7.2 -> 1048 bytes (102.3% Full)

??
OP #2920125
Lesenswert?

Johann L. schrieb:
> Ohne was über die Quelle zu wissen, lann man dazu kaum was sagen.

Ist mir klar.

> Naja, wenn der Code schon bis Unterkante Oberkiefer steht...

Ich habe nicht gemeckert. Es ist mir nur aufgefallen. Und wenn sonst 
alle anderen meinen: 'Dafür ist das Programm aber jetzt viiiel 
schneller!', dann haben sich die Compilerentwickler was dabei gedacht 
und ich kann damit gut leben. Vielleicht muss ich mich ja nur mal mit 
der 'Feinabstimmung der Optimizer' beschäftigen (falls ich das mal 
will!). Okay, eins hab' ich ja bereits rausgefunden: 
'-fno-inline-small-functions' nützt schon mal nichts.
OP #2920203
Lesenswert?

Johann L. schrieb:
> Im C-Code zu sündigen und dann vom Compiler Ablass zu erwarten,
> funktioniert i.d.R. nicht.
Ich erwarte gar nichts! Ich wollte einfach nur mal sehen, was passiert! 
Und ob das gesündigt ist, kannst du doch gar nicht einschätzen mit 
deiner Glaskugel. Und wenn's schlampig programmiert sein sollte, dann 
mach ich doch den Compiler nicht dafür verantwortlich.

Ich hab' mal weiter probiert 
(http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#GCC-Optionen 
):
'-fno-split-wide-types' ist die einzige Option, die bei beiden 
Compilerversionen 2 Bytes spart.
'-fno-inline-small-functions' nützt nur in Version 4.3.3 was

Ralf G. schrieb:
> GCC 4.3.3 -> 1018 bytes (99.4% Full)
> GCC 4.7.2 -> 1048 bytes (102.3% Full)
>
>  ohne -fno-inline-small-functions
> GCC 4.3.3 -> 1114 bytes (108.8% Full)
> GCC 4.7.2 -> 1048 bytes (102.3% Full)

Johann L. schrieb:
> Was ich damit meinte ist:  Es wäre interessant, den mit avr-gcc 4.7.2
> erzeugten Code so klein zu bekommen, daß er auch ausführbar wird.

GCC 4.3.3 nehmen :-)
Persönliche Seite #2920240
Lesenswert?

Ralf G. schrieb:
> Johann L. schrieb:
>> Im C-Code zu sündigen und dann vom Compiler Ablass zu erwarten,
>> funktioniert i.d.R. nicht.

> Und ob das gesündigt ist, kannst du doch gar nicht einschätzen mit
> deiner Glaskugel.

Das was ich schrieb ist eine allgemeine Binsenweisheit, unabhängig von 
dir und von deinem Code.

Ob du in deinem Code Böcke schiesst oder nicht weißt nur du selbst.
Moderator Persönliche Seite #2920623
Lesenswert?

Ralf G. schrieb:
> GCC 4.3.3 nehmen :-)

Das halte ich für den falschen Weg. Ich habe mit dem gcc 4.7.2 ein 
Dutzend Projekte neu compiliert und musste feststellen, dass das Binary 
in den meisten Fällen gegenüber dem 4.3.3er kleiner wurde.

Aber es gab durchaus auch Programme, die minimal größer wurden. Ich habe 
mir dann die betreffenden Stellen durch Analyse der lss-Datei im Code 
angeschaut und konnte da durch diverse Codeumstellungen bzw. 
Optimierungen dem 4.7.2er Compiler noch etwas unter die Arme greifen, so 
dass letztendlich auch diese Programme kleiner wurden.

Es lohnt sich also durchaus, mal nach den betreffenden Stellen zu 
schauen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren