logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVR Studio 4 - Jak zmniejszyć rozmiar kodu wynikowego?

mr.Sławek 17 Lut 2013 20:54 1182 5
  • #1 11948886
    mr.Sławek
    Poziom 32  
    Witam
    Doradźcie mi coś bo już naprawdę nie mam siły!
    Od wczoraj bezskutecznie walczę z AVR Studio 4- a dokładnie z rozmiarem kodu wynikowego. Napisałem w C prościutki program z mnożeniem zmiennoprzecinkowym i funkcja trygonometryczna- rozmiar kodu 4.5kB. Wydało mi się to dużo (w keilu taki sam program na 8051 ma 1.4kB), ale pomyślałem, że AVR-y pewnie tak mają... Ściągnąłem AVR Studio 5 no i rozmiar z AS5 to ok. 1,2kB! Optymalizacje w AS4 niewiele pomagają (bez optymalizacji jakieś 4.7kB), Zmiena opcji kompilatora i linkera nic nie daje.
    Kompilacja bezpośrednio pod WinAVR daje rozmiar 1.2kB. Podłączyłem makefile generowanego przez MFILE (z pakietu WinAVR) do AS4 i niby jest ok, ale to nadal nie rozwiązuje problemu.
    Okazuje się, że za taki rozmiar jest odpowiedzialna linia w makefile: MATH_LIB = -lm , której brak skutkuje takim wzrostem rozmiaru. Wpisanie do "linker options" komendy -lm (jak jest to zrobione w AS5) nic nie pomaga...
    Co o tym myślicie?
  • Pomocny post
    #2 11948904
    BlueDraco
    Specjalista - Mikrokontrolery
    My, BlueDraco, myślimy, że używanie na AVR zmiennego przecinka nie jest właściwą techniką programowania.
  • Pomocny post
    #3 11948945
    tmf
    VIP Zasłużony dla elektroda
    Zapewne wy, BlueDraco, macie rację, w sensie, że da się to pewnie zrobić i bez zmiennego przecinka. Ale wracając do problemu - jak sam zauważyłeś wymagane jest dołączenie biblioteki matematycznej libm.a. Robi się to opcją -lm, w AVR Studio we właściwościach projektu masz możliwość dołączenia bibliotek z listy - to o ile pamiętam masz w opcjach linkera.
    Bez tej biblioteki gcc dołącza swoje (nieoptymalne) funkcje obsługi zmiennego przecinka, a pewne funkcje w ogóle nie działają.
  • #4 11948949
    mr.Sławek
    Poziom 32  
    BlueDraco napisał:
    My, BlueDraco, myślimy, że używanie na AVR zmiennego przecinka nie jest właściwą techniką programowania.

    Wydaje mi się to nie istotne. Istotna jest róznica miedzy AS4 a AS5 i WinAVR.
    Program może być dowolny, różnice są kolosalne.

    Dodano po 5 [minuty]:

    tmf napisał:
    Wymagane jest dołączenie biblioteki matematycznej libm.a.

    Oczywiście!
    Kolego tmf masz racje! Temat zamknięty.
  • Pomocny post
    #5 11948988
    BlueDraco
    Specjalista - Mikrokontrolery
    Różnice w czasie wykonania nie będą kolosalne, za to sam czas wykonania będzie kolosalny. W 99% przypadków, w których programiści uC używają zmiennego przecinka, ten zmienny przecinek nie jest potrzebny. Co oczywiście nie znaczy, że Twój program nie należy do tego 1%.
  • #6 11948995
    mr.Sławek
    Poziom 32  
    Dziękuję za pomoc!

    Zamykam.
    Dar.El
REKLAMA