Przestawiam proste porównanie wyniku kompilacji po zmianie kompilatora z ostatniego WinAVR na najnowszego Toolchaina Atmela (w dniu publikowania wpisu wersja 3.4.3 - zawierająca GCC 4.8.1). Porównanie ma na celu tylko mniej więcej pokazać, iż kompilatory są coraz sprawniejsze i co jakiś czas warto się aktualizować.
AVR GCC 4.3.3, WinAVR 2010
AVR Memory Usage
----------------
Device: atmega32
Program: 9286 bytes (28.3% Full)
(.text + .data + .bootloader)
Data: 269 bytes (13.1% Full)
(.data + .bss + .noinit)
EEPROM: 12 bytes (1.2% Full)
(.eeprom)
AVR GCC 4.8.1, AVR Toolchain 3.4.3
AVR Memory Usage
----------------
Device: atmega32
Program: 8904 bytes (27.2% Full)
(.text + .data + .bootloader)
Data: 265 bytes (12.9% Full)
(.data + .bss + .noinit)
EEPROM: 12 bytes (1.2% Full)
(.eeprom)
Po dodatkowej edycji pliku Makefile
dodanie flag dla kompilatora:
-fdata-sections
-ffunction-sections
oraz linkera:
-Wl,--gc-sections
AVR Memory Usage
----------------
Device: atmega32
Program: 8798 bytes (26.8% Full)
(.text + .data + .bootloader)
Data: 265 bytes (12.9% Full)
(.data + .bss + .noinit)
EEPROM: 12 bytes (1.2% Full)
(.eeprom)
Kompilowany program był napisany dawno temu bardzo nieoptymalnie ;) Jak widzimy powyżej, najnowszy kompilator wygenerował kod o 382 bajty mniejszy. Często taka ilość ratuje cały projekt ;)
Powodzenia w kompilacji
Michał