Forum: Mikrocontroller und Digitale Elektronik AVR Butterfly schon voll mit Demoanwendung ?


von jo1984 (Gast)


Lesenswert?

Hallo.
Ich habe ein AVR Butterfly Board und wollte darauf die nach GCC 
portierte Demoanwendung laden. Das ist ein kleines Menü mit "Temperatur 
lesen" und eine RTC.

Ich bekomm einen Fehler beim Download und die Codegröße ist 16454. Also 
mehr als die 16k des ATMega169.

Kann das sein ? 16k ist doch eigentlich recht viel.
1
Invoking: Print Size
2
avr-size --format=berkeley -t TEST.elf
3
   text     data      bss      dec      hex  filename
4
  16454      338      153    16945     4231  TEST.elf
5
  16454      338      153    16945     4231  (TOTALS)
6
Finished building: sizedummy

von Karl H. (kbuchegg)


Lesenswert?

jo1984 schrieb:
>
> Ich bekomm einen Fehler beim Download und die Codegröße ist 16454. Also
> mehr als die 16k des ATMega169.
>
> Kann das sein ? 16k ist doch eigentlich recht viel.

16k ist sogar eine Menge.

> Ich habe ein AVR Butterfly Board und wollte darauf die nach GCC
> portierte Demoanwendung laden. Das ist ein kleines Menü mit "Temperatur
> lesen" und eine RTC.

Kommt drauf an, was du da so 'portiert' hast.

Aber ich würde jetzt zuallererst mal auf einen nicht eingeschalteten 
Optimizer tippen.

von jo1984 (Gast)


Lesenswert?

>Kommt drauf an, was du da so 'portiert' hast.
Ich selbst habe nichts portiert. Ich hab das portierte Demoprojekt 
http://www.siwawi.arubi.uni-kl.de/avr_projects/#bf_app übernommen.

>Aber ich würde jetzt zuallererst mal auf einen nicht eingeschalteten
Optimizer tippen.
Das ist möglich (ich such grad, wo ich die Option unter AVR-Eclipse 
einstellen kann).
Aber mit Optimierer hab ich dann anstatt 16k noch 10k-12k. Das wäre mir 
auch schon zu viel für "kann eigentlich noch nicht wirklich was".

von jo1984 (Gast)


Lesenswert?

-Os war angewählt.

von Karl H. (kbuchegg)


Lesenswert?

jo1984 schrieb:
>>Kommt drauf an, was du da so 'portiert' hast.
> Ich selbst habe nichts portiert. Ich hab das portierte Demoprojekt
> http://www.siwawi.arubi.uni-kl.de/avr_projects/#bf_app übernommen.
>
>>Aber ich würde jetzt zuallererst mal auf einen nicht eingeschalteten
> Optimizer tippen.
> Das ist möglich (ich such grad, wo ich die Option unter AVR-Eclipse
> einstellen kann).
> Aber mit Optimierer hab ich dann anstatt 16k noch 10k-12k. Das wäre mir
> auch schon zu viel für "kann eigentlich noch nicht wirklich was".


Ähm.
Hast du dir den Code mal etwas genauer angesehen.
Das mag dir jetzt so vorkommen, als ob das alles Pipifax wäre, aber da 
steckt schon einiges drinnen.


Mit AVR-Studio / WinAvr compiliert das mit -Os auf 13174 Bytes 
Flash-Verbrauch

von jo1984 (Gast)


Lesenswert?

>Das mag dir jetzt so vorkommen, als ob das alles Pipifax wäre, aber da
>steckt schon einiges drinnen.
ok

>Mit AVR-Studio / WinAvr compiliert das mit -Os auf 13174 Bytes
>Flash-Verbrauch
hab gesehen, da liegt ein compiliertes HEX File bei. Das dürfte auch so 
um die 13k haben.

Jetzt muss ich nur noch rausfinden, weshalb bei mit 16k rauskommen. Muss 
mir wohl mal ein MAKEFILE zusammenschustern und das direkt von der 
Konsole aus compilieren.

Ich hab Eclipse + AVR-Eclipse + Linux. Und hab das ohne eine Änderung in 
den Defaulteinstellungen compiliert. Wie gesagt, -Os ist angewählt. Ohne 
hat es ca 22k.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

> [...]und das direkt von der Konsole aus compilieren[...]

Ja, anhand der Ausgabe von "make all" kann man nachvollziehen, mit 
welchen Parametern avr-gcc zum Compilieren und Linken aufgerufen wird 
und diese dann in die Einstellungen der IDE übernehmen (habe selbst das 
Eclipse avr plugin nie benutzt).

Auf jeden Fall die Option -lm zu den Linker-Aufrufparametern hinzufügen. 
Linker Option --relax ist in aktueller Fassung der Ports auch aktiviert 
und hat ein paar freie Bytes zustätzlich gebracht. In älteren Versionen 
der Toolchain kann --releax zu Verdruss führen, dann evtl. testweise 
weglassen. Compiler-Optionen neben -Os derzeit:
1
CFLAGS += -funsigned-char
2
CFLAGS += -funsigned-bitfields
3
CFLAGS += -fpack-struct
4
CFLAGS += -fshort-enums
5
CFLAGS += -fno-inline-small-functions
6
CFLAGS += -fno-split-wide-types
7
CFLAGS += -fno-tree-scev-cprop

"Linker garbage-collection" kann auch aktiviert werden und ist es auch 
im Makefile und in den AVR-Studio Projekteinstellungen (CFLAGS: 
-ffunction-sections, -fdata-sections, LDFLAGS: (-Wl)--gc-sections). Bin 
aber grade nicht sicher, ob überhaupt noch "toter" Code im 
Beispielquelltext enthalten ist. Es gibt allerdings Testroutinen, die 
wohl zur Prüfung in der "Butterfly-Fabrik" genutzt werden aber ansonsten 
nicht genötigt werden. Kann man also weglassen (Quellcode test.c nicht 
compilieren/linken und Aufruf in main()/Test() auskommentieren).

Falls der vorinstallierte Bootloader weiter verwendet werden soll, darf 
TEXT+DATA nicht größer als 14KiB sein, da die übrigen 2KiB vom 
Bootloader beansprucht werden.

von jo1984 (Gast)


Lesenswert?

ok. habe mich jetzt durchgekämpft und auch die 13142 geschafft. 
Allerdings verstehe ich was mit den Linkeroptionen noch nicht.

mit:
1
avr-gcc -Wl,-Map,bf_gcc.map -Wl,--relax -Wl,-lm -Wl,--gc-sections -mmcu=atmega169 -o"test4.elf" -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-inline-small-functions -fno-split-wide-types -fno-tree-scev-cprop -ffunction-sections -fdata-sections  ./ADC.o ./BCD.o ./LCD_driver.o ./LCD_functions.o ./RTC.o ./bfeeprom.o ./button.o ./dataflash.o ./main.o ./sound.o ./test.o ./timer0.o ./usart.o ./vcard.o

komm ich auf  .data: 338 .text  15314

aber erst wenn ich das "-Wl,--relax -Wl,-lm -Wl,--gc-sections" nochmals 
an's Ende stelle, dann erreiche ich die  .data  74 .text 13142

Also das, obwohl "-Wl,--relax -Wl,-lm -Wl,--gc-sections" ja bereits im 
Aufruf drin steckt, aber halt recht weit am Anfang. Ich dachte, die 
Reihenfolge spielt keine Rolle ?!? - bin verwirrt -

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.