Forum: Compiler & IDEs avr-size: invalid option -- C


von Ralf G. (ralg)


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?

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


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.

von Ralf G. (ralg)


Lesenswert?

Danke erstmal.
Jörg Wunsch schrieb:
> Benutze die Option -B

Das will ich ja probieren, aber wo ersetzt man jetzt das -C in -B?
Ich habe ja kein selbst erstelltes Makefile.

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


Lesenswert?

Ralf G. schrieb:
> Ich habe ja kein selbst erstelltes Makefile.

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.

von Stefan E. (sternst)


Lesenswert?

Oder richtig Quick&Dirty ein älteres avr-size (mit -C Support) drüber 
kopieren.

von Ralf G. (ralg)


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?

von Ralf G. (ralg)


Lesenswert?

Stefan Ernst schrieb:
> Oder richtig Quick&Dirty ein älteres avr-size (mit -C Support) drüber
> kopieren.

Sowas wollte ich erst machen! War nur zu blöd, mal richtig nachzusehen 
wo avr-size ist :-(
Jetzt geht's...
Hmm... GCC 4.7.2 genehmigt sich gleich noch ein paar Bytes mehr Flash...

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


Lesenswert?

Ralf G. schrieb:
> Wenn ich das richtig
> verstanden habe, wird aus den Projekteinstellungen ein Makefile
> gebastelt.

Ja, man kann aber auch ein eigenes drunterlegen und ihm sagen, dass
er jenes benutzt.

von Ralf G. (ralg)


Lesenswert?

Jörg Wunsch schrieb:
> Ja, man kann aber auch ein eigenes drunterlegen und ihm sagen, dass
> er jenes benutzt.

Später vielleicht ;-)

Durch eure Anstöße funktioniert's jetzt erstmal.
Danke.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ralf G. schrieb:

> Hmm... GCC 4.7.2 genehmigt sich gleich noch ein paar Bytes mehr Flash...

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

von Michael R. (Firma: Brainit GmbH) (fisa)


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).

Welche weiteren optionen verwendest du?


Danke, michi

von Ralf G. (ralg)


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)

??

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ohne was über die Quelle zu wissen, lann man dazu kaum was sagen.

Einige Optimierungsschalter sind in 
AVR-GCC-Codeoptimierung: GCC-Optionen erklärt.  Aber GCC kennt 
hunderte von Optonen...

Ralf G. schrieb:

> GCC 4.3.3 -> 1018 bytes (99.4% Full)

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

von Ralf G. (ralg)


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.

von Ralf G. (ralg)


Lesenswert?

Johann L. schrieb:
> Naja, wenn der Code schon bis Unterkante Oberkiefer steht...

Ach ja: Das ganze ist ein funktionierendes Programm. Es war reines 
Interesse da mal den neuen Compiler ranzulassen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Wenn es mehr als 100% belegt kann man aber nicht testen, ob es 
funktioniert...

Compiler sind nicht perfekt, und werden es wohl auch nie werden...

von Ralf G. (ralg)


Lesenswert?

[krümelkack]
Johann L. schrieb:
> Wenn es mehr als 100% belegt kann man aber nicht testen, ob es
> funktioniert...
[/krümelkack]

Die 99.4%-Variante vom GCC 4.3.3 meinte ich natürlich.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

Wenn man so an der "bleeding edge" der Codegröße ist, muss man natürlich 
an alles Stellen punkten.

Im C-Code zu sündigen und dann vom Compiler Ablass zu erwarten, 
funktioniert i.d.R. nicht.

von Ralf G. (ralg)


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 :-)

von Johann L. (gjlayde) Benutzerseite


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.

von Frank M. (ukw) (Moderator) Benutzerseite


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.

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.