czwartek, 16 stycznia 2014

Proste porównanie kompilacji: WinAVR 2010 (GCC 4.3.3) vs. Atmel Toolchain 3.4.3 (GCC 4.8.1), czyli dlaczego czasem warto uaktualnić stary kompilator

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ł