www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik unbenutze funktionen entfernen


Autor: Tino Kühn (blumengiesser)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich habe den artikel in der kategorie compiler: GCC: unbenutzte 
Funktionen entfernen gelesen aber das scheint nicht zu klappen. ich habe 
die version 4.18 von AVR Studio, standartinstallation ohne änderungen 
und Winavr 20100110. Eingetragen ist im AVR Studio unter Custom Compiler 
Option alles siehe bild (standard?). trage ich jetzt die dinge

-ffunction-sections
-fdata-sections

und

--gc-sections

ein ändert sich zwar das aussehen des compilerergebnisses aber die 
programmspeichergröße bleibt die gleiche. kommentiere ich befehle aus, 
die ich nicht brauche dann wir das programm wie erwartet kleiner.

Habe ich etwas nicht beachtet?

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke Du hast das: "Wird der Linker nicht direkt aufgerufen, sondern 
über das Compiler-Frontend (avr-gcc/arm-*-gcc) gelinkt, ist die Option 
per -Wl,--gc-sections zu übergeben." nicht beachtet.
Der Linker wird nicht in dem Dialog eingetragen, also wird er wohl über 
das gcc-frontend aufgerufen, oder was meinst Du?

Autor: Tino Kühn (blumengiesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich diese beiden funktionen in der linker zeile eintrage ist auch 
nix anders als zuvor...

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir funktioniert es.

Kontrolliere mal die Meldungen beim kompilieren. Da muss was wie

avr-gcc -mmcu=atmega32 -Wl,--gc-sections -Wl,-Map=xxx.map xxx.o -o 
xxx.elf

stehen.

Der Dialog zum setzen der Option ist unbedingt mit dem Button "Add" zu 
bestätigen. Man könnte dazu neigen, einfach auf "OK" zu drücken, nachdem 
man die Option in das Feld eingegeben hat. Falls das nicht geklappt hat 
fehlt die Option in der Meldungsausgabe.

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ergänzung:

Kontrolliere auch die eigentliche Meldung vom compilieren:

avr-gcc  -mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -ffunction-sections 
-fdata-sections  -MD -MP -MT xxx.o -MF dep/xxx.o.d  -c  ../xxx.c

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wenn ich diese beiden funktionen in der linker zeile eintrage ist auch
nix anders als zuvor...

Vorsicht! Abgesehen davon das es sich hier nicht um "Funktionen" sondern 
um "Optionen" handelt, sind es nicht "zwei" sondern eine. Das muss als 
ein Eintrag in das Feld eingegeben und mit Add bestätigt werden. Es 
darf also kein Leerzeichen in der Meldungsausgabe zwischen "-W1" und 
"--gc-sections" stehen sondern ein Komma ohne jedes Leerzeichen. Gib 
direkt "-Wl,--gc-sections" als einen Eintrag in das Dialogfeld ein.

Autor: Tino Kühn (blumengiesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, ich habe das jetzt als ein feld eingetragen. hier die compiler 
meldung mit dem Eintrag:


Build started 20.3.2011 at 09:29:50
avr-gcc -I"E:\TinoKuehn\AVR\myAlphaSteuerungv3\."  -mmcu=atmega8 -Wall 
-gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -MD -MP -MT dog_m163.o -MF dep/dog_m163.o.d 
-c  ../dog_m163.c
avr-gcc -mmcu=atmega8 -Wl,--gc-sections  -Wl,-Map=interrupt.map 
interrupt.o atmega8Timer.o dog_m163.o myAlphaFunctions.o    -lc  -o 
interrupt.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature 
interrupt.elf interrupt.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 --no-change-warnings -O ihex 
interrupt.elf interrupt.eep || exit 0
avr-objdump -h -S interrupt.elf > interrupt.lss


hier ohne:

rm -rf interrupt.o atmega8Timer.o dog_m163.o myAlphaFunctions.o 
interrupt.elf dep/* interrupt.hex interrupt.eep interrupt.lss 
interrupt.map
Build succeeded with 0 Warnings...
avr-gcc -I"E:\TinoKuehn\AVR\myAlphaSteuerungv3\."  -mmcu=atmega8 -Wall 
-gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -MD -MP -MT interrupt.o -MF 
dep/interrupt.o.d  -c  ../interrupt.c
avr-gcc -I"E:\TinoKuehn\AVR\myAlphaSteuerungv3\."  -mmcu=atmega8 -Wall 
-gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -MD -MP -MT atmega8Timer.o -MF 
dep/atmega8Timer.o.d  -c  ../atmega8Timer.c
avr-gcc -I"E:\TinoKuehn\AVR\myAlphaSteuerungv3\."  -mmcu=atmega8 -Wall 
-gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -MD -MP -MT dog_m163.o -MF dep/dog_m163.o.d 
-c  ../dog_m163.c
avr-gcc -I"E:\TinoKuehn\AVR\myAlphaSteuerungv3\."  -mmcu=atmega8 -Wall 
-gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -MD -MP -MT myAlphaFunctions.o -MF 
dep/myAlphaFunctions.o.d  -c  ../myAlphaFunctions.c
avr-gcc -mmcu=atmega8 -Wl,-Map=interrupt.map interrupt.o atmega8Timer.o 
dog_m163.o myAlphaFunctions.o    -lc  -o interrupt.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature 
interrupt.elf interrupt.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 --no-change-warnings -O ihex 
interrupt.elf interrupt.eep || exit 0
avr-objdump -h -S interrupt.elf > interrupt.lss

das ohne ist deutlich mehr. aber die % des programmspeicherverbrauchs 
sind komplett gleich...

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt fehlen die Optionen

-ffunction-sections
-fdata-sections

für den Compiler bei der Compilation der einzelnen Files.

Das beim zweiten Mal mehr Dateien kompiliert wurden, ignoriere erstmal.
Das muss eine andere Ursache haben.

Autor: Tino Kühn (blumengiesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja wenn man weiß was man machen muss, doch recht einfach. Jetzt geht es. 
Vielen Dank!

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau: Kaum macht man's richtig, geht's. ;-)

Gern geschehen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.