Hej,
od jakiegoś czasu staram się przestawić z programowania AVR w
AtmelStudio7 na
Eclipse i za każdym razem mi się to do końca nie udaje. Ten problem o którym tutaj napiszę starałem się rozpykać już dawno, ale nigdy mi się to nie udało - a wydaje mi się, że drążyłem dość głęboko (zresztą wspiminałem o nim w jednym z
pierwszych swoich postów na tym forum).
Chodzi o
rozmiar i optymalizację kodu wygenerowanego przez Eclipse (konfiguracja zgodna z poradnikiem Mirka). Dotyczy to wszystkich wersji Eclipsa, których próbowałem, łącznie z ostatnimi 2022-12 i 2024-09. We wcześniej spomnianym wątku była sugestia ze strony forumowiczów, że różnica może wynikać z użytego toolchaina, ale nie jest to raczej ten problem.
Jeszcze, żeby problem dotyczył samego rozmiaru wsadu, to było by pół biedy. Niestety oprócz rozmiaru jest jeszcze chyba coś nie tak z opytmalizacją samego kodu. Kod, który działa po skompilowaniu w AtmelStudio7 bez pudła, potrafi działać niestabilnie po skompilowaniu w Eclipse.
Pokażę może w szczegółach o co mi chodzi na przykładzie
ostatniego projektu DYI, który wrzuciłem na forum (wspominałem w tamtym wątku, że przyjdę z problemami
)
Kompilacja dla procka ATmega328PB w
AtmelStudio7 generuje kod o następujących rozmiarach:
Program Memory Usage :
14550 bytes 44.4 % Full
Data Memory Usage : 865 bytes 42.2 % Full
EEPROM Memory Usage : 12 bytes 1.2 % Full
Rozmiar pliku HEX - 40943 bajty
Dokładnie ten sam kod w
Eclipse dla tego samego procka generuje takie rozmiary:
Program:
20424 bytes (62.3% Full) (.text + .data + .bootloader)
Data: 1307 bytes (63.8% Full) (.data + .bss + .noinit)
EEPROM: 12 bytes (1.2% Full) (.eeprom)
Rozmiar pliku HEX - 57475 bajty
I teraz najlepsze!!! - dokładnie ten sam kod wygenerowany przez
MkClipse (w teorii to dokładnie ten sam toolchain co użyty w Eclipse)
Device: atmega328pb
Program:
14552 bytes (44.4% Full) (.text + .data + .bootloader)
Data: 865 bytes (42.2% Full) (.data + .bss + .noinit)
EEPROM: 12 bytes (1.2% Full) (.eeprom)
Rozmiar pliku HEX 40947 bajty.
W przypadku wsadu skompilowanego w MkClipse rozmiar jest podobny z dokładnością do paru bajtów jak to co uzyskuję w AtmelStudio7, i co najważniejsze - skompilowany program działa bez problemów
Sprawdzałem już wszystko co mi tylko przyszło do głowy. Ustawienia optymalizacji w AtmelStudio7 i Eclipse wyglądają na identyczne.
Konfiguracja projektu w Eclipse oczywiście jest w trybie Release
Ktoś ma może pomysł co może być nie tak? Może coś z jakimś niansem ustawień w Eclipse?
W razie czego - jeśli ktoś sam by chciał spróbować kompilacji tego projektu - żeby nie męczyć się ze ściąganiem czegoś z gita - udostępniłem katalog ze źródłami na GDysku
tutaj.
Dodatkowo wrzuciłem logi i wsady z kompilacji w trzech różnych narzędziach w archiwum
tutaj.
Dodam, że podejmowałem też próby instalacji Eclipse na AVR na kompletnie świeżym systemie, żeby wyeliminować ten problem - nic to nie dało. Rezultaty powtarzalne są u mnie w 100% co bym nie zrobił