Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 18 gru 2024, o 19:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 13 gru 2024, o 18:18 
Offline
Użytkownik

Dołączył(a): 09 lip 2019
Posty: 115
Pomógł: 11

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.
ObrazekObrazekObrazek

Konfiguracja projektu w Eclipse oczywiście jest w trybie Release
Obrazek

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ł :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2024, o 21:22 
Offline
Nowy

Dołączył(a): 12 lis 2024
Posty: 8
Pomógł: 1

Poszukaj w Eclipse opcji: -ffunction-sections -fdata-sections
oraz: -Wl,--gc-sections

Przeczytaj w sieci do czego służą i jak działają.

Czasem jeszcze pomaga LTO (Link Time Optimizations), ale dla 8-bitowych MCU, nie spodziewam się przy LTO spektakularnych efektów.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2024, o 22:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27319
Lokalizacja: Szczecin
Pomógł: 1041

Andrzej_Hils napisał(a):
Poszukaj w Eclipse opcji: -ffunction-sections -fdata-sections
oraz: -Wl,--gc-sections


DOKŁADNIE, pomijam już fakt że już w Bluebooku o tym mówię ;)

Ale co do innych spostrzeżeń - kompletnie ale to kompletnie nie wierzę że kod kompilowany tym samym toolchainem np pod eclipse źle działa a pod innym edytorem działa - sorki ale no to są już fantazyjne porównania

ustawienia o których wspomniał Andrzej_Hils po prostu usuwają z kodu nie używane funkcje, co domyślnie jest załączone w Atmel Studio obecnie i od zawsze w MkClipse, a w Eclipse trzeba dodać tę opcję ręcznie

I proszę nigdy nie pisać że kompilacja, wynik kodu itp może zależeć OD EDYTORA - tak tak Eclipse, AS, czy MkClipse to tylko edytory - jeśli widzisz jakieś różnice to szukaj rozwiązania w przełącznikach kompilacji a nie w edytorach

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2024, o 10:10 
Offline
Użytkownik

Dołączył(a): 09 lip 2019
Posty: 115
Pomógł: 11

Masz oczywiście 100% racji Mirku, to kompletnie nie zależy od edytora. Być może źle się wyraziłem - język polski to nigdy nie była moja mocna strona :-)
@Andrzej_Hils dzięki za podrzucenie hinta. Skupiłem się na walce z opcjami kompilatora (te zresztą były domyślnie włączone i w ostatnich wersjach Eclipse są do tego po prostu checkboxy, nie trzeba ich wpisywać) i kompletnie umknęły mi opcje linkera, mimo - że się na nie gapiłem ;-)
Po dodaniu w linkerze "-Wl,--gc-sections" wsad generuje się dokładnie z takim samym rozmiarem jak w MkClipse.

Jeszcze raz dzięki za pomoc! Na kolegów z forum zawsze można liczyć! :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2024, o 00:53 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2590
Pomógł: 128

No i super, że sie wyjaśniło!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO