Autor: tmf
Redakcja: Dondu
W poprzedniej części naszego cyklu o Atmel Studio został opisany dodatek Code Size – umożliwia on pokazanie graficzne ogólne informacje o zajętości pamięci FLASH, SRAM i EEPROM.
Znacznie bardzie szczegółowym narzędziem ułatwiającym pisanie aplikacji, a raczej jej „tuningowanie” jest dodatek Data Size Viewer. Cóż to takiego?
Dodatek ten umożliwia wyświetlenie informacji o ilości pamięci przydzielonej poszczególnym symbolom.
Co to takiego te „symbole”? Kompilator kompilując program zamienia wszystkie występujące z nim nazwy na odpowiadające im symbole – w przypadku C sprawa jest prosta – symbolem jest po prostu nazwa funkcji, czy zmiennej. W C++ kompilator dokonuje tzw. manglowania, w efekcie do nazwy doklejana jest informacja o typie, liście argumentów itd. stąd też symbole w C++ wyglądają nieco dziwacznie. Zostańmy jednak tylko przy C.
Brakło pamięci - gdzie szukać oszczędności?
Jeśli napiszemy dowolną funkcję, to w wyniki jej kompilacji otrzymamy symbol będący adresem jej początku. Każda funkcja jest kompilowana do pewnego kodu wynikowego – w zależności od wielkości kodu ją definiującego kod wynikowy ma różną wielkość.
I tu właśnie przydaje się dodatek Code Size Viewer. Umożliwia on uszeregowanie symboli wykorzystywanych w programie ze względu na wielkość, dzięki temu możemy łatwo zidentyfikować duże funkcje. Co nam to daje?
Z pewnością wielokrotnie zdarzyło ci się dodać do programu jakiś mały fragment, po którym kod wynikowy urósł o kilka kB (dobrym przykładem będzie np. dodanie funkcji sprintf i pokrewnych, czy arytmetyki zmiennopozycyjnej).
Pytanie co jest odpowiedzialne za taki przyrost wykorzystania dostępnej pamięci?
Normalnie znalezienie przyczyny byłoby trudne, ale nie z dodatkiem Code Size Viewer. Po jego instalacji (opisana na końcu artykułu)dodatek jest dostępny w menu View mamy dostępną nową opcję – ELF Symbol Sizes:
Włączenie dodatku Code Size Viewer. |
Po jej wybraniu pojawi się nowe okienko informacyjne o nazwie Elf Symbol Sizes:
Informacja o symbolach. |
Aby możliwe było wyświetlenie symboli musimy najpierw dokonać poprawnej kompilacji programu – informacje o symbolach czerpane są z pliku wynikowego elf.
Domyślnie wyświetlane są wszystkie symbole używane w programie, lecz możemy je zawęzić do dwóch grup – symbole powiązane z segmentem .text (Text Segment) – są to wszelkie symbole umieszczone w pamięci FLASH mikrokontrolera, drugą grupę stanowią symbole powiązane z segmentem .data (Data Segment) – są to symbole umieszczone w pamięci SRAM (a więc zmienne globalne i statyczne wykorzystywane w programie). Dodatkowo klikając na nazwy kolumn (Name, Symbol Name, Size) możemy posegregować symbole ze względu na nazwę, segment lub wielkość).
Dla przykładu w programie, który aktualnie piszę mam kilka symboli, zobaczmy ile zajmują one miejsca. W tym celu kliknąłem na kolumnę Size uzyskując następujący wynik:
Symbole ze względu na wielkość. |
Od razu widać, że najwięcej pamięci FLASH (segment .text) zajmuje symbol o nazwie dtab – co to takiego? Wystarczy wykonać podwójne kliknięcie na nazwie symbolu, aby Atmel Studio przeniosło nas do miejsca jego definicji:
Przeniesienie do programu. |
Jak widać, w ten sposób możemy łatwo zlokalizować funkcje w programie, które są rozwlekłe i generują długi kod wynikowy. W naszym przypadku nie była to funkcja, lecz tablica z danymi. Podobnie możemy znaleźć np. zmienne, które zajmują dużo miejsca i spróbować je skrócić, albo zastanowić się, czy nie da się ich jakoś zoptymalizować.
Ten prosty dodatek oddaje nieocenione usługi w sytuacji, kiedy nasz program rozrasta się do niebezpiecznych rozmiarów i nadchodzi czas aby pomyśleć trochę o jego optymalizacji. Patrząc na rozmiary symboli od razu wiemy jakie miejsca w programie warto optymalizować, a które ze względu na niewielki generowany kod można pominąć. Pokazuje nam też jak sposób w jaki piszemy program, czy pewne konstrukcje języka C/C++ wpływają na wielkość kodu wynikowego.
Z pewnością warto się tym dodatkiem zainteresować :-)
Instalacja
Tak jak wcześniej opisane dodatki instalujemy go z menu Tools > Extension Manager:
... szukamy na liście i instalujemy:
Zamykamy i ponownie uruchamiamy Atmel Studio.
Brak komentarzy:
Prześlij komentarz