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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 13 kwi 2025, o 20:54


    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: 116
    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: 15
    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: 27373
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 116
    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: 2595
    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 0 gości


    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