Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

niedziela, 20 marca 2011

Atmel Studio: Dodatek Data Size Viewer – czyli jak precyzyjnie określić, co i ile pamięci zajmuje?


Autor: tmf
Redakcja: Dondu

Artykuł jest częścią cyklu: Atmel Studio - Spis treści

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:


Atmel Studio - Włączenie dodatku Code Size Viewer.
Włączenie dodatku Code Size Viewer.

Po jej wybraniu pojawi się nowe okienko informacyjne o nazwie Elf Symbol Sizes:


Atmel Studio:Data Size Viewer - Informacja o symbolach.
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:


Atmel Studio:Data Size Viewer - Symbole ze względu na wielkość.
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:


Atmel Studio:Data Size Viewer - Przeniesienie do programu.
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.


Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

Brak komentarzy:

Prześlij komentarz

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.