unbenutze funktionen entfernen

OP #2111049
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?
Angehängte Dateien:
Gast #2111057
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?
Gast #2111066
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.
Gast #2111068
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
Gast #2111081
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.
OP #2111089
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...
Gast #2111091
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.

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.