optimale avr-gcc compiler optionen

OP #2039842
Lesenswert?
• ▲
▼
Hallo avr-gcc Entwickler!

welche avr-gcc compiler optionen verwendet ihr in einem Makefile?

Mein Fragestellung war, wie ich den cocoOS "cooperative task scheduler" 
- http://www.cocoos.net/ so verwenden kann, dass die erzeugte codegröße 
für atMega möglichst klein wird.

Anmerkung: Der cocoOS Version 2.1.0 habe ich noch einige #if #endif 
verpasst, so dass schon hier etwas gewonnen wurde.

Heute konnte ich meine noch fertiges Programm (atMega88) von 4490 auf 
3384 "verkleinern".

Somit sollte zukünftig auch der Einsatz eines atMega48 möglich sein.
Der Verwendete fastbootloader 2.9 belegt nur 512b, die ich bei einem 
atMega48 auch noch einsparen könnte.

Hier ein Ausschnitt aus dem Makefile
1
# see: http://www.tty1.net/blog/2008-04-29-avr-gcc-optimisations_en.html
2
OPT = s
3
CFLAGS = -g$(DEBUG)
4
CFLAGS += $(CDEFS) $(CINCS)
5
CFLAGS += -O$(OPT)
6
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
7
CFLAGS += -ffunction-sections -fdata-sections -Wl,--gc-sections
8
CFLAGS += -fno-split-wide-types -fno-tree-scev-cprop
9
##CFLAGS += -fno-inline-small-functions
10
#CFLAGS += -ffreestanding
11
CFLAGS += -Wall -Wstrict-prototypes -Wl,--relax
12
CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
13
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
14
CFLAGS += $(CSTANDARD)

Gibt es noch Verbesserungen oder Vorschläge?
Persönliche Seite #2039885
Lesenswert?
• ▲
▼
Uwe S. schrieb:
> Hallo avr-gcc Entwickler!
>
> welche avr-gcc compiler optionen verwendet ihr in einem Makefile?
>
> Mein Fragestellung war, wie ich den cocoOS "cooperative task scheduler"
> - http://www.cocoos.net/ so verwenden kann, dass die erzeugte codegröße
> für atMega möglichst klein wird.
>
> Anmerkung: Der cocoOS Version 2.1.0 habe ich noch einige #if #endif
> verpasst, so dass schon hier etwas gewonnen wurde.
>
> Heute konnte ich meine noch fertiges Programm (atMega88) von 4490 auf
> 3384 "verkleinern".
>
> Somit sollte zukünftig auch der Einsatz eines atMega48 möglich sein.
> Der Verwendete fastbootloader 2.9 belegt nur 512b, die ich bei einem
> atMega48 auch noch einsparen könnte.
>
> Hier ein Ausschnitt aus dem Makefile
> [code]# see:
> http://www.tty1.net/blog/2008-04-29-avr-gcc-optimisations_en.html
> OPT = s
> CFLAGS = -g$(DEBUG)
> CFLAGS += $(CDEFS) $(CINCS)
> CFLAGS += -O$(OPT)


> CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct
> -fshort-enums

Das sind keine Optimierungs-Optionen, sondern sie beeinflussen das ABI, 
d.h. die Binärkompatibilität des erzeugten Codes. Gleichwohl haben sie 
auch Einfluß auf die Codegröße.

> -fno-split-wide-types

Ob das was bringt hängt von deiner Quelle ab.

> -fno-inline-small-functions

Ditto. Inlining kann das Programm verkleinern (in den meisten Fällen) 
oder vergrößern (eher selten).

> -Wall -Wstrict-prototypes

Warnungen haber keinen Einfluß auf die Codegröße. Ratsam ist noch -W

> Gibt es noch Verbesserungen oder Vorschläge?

Das hängt von deinem Code ab, d.h. Assembler-Ausgabe überfliegen und 
schauen, ob gcc irgendwo klotzigen Code macht.

Und: Wenn du gute Optionen gefunden hast, bleib bei der 
Compiler-Version. Ansonsten kannst du den ganzen Zirkus wieder von vorne 
anfangen.

Bei mir sehe ich noch
-fno-move-loop-invariants
-fno-tree-loop-optimize
Diese erhöhen in manchen Grenzfällen die Registerlast, so daß ein Freme 
gebraucht wird, wo es ansonsten nicht nötig ist.

Zur Codeersparnis kann auch indirekte Adressierung führen, richtige 
Anwendung vorausgesetzt. Also im Listfile nach "Nestern" von 
4-Byte-Befehlen suchen und ggf. indirekt adressieren. Kandidaten dafür 
sind Nester von Strukturzugriffen.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.