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?
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?
wenn ich diese beiden funktionen in der linker zeile eintrage ist auch nix anders als zuvor...
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.
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
>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.
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...
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.
Ja wenn man weiß was man machen muss, doch recht einfach. Jetzt geht es. Vielen Dank!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.