Jak zapewne wiecie istnieje sporo sposobów na debugowanie programu dla AVR.
Niemniej dzielą się one na 2 podstawowe grupy:
--> Programowe debugowanie przy użyciu symulatora
--> Sprzętowe debugowanie poprzez złącze JTAG
Zaś obie te grupy zaś możemy podzielić na 2 grupy:
---> Używanie debugera wbudowanego w Eclipse
---> Korzystając z narzędzi zewnętrznych
Wszystkie wymienione maja swoje wady i zalety. Jednak wszystkie są oparte o serwer GDB i debuger GNU.
Dla nas oznacza to, że debugowanie odbywa się w systemie klient/serwer - niezależnie od użycia symulatora czy JTAG-a.
Niektóre zewnętrzne aplikacje do debugowania (np. AVR Studio, Proteus, VMLab) są zintegrowane z serwerem , a więc użytkownik będzie tylko działał po stronie klienta z ukrytym serwerem działającym w tle programu.
# SERWERY DEBUGERAZasadniczo istnieją dwa główne serwery gdb dla AVR są to:
>>> AVaRICE Działa jako serwer gdb dla połączeń przez interfejs JTAG, czyli to taki pomost miedzy gdb, a sprzętowym JTAG.
Aby skorzystać z debugowania w systemie (JTAG) musimy oczywiście posiadać sprzętowy debuger, który
podłączymy do naszego układu przez port JTAG.
AVaRiace obsługuje trzy rodzaje interfejsów JTAG, a są to:
AVR JTAGICE mkII --- Na ta chwile to najlepszy obsługiwany JTAG dla AVR , Jest stosunkowo drogi, ale
są dostępne klony po znośnych cenach. Dysponuje:
---> podłączenie do PC przez -- USB / RS232
---> obsługuje JTAG i dW
---> obsługuje wszystkie obecne procesory AVR oraz AVR32
AVR Dragon --- Dragon to taka okrojona wersja MkII , reszta będzie opisana na jego przykładzie
bowiem akurat takowy posiadam, ale konfiguracja na inny nie będzie stanowić problemu.
---> USB
---> JTAG, dW, ISP, HV, i tryby PP
---> obsługuje prawie wszystkie AVR (oficjalnie max 32K Flash -- ale z m128 nie miałem problemów:)
AVR JTAG (MkI) --- Pierwszy interfejs JTAG teraz wycofany , i nie warty zakupu z powodu braku suportu
w nowszych środowiskach.
---> RS232 --część klonów posiadała USB
---> tylko JTAG
---> Nie obsługuje nowszych procesorów
---> Można go zbudować samemu ze względu na prostą konstrukcje np. wg tej strony:
http://www.m2uu.com/elektronika:avrjtag niemniej strata czasu i szkoda zachodu.
**** dW = debugWIRE to firmowy interfejs Atmela podobny do JTAG, ale przy użyciu tylko 1 przewodu (linia reset) Używany zwłaszcza przy małych procesorach tzw Pin Count AVR.
# Simulavr / SimulavrxxJest to Open Source-owy symulator programowy do symulacji procesorów AVR. Trochę już staruszek bo jego rozwój zatrzymał się na wydaniu z lutego 2005 , ale może być wciąż stosowany gdyż pozwala symulować większość popularnych procesorów, Jednak symulacja nie jest kompletna, brakuje wielu funkcji dla portów I/O, a na tych co są polegać za bardzo nie można. Nadaje się jednak dla początkujących jako zabawka do nauki pracy z symulatorem:)
Simulavrxx - to przepisany na C++ symulator Simulavr i też nic z nim się nie działo przez ostatnie 2 lata Jednak na początku 2008 podjęto działania za sprawą CVS wiec może się będzie rozwijać.
-------------------------------------------------------------------------------------------------------
No trochę przy nudziłem co ??
Niestety konieczne jest poznanie sprzętu i oprogramowania potrzebnego do
symulacji i debugowania bez tego ani rusz
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
-------------------------------------------------------------------------------------------------------
# Debugowanie w ECLIPSE ---> teraz krzykniecie pewnie no wreszcie
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Chociaż Eclipse dla AVR aktualnie (oficjalnie) nie obsługuje debugowania, to jednak wersja CDT posiada wszystko co jest wymagane i potrzebne do debugowania programów dla naszych Procków
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
ale wymaga to pewnej konfiguracji i jak zawsze w Eclipse jest więcej niż jeden sposób by to zrobić
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Postaram się byśmy to zrobili jak najprościej:
----> Debugowanie AVR z Eclipse wymaga dwóch kroków :
>> inicjacji serwera gdb,
i
>> połączenia się z nim
JEDZIEMY -----------------------------------------------------------------------------------------------------------------------------Poniższe kroki przeprowadzam na moim systemie przenośnym
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
-- Windows XP -- bo na moim warsztatowym IBMie nic innego nie działa:)
-- Eclipse 3.4 (ganymede) z CDT 5.0
-- WinAVR-20081124rc3 (zawiera AVaRiace oraz AVR-GDB)
-- Debuger AVR Dragon
![Obrazek](http://img88.imageshack.us/img88/8305/p1010123xs.th.jpg)
-- a do testów użyłem AVR Butterfly (jest na sprzedaż) z ATmegą 169:)
![Obrazek](http://img209.imageshack.us/img209/5933/s6301610.th.jpg)
Do testu również zostały użyte 2 programy:
>>> avrtest -- prosty program testowy z pusta nieskończona pętla main() dla M16 do testu z simulavr
>>> ButteeflyLCDTest -- równie banalny program do przetestowania debugera avariace dla M169
Obydwa zostały skompilowane bez modyfikacji konfiguracji kompilatora. Oznacza to że można użyć ustawień
domyślnych (standard debugging info (-GP)) dla poziomu debugowania i (stabs) dla formatu debug info.
Na razie mało jasne prawda ??
Spokojnie będzie jaśniej
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_9e2bd0079bb289f84a7313ff3779f46c.png)
Optymalizację ustawiłem dla testu na "No Optimizations (-O0)" bowiem wszystkie inne poziomy optymalizacji
mogą powodować wyjście z rzeczywistych instrukcji kodu maszynowego i niczym nie przypomina to przepływu danych z kodu źródłowego C, przez co debugowanie jest bez sensowne i nie praktyczne. Oczywiście można debugować zoptymalizowany kod , ale przejście dissasemblera w stosunku do kodu źródłowego C będzie bezużyteczne. Spokojnie pewnie myślicie teraz, że trzeba będzie zmienia konfiguracje optymalizacji za każdym razem
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Nic z tych rzeczy przecież mamy 2 konfigi RELASE i DEBUG, które sobie działają osobno i zależą od naszego wyboru
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
To tez przewaga Eclipse nad innymi środowiskami IDE że możemy przechowywać wiele
różnych ustawień dla różnych rzeczy np programatorów
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Oczywiście wasze ustawienia mogą się różnić gdyż ja mam Dragona a wy pewnie JTAGICE
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Dlatego mogą wystąpić pewne różnice. Jednak mam nadzieje że instrukcja będzie na tyle dokładna że
częściowo obejmę te różnice.
# Uruchamiamy serwer gdbHmmm no tak jakby to prosto napisać w sumie założenie jest łatwe , ale wytłumaczyć trudno , bowiem
tak "krasousty" jak szanowny kolega MIrek nie jestem , ale się postaram
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Najprostszym sposobem uruchomienia gdb jest startowanie go jako 'narzędzia zewnętrznego' w Eclipse,
a robimy to tak :
klikamy na mały trójkąt z teczuszką obok ikony zewnętrznych narzędzi i wybieramy opcje "External Tools Configurations"
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_47be0b72360e42137bc982c1e4bbd866.png)
W okienku które się otworzy klikamy prawym klawiszem myszy na:
![Obrazek](http://forum.atnel.pl/_obrazki/o/58_9f19dd52314a5cacec5cf4f67d9e737a.png)
i wybieramy
![Obrazek](http://forum.atnel.pl/_obrazki/o/58_36b26829f842754518ae5d6cfc4f11b9.png)
teraz możemy wprowadzić dane konfiguracyjne naszego serwera gdb:
Pewnie nie chcesz przekazywać do gdb obrazu flash w wierszu poleceń ?? w takim razie przejdź do zakładki
![Obrazek](http://forum.atnel.pl/_obrazki/o/58_ccd0a1d9baff3a32494a35c0cff6dc45.png)
i odznacz opcję
>>>> AVaRICE Konfiguracja dla niego powinna wyglądać następująco :
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_ec38b13845381f4d8646fb8de2195497.png)
gdzie :
Name = Nazwa konfiguracji ja sobie nazwałem Start Avarice
Location = tu podajemy ścieżkę do avarice
Working Directory = tu avarice nic zwykle nie zapisuje, ale sporadycznie może użyć do zrzutu pamięci
--- jak widać ustawiłem na workspace:), ale może to być dowolny folder
Arguments = Tu umieszczamy argumenty poleceń avarice
--- w tym przypadku użyłem -dragon dla JTAG (można oczywiście ustawić JTAGICE mkI jak i MkII
- Ignore-intr - ten argument zapobiega zatrzymaniu się avarice na każdym przerwaniu
- Jtag usb - dragon pracuje na usb więc dlatego
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
- :4242 - to port TCP dla naszego serwera gdb
Zauważcie że celowo nie określiłem funkcji " --erase i --program -- xxx file" w argumentach by umożliwić programowanie procesora poprzez interfejs JTAG, zamiast tego używam avrdude do programowania procesora docelowego
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Postąpiłem tak z dwóch powodów:
1. avarice błędnie programuje przez Dragona
2. nie chcę uzależniać jakiegokolwiek projektu od zewnętrznych narzędzi (miałbym jak w AS fuuu)
Po zapisaniu konfiguracji gdy klikniemy na RUN zostanie uruchomiony AVaRICE:)
Jeśli avarice wyjdzie z sesji debugowania w Eclipse to Debuger zostaje zatrzymany. Musimy wtedy ponownie uruchomić nową sesję. Zobacz w perspektywie DEBUG , a sam się przekonasz ze avarice jest dalej uruchomiony
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
to tylko taka mała niedogodność:(
# SimulAVRkonfiguracja dla simulAVR u mnie wygląda tak :
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_99cf640dcb59ee0c24640a895e66601d.png)
tu już tylko opiszę ważniejsze rzeczy jak pole ARGUMENTS :
-Gdbserver = informujemy symulator że będzie pracowała w trybie gdbserver
-Port 4242 = oznacza ze simulavr nasłuchuje na porcie 4242 podobnie jak i avarice - czyli używamy sobie konfiguracji Debugera dla obu i dla symulatora i dla avrice
-device atmeg16 = tu ustalam że simulavr powinien zasymulować ATmege16. Jak chcesz zobaczyć (krótką) listę
obsługiwanych procesorów to w cmd wpisz simulavr -L
Tu jak widzicie też nie przekazałem paru funkcji jak na przykład przesłania obrazu flash do symulatora. I jak sie domyślacie z 2ch powodów:
1. Simulavr niestety akceptuje tylko "surowe obrazy binarne" już chyba opisywałem na forum jak utworzyć plik bin w eclipse.
2. i jak zwykle ze nie lubie sobie uzależniać czegokolwiek od jakiejś konfiguracji
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
W tym przypadku musielibyśmy użyć konfiguracji sprzętowego debugera opisanej wyżej by wgrać obraz flash na początku sesji debugera a to mało wygodne rozwiązanie.
Po zapisaniu ustawień kliknięcie na RUN uruchomi simulavr
Niestety simulavr będzie nadal działał nawet jak sesja DEBUG zostanie zakończona. Ale tu mozna jej uzywać do wielu sesji , a by zatrzymać simulavr musimy przejść do perspektywy DEBUG i kliknąc prawym klawiszem myszki na wejściu simulavr i wybarć ZAKOŃCZ.
--------------------------------------------------------------------------------------------------------------------------------------------
To by było na tyle jeśli chodzi o serwery GDB dla debugera , teraz zajmiemy się narzędziami wbudowanymi w Eclipse----------------------------------------------------------------------------------------------------------------------------------------------
# Konfiguracja Debugera z Eclipsetu sprawa jest już prosta mamy już uruchomiony prawie serwer gdb wiec możemy ustawić sobie debuger Eclipse który jest bardzo fajny:) jak zwykle istnieją 2 typy konfiguracji debugera użyteczne dla AVR.
C/C++ Local Application i oczywiście GDB Hardware Debugging
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Silnik i rdzeń jest taki sam w obu przypadkach i dla obu stron, a różnice występują jedynie w interfejsie użytkownika i w pierwszych poleceniach serwera gdb służących do uruchamiania zdalnej sesji debugera.
Obie konfiguracje są praktycznie identyczne i wam znane z pracy z avarice i simulavr, wiec możecie już przetestować sami , która konfiguracja będzie dla was najlepsza.
Na początek otwieramy okienko Debug Configuration , wybieramy projekt do debugowania i klikamy na ikonke trójkąta obok
![Obrazek](http://forum.atnel.pl/_obrazki/o/58_d7982585f5d73b8a1874ca060d518cdc.png)
i wybieramy DEBUG CONFIGURATIONS... okno które sie pojawi powinno wyglądać tak:
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_7ae3f0d85741821f4f53e0a92f69dc4d.png)
Jesli opcja GDB Hardware Debuging nie jest widoczna oznacza ze nie zainstalowane masz opcjonalne fjuczery.
Trzeba zainstalować aktualizacje oprogramowania z Menu HELP i dodać CDT service (dla Eclipse 3.4 jest tu:
http://download.eclipse.org/tools/cdt/releases/ganymede ), a następnie przeglądnąć dostępne aktualizacje i zainstalować opcjonalna funkcję Eclipse C/C++ GDB Hardware Debugging.
Teraz należy 2klikiem na każdej konfiguracji aby utworzyć nową. Gdy będziecie mieli wybrany projekt przed otwarciem okna konfiguracji będzie ono miało nazwę np. "Nazwa_projektu Debug".
Pierwsza zakładka (główna) jest taka sama w obu przypadkach:
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_43f801b57deceaf069dfadd164f8d305.png)
jak widać musimy wskazać nasz plik .elf -- nie wymaga to chyba tłumaczenia:)
teraz przechodzimy do ustawień specyficznych
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
---> robią się schody nie
>>>>> C/C++ Local ApplicationDla tego typu konfiguracji wszystkie stosowne ustawienia znajdziecie na karcie DEBUGGER:
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_9545a74cab566c4e304d3a0dfdebcb4e.png)
-- Debugger
Ustawcie na gdbserver Debugger
-- GDB debugger
zmienić na "avr-gdb". Ustawiony na "gdb" nie działa, gdyż będzie domyślnie debugował na i386.
-- GDB Command file
usuń z stąd wskazanie na plik ". gdbinit". Jeśli jednak nadal trzeba wgrać obraz flash do docelowego procesora (np. z simulavr), musisz napisać mały skrypt gdb i wpisz tutaj jego nazwę . Zobacz poniżej .
-- GDB command set
wybierzcie "Standard" lub "Standard (Windows)". Nie używamy "Cygwin", ponieważ avr-gdb nie jest aplikacją cygwin. Różnice w różnych zestawach poleceń są minimalne, dotyczą głównie obsługi bibliotek współdzielonych, które są nieistotne dla programowania AVR.
-- Protocol
Pozostaw na "mi". To jest to samo co "MI2". "Mi1" jest starszym protokołem gdbservera,a że nie ma żadnych zalet w avr-gdb rozumie mi jako MI2.
-- Verbose console mode
Jeśli macie problemy możecie wybrać tę opcję, aby zobaczyć komunikację pomiędzy Eclipse i avr-gdb.
Teraz należy kliknąć na kartę Connection i skonfigurować parametry komunikacji pomiędzy avr-gdb i gdbserver:)
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_5b6163d809189ce44c3d5b177bf386cf.png)
Nie będę się tu rozpisywał po prostu ustawcie jak na obrazku
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Nasza konfiguracja jest zakończona. Kliknijcie na przycisku Debug i jeśli wszystko jest w porządku sesji debugowania powinien rozpocząć i aplikacja powinna zatrzymać się na początku naszej funkcji main ().
Dodatkowo dla dopełnienia informacji dopowiem w tym miejscu że :
gdb init przesyła obraz flash do simulavr. Zapiszcie go sobie gdzieś (np. w folderze projektu jako "gdbinit")
i wprowadźcie pełna ścieżkę dostępu do pliku w polu File GDB Commands na karcie Debugger w oknie konfiguracji. U mnie gdb działa mimo skryptu simulavr, ale może działać lepiej przy sprzętowym debugerze konfiguracje którego opiszę za chwilę.
Kod:
# make sure simuavr has code to run (it would complain Unknown opcode)
# change the filename as required, but with the name of the build configuration (here: Debug)
file Debug/avrtest.elf
#also don't forget to change the port number if you are using a different one.
target remote localhost:4242
load
# GDB Hardware DebuggingDla debugowania sprzętowego w GDB musimy zmienić ustawienia w dwóch zakładkach
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Zacznijmy od zakładki Debugger.
Tu większość opcji zostaje ustalona domyślnie przez przez Eclipse, a jedynymi opcjami, które musimy zmienić
zaznaczyłem na obrazku:
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_fc656ee96d8c4fc512f902d2268348cd.png)
następnie przechodzimy na zakładkę STARTUP:
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_b7dae9f88538d9f723558026f9211a7b.png)
Jeśli wybraliście standardowy JTAG na poprzedniej stronie , te opcje można zignorować
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_aec87bc22f1518e46c6c3fc05ec0f4f2.png)
Przesyłamy obraz flash na początku sesji debugowania. Plik obrazu może być. Elf lub. Hex, ale upewnijcie się, że wybraliście właściwą dla danego projektu. Uwaga: Ta funkcja nie działa u mnie na moim AVR Dragon, prawdopodobnie z powodu błędu w avarice. Zamiast z automatu muszę przesyłać obraz z avrdude przed rozpoczęciem sesji debugowania.
Pozostałe nie maja znaczenia:)
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_0b92bd74141176347a72e970d56cdbe8.png)
Set program counter at (hex)
jeśli nie jest ustawiony gdbserver zaczyna od 0x0000, która jest lokalizacją wektora reset . Więc chyba nie ma potrzeby ustawiania niczego tutaj.
Set breakpoints at:
Ustawiamy na "main" lub inną funkcję, na której chcemy zatrzymać wstępne wykonanie i rozpocząć debugowanie.
Resume
Wybieramy tę opcję. Jeżeli nie wybrano avarice i nie została uruchomiona jego aplikacja to trzeba wpisać "continue" dla avr-gdb w widoku konsoli, aby zadziałał debuger. Dlatego lepiej tą opcje zaznaczyć.
Ufff konfiguracja zakończona.Zapisujemy ustawienia. Kliknijcie teraz przycisk, Debug i jeśli wszystko jest w porządku sesja debugowania powinna się rozpocząć i aplikacja powinna zatrzymać się na początku naszej funkcji main ().
# PRACA Z DEBUGEREMNo teraz chyba najważniejsze prawda , co z tego ze uruchomiliśmy sesję debugera jak nie wiemy jak z nią pracować
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
, a więc jeśli wszystko przebiegło bez zakłóceń i nasza konfiguracja jest prawidłowa to nasza perspektywa DEBUG w Eclipse powinna wyglądać tak:
![Obrazek](http://forum.atnel.pl/_obrazki/o/thumb/58_f8ea23902de24c9c62a4bf355c750573.png)
Zapewne widzicie ze to prawdziwa sesja debugowania dla AVRBytterfly na AVR Dragon przez interfejs JTAG, którego użycie wam zakomunikowałem wcześniej
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Ten obrazek pokazuje jak działa i wygląda w Eclipse funkcja debugera z pakietu CDT.
BTW, Segment pamięci pokazany na obrazku zaczyna się na adresie 0x800020. To jest początek zakresu rejestrów dla I/O dla AVR , dzięki czemu możemy zobaczyć zawartość wszystkich wejść i wyjść rejestrów .
Aby znaleźć określony rejestr musicie zdobyć jego adres w eclipse można je znaleźć w w AVR Device Explorer i dodać do niego nasze 0x800020 czyli adres początkowy:)
I to by było na tyle na razie w tym temacie , mam nadzieję ze te informacje się komuś przydadzą , miłej lektury
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
i debugowania programów
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
CIĄG dalszy przynudzania : TUTAJ
topic958.html