AVR GCC cz1


K U R S
AVR-GCC: kompilator C dla
mikrokontrolerów AVR, część 1
Rozpoczynamy cykl artykułów, których zadaniem jest przedstawienie podstaw
oraz praktycznych zasad programowania mikrokontrolerów AVR w języku C
z użyciem kompilatora avr-gcc. Oczywiście wybór kompilatora AVR-GCC może
się jednym podobać, a innym nie. Postaramy się jednak uzasadnić, że nie
jest to zły wybór.
Zanim przejdziemy do konkretów możemy bez problemu połączyć naj- międzynarodowych forach, grupach
na początek kilka słów uzasadniają- większe zalety obu sposobów progra- i listach. A w dodatku - jak zaraz
cych taki właśnie wybór narzędzi. mowania. Następna sprawa to prze- się przekonamy - przy użyciu do-
Po pierwsze: po co w ogóle ję- nośność. Znaczne fragmenty kodu (a datkowych narzędzi wspomagających
zyk wysokiego poziomu skoro mikro- szczególnie algorytmy, przeliczenia, avr-gcc staje się bardzo poręcznym i
kontrolery świetnie programuje się w konwersje itp. - czyli elementy nie wygodnym w użyciu instrumentem.
assemblerze, który daje pełną kontro- korzystające bezpośrednio ze specy- Można też dodać - już poza kontek-
lę nad kodem i zasobami procesora ficznych zasobów i interfejsów da- stem stosowania w AVR - że gcc ma
i pozwala na uzyskanie maksymalnej nego mikrokontrolera) możemy łatwo wersje (tzw. porty) dla wielu innych
szybkości i zwięzłości? Otóż cały zastosować w programie dla zupeł- mikroprocesorów (np. MSP 430 czy
problem leży w skali. W przypadku nie innej kostki (praktycznie każda ARM) więc raz opanowany znacznie
małych układów z niewielkimi zaso- rodzina mikrokontrolerów posiada ułatwi ewentualne  przesiadki .
bami, wykonujących niezbyt złożone opracowany kompilator C - z inny- Jednak żeby nie wyglądało to jak
zadania (proste pomiary, sterowania mi językami nie jest tak dobrze). Tu reklamowa laurka należy też powie-
czy transmisje) asembler rzeczywi- od razu przechodzimy do następnej dzieć o mankamentach. Główny z
ście będzie całkowicie wystarczający zalety C: rozpowszechnienia. C jest nich to nie do końca  rozpracowana
(a czasem wręcz niezastąpiony). Gdy od lat ogólnie przyjętym standardem obsługa przez gcc nieciągłej prze-
jednak program się nam rozrasta i programowania z czym wiąże się strzeni adresowej AVR (dokładniej
komplikuje (obróbka większych ilości ogromna ilość dostępnych materia- omówimy to w trakcie prezentacji
danych, bardziej złożone przeliczenia łów: bibliotek, przykładowych kodów, przykładów). Zaleta jaką jest ciągły
i konwersje, zaawansowane algoryt- opisów, tutoriali, gotowych rozwiązań rozwój gcc może też stać się wadą
my sterowania itp.), prędzej czy póz- sprzętowo - programowych. W wielu w momencie wprowadzenia bardziej
niej dochodzimy do progu, powyżej przypadkach wystarczy dobrze po- radykalnych zmian wymagających
którego nasze dzieło staje się coraz szukać w zasobach sieciowych żeby korekt we wcześniej działających
mniej czytelne i coraz trudniejsze znalezć prawie gotowe rozwiązania projektach. Czasem pojawiają się
do opanowania. Nagle stwierdzamy, własnych zadań programowych. drobniejsze błędy widoczne tylko w
że dotychczasowe doświadczenia w Po trzecie: dlaczego kompilator specyficznych sytuacjach (być może
asemblerze to za mało żeby szybko avr-gcc (o którym krążą opinie, że dlatego przeoczone w trakcie prac
i skutecznie rozwiązać szerszy zakres jest niewdzięczny i trudny w konfi-
problemów (taka zresztą była w ogó- guracji i obsłudze) a nie jakieś inne
le geneza stworzenia języków wyż- rozpowszechnione narzędzie - jak np.
szego poziomu). Tutaj przechodzimy CodeVision czy ICC? Jednym z ko-
do drugiego pytania. ronnych argumentów jest oczywiście
Po drugie: dlaczego właśnie C a fakt, że avr-gcc jest bezpłatny. Ale
nie np. BASIC czy Pascal? Otóż C to nie wszystko: jest to narzędzie
był od początku projektowany jako dostępne dla wielu platform (więc
język możliwie maksymalnie zbliżony bez problemu możemy przenosić się
do sprzętu i generujący kod niewie- z naszymi projektami pomiędzy np.
le odbiegający od samodzielnie pisa- Windows a Linuksem). Przy tym avr-
nego w asemblerze. W połączeniu z -gcc jest produktem open-source, z
optymalizatorem kodu (składnik każ- czym wiąże się cały szereg udogod-
dego dobrego kompilatora) pozwala nień: mamy cały czas dostęp do naj-
to na uzyskanie zaskakująco zwarte- nowszych uaktualnień, pełnej infor-
go, krótkiego i szybkiego programu macji o wykrytych błędach, a także
wynikowego. Oczywiście mamy rów- do ogromnych zasobów bardziej lub
nież możliwość dopisania w czystym mniej zaawansowanego kodu two-
asemblerze fragmentów krytycznych rzonych i oferowanych do swobod-
czasowo (jak np. obsługa przerwań) nego wykorzystywania, możemy też
jeśli nie zadowala nas kod genero- cały czas liczyć na wsparcie i pod- Rys. 1. Przykładowy przebieg kompi-
wany automatycznie. W ten sposób powiedzi na aktywnie działających lacji kodu zródłowego
Elektronika Praktyczna 3/2005
81
K U R S
w środowisko programatora). Wymogi bardziej  pasującego zestawu narzę-
sprzętowe nie są krytyczne - jednak dzi. Jednak dla początkującego ta
rzecz jasna szybkość i komfort pracy wszechstronność może zmienić się w
będą mocno zależeć od mocy kom- poważną wadę: po prostu trudno się
putera. Prototyp opisywanego zestawu w tym wszystkim połapać. Dodatko-
używany przy opracowaniu kursu zo- wym utrudnieniem jest konieczność
stał uruchomiony na platformie Ath- zapoznania się (przynajmniej w ogól-
lon XP 2600+512 MB+Windows XP nym zarysie) z zasadami działania i
Pro PL, która zapewniła rzeczywiście używania managera procesów make,
wygodną i bezproblemową pracę. stosowanego standardowo do urucha-
Zauważmy, że nie ma na razie miania kompilatora.
mowy o żadnym współpracującym Ale w naszym środowisku ten
układzie sprzętowym mikrokontrole- nadmiar w niczym nie przeszka-
ra - wrócimy do tego tematu nieco dza. Wykorzystamy po prostu tylko
pózniej. sam kompilator (AvrSide nie używa
Skąd to wszystko wziąć? Ponie- make), gdy zaś zechcemy poczytać
waż artykuły przygotowywane są ze dokumentację albo wypróbować inne
sporym wyprzedzeniem, a potrzebne techniki opracowania projektów -
programy są wciąż rozwijane - naj- wszystko będzie pod ręką. AvrSide
lepiej sięgnąć do zródłowych witryn było zresztą początkowo dedykowane
projektów po najnowsze wersje. Avr- do współpracy z WinAvr i domyśl-
Side znajdziemy na http://www.avrsi- nie jest instalowane w jego folderze.
de.fr.pl albo na mirrorze http://www. Dopiero pózniej pojawiła się własna
avrside.ep.com.pl. Instalujemy naj- dystrybucja avr-gcc (także na stro-
pierw podstawową wersję D5 a na- nie http://www.avrside.fr.pl). Obecnie
stępnie zastępujemy plik wykonaw- mamy więc do wyboru dwie możli-
czy AvrSide.exe najnowszym dostęp- wości:
nym. Aktualne szczegóły znajdziemy  instalacja kompletnego WinAvr a
w dołączonych opisach i bezpośred- następnie AvrSide domyślnie w
Rys. 2. Struktura folderów kompilato- nio na w/w stronach. folderze głównym WinAvr;
ra avr-gcc AvrStudio (w chwili pisania w  uproszczona instalacja samego
wersji 4.10) jest udostępnione do AvrSide we własnym niezależnym
nad kompilatorem). Czy te wady są bezpłatnego pobrania z firmowej wi- folderze np. c:\AvrSide i uzupeł-
bardzo uciążliwe - ocenimy sami po tryny Atmela http://www.atmel.com. nienie kompilatorem (właśnie tak
pierwszych próbach programowania. Trochę więcej zastanowienia wy- jest skonfigurowane środowisko
maga sam kompilator avr-gcc. Sztan- używane na potrzeby artykułu).
Nasze środowisko uruchomieniowe darową dystrybucją avr-gcc dla Win- W obu przypadkach AvrStudio
Nasz  kursowy zestaw do pro- dows jest pakiet WinAvr Erica Wed- instalujemy całkiem niezależnie zgod-
gramowania AVR składa się z nastę- dingtona. Jednak nie należy utożsa- nie z zaleceniami Atmela.
pujących pakietów narzędzi: miać avr-gcc z WinAvr jak to jest Zanim zabierzemy się do pisania
 właściwego kompilatora avr-gcc, często w uproszczeniu podawane. Wi- pierwszych programów zapoznajmy
który jest programem typu CLI nAvr jest ogromnym zestawem wszel- się ogólnie z działaniem elementów
(command line interface) i bez kich narzędzi open-source przydat- środowiska programistycznego. Znako-
dodatkowego wsparcia musiałby nych w programowaniu AVR. Oprócz micie ułatwi to dalszą pracę i ana-
być obsługiwany z poziomu kon- aktualnej wersji avr-gcc znajdziemy lizę pierwszych przykładów. Można
soli tekstowej; tam notatnik programisty wspomaga- oczywiście na razie te zagadnienia
 graficznego środowiska eliminują- jący tworzenie projektów, symulator przejrzeć tylko pobieżnie - będziemy
cego powyższą niedogodność - w simulavr, debugger avr-gdb z graficz- wielokrotnie do nich wracać.
tej roli występuje bezpłatne Avr- nym interfejsem Insight, programator
Side pozwalające na szybkie i in- avrdude, Avarice - interfejs komuni- Jak działa avr-gcc
tuicyjne wykonanie podstawowych kacji pomiędzy avr-gdb a sprzętowym Avr-gcc określamy ogólnym mia-
operacji (wersja PL); adapterem JTAG, szeroki wachlarz nem kompilatora - jednak w rzeczy-
 najnowszej, mocno ostatnio roz- małych pomocniczych programów wistości jest to cały szereg współ-
winiętej i unowocześnionej wersji narzędziowych ogólnego stosowania, pracujących ze sobą narzędzi i bi-
firmowego pakietu Atmela AvrStu- generator plików makefile MFile oraz bliotek używanych w odpowiedniej
dio, który służy jako symulator i ogromny zbiór pomocy, manuali i kolejności i z potrzebnymi opcjami
debugger do testowania naszych dokumentacji. WinAvr jest aktualizo- ( właściwy kompilator avr-gcc, ze-
przykładowych projektów. wane co kilka miesięcy i dostępne staw narzędziowy avr-binutils oraz
Całość jest zainstalowana na plat- na http://winavr.sourceforge.net. biblioteki dla rodziny AVR avr-libc).
formie Windows. Dopuszczalne są Wielką zaletą WinAvr jest wszech- Celem jest przetworzenie kodu zró-
wersje 98, ME, XP, 2000. AvrSide stronność dostarczonego materiału, dłowego C zapisanego w jednym lub
nie da się uruchomić pod NT i 95 który pozwala na dogłębne zapozna- wielu plikach projektu na wynikowe
ze względu na brak obsługi magistra- nie się z metodyką programowania, pliki: kodu wykonawczego wpisywa-
li USB (koniecznej dla wbudowanego a także na indywidualny wybór naj- nego do pamięci Flash wybranego
Elektronika Praktyczna 3/2005
82
K U R S
modelu mikrokontrolera oraz (ewen- Do tych - na razie bardzo skróto- kostek AVR na różne typy architek-
tualnie) danych wpisywanych do wych i ogólnych informacji - będzie- tury związane z wielkością zasobów
wewnętrznej pamięci EEPROM. W my wielokrotnie wracać w trakcie danego mikrokontrolera. Każdy typ
trakcie powstaje także szereg pomoc- omawiania przykładowych projektów. posiada oddzielny zestaw bibliotek.
niczych plików zawierających rozma- Na razie zobaczmy jeszcze jak są Jednak nie musimy się tym kłopotać
ite informacje potrzebne do debugo- rozmieszczone poszczególne elementy - na podstawie podanej w wywoła-
wania oraz pozwalające ocenić efek- kompilatora i gdzie szukać wymie- niu nazwy kostki konsolidator samo-
ty pracy kompilatora. Przykładowy nionych wcześniej narzędzi. czynnie wybiera odpowiedni zestaw
przebieg przetwarzania jest pokazany Rys. 2 przedstawia drzewko fol- z właściwego subfolderu (więcej na
na rys. 1. derów kompilatora. Nie wszystkie ten temat powiemy przy opisach
Najpierw pliki zródłowe poddawane subfoldery są dla nas jednakowo działania avr-ld).
są działaniu preprocesora, który reali- istotne ale do niektórych będziemy Teraz pozostaje już tylko pytanie
zuje zmiany w kodzie nakazane wpisa- często zaglądać. jak użyć tych wszystkich narzędzi
nymi przez nas dyrektywami: Główny folder został nazwany dla uzyskania pożądanego efektu.
 dołącza dodatkowe pliki z dyrektyw na podstawie użytych wersji narzę- Najbardziej podstawowym sposobem
#include, dzi (avr-gcc w wersji 3.4.2, binutils będzie kolejne wpisywanie potrzeb-
 wstawia definicje oraz rozwija ma- w wersji 2.15 i biblioteki avr-libc w nych komend w linii poleceń teksto-
kroinstrukcje z dyrektyw #define, wersji 1.0.4). W WinAvr powyższa na- wej konsoli. Taka metoda - chociaż
 uwzględnia odpowiednie fragmenty zwa głównego katalogu nie występuje dobra do przeprowadzenia ekspery-
kodu z dyrektyw kompilacji warun- - rolę tę pełni po prostu \WinAvr\, mentów edukacyjnych - jest zbyt
kowej #if #else #endif. jednak zasadnicza struktura drzewa uciążliwa i powolna przy praktycz-
Tak przygotowany kod poddawany subfolderów pozostaje taka sama. nym programowaniu - potrzebna jest
jest właściwej kompilacji czyli przeko- Dla użytkownika - programisty AVR nam automatyzacja całego procesu
dowaniu zapisu C na ciąg instrukcji najbardziej istotne są podkatalogi: kompilacji. Tradycyjnym i bardzo
asemblera (z przeprowadzeniem opty-  \bin\ - zawierający zestaw bezpo- rozpowszechnionym rozwiązaniem
malizacji - automatycznego uproszcze- średnio używanych programów na- jest zastosowanie programu narzę-
nia i skrócenia kodu), wynikiem tego rzędziowych avr-gcc i avr-binutils, dziowego make. Mówiąc w wielkim
są pośrednie pliki *.s.  \avr\include\ (oraz \avr\include\ skrócie jest to uniwersalny zarządca
Pliki asemblerowe podlegają na- avr\) - grupujący pliki nagłówko- procesów, który wykonuje po ko-
stępnie przetworzeniu na kod ma- we (headers) biblioteki avr-libc, lei zadania określone podanymi mu
szynowy (asemblacji). Powstałe pliki w szczególności pliki opisujące przy wywołaniu zasadami (rules).
*.o są na razie tzw. relokowalne zasoby poszczególnych kostek, Zasady te zapisujemy w określony
(przemieszczalne) - adresy zmiennych do których często zaglądamy dla sformalizowany sposób w tekstowych
i funkcji nie są jeszcze konkretnie sprawdzenia np. nazw rejestrów plikach makefile przygotowanych dla
ustalone (pozostają nadal określone czy wektorów przerwań, każdego projektu. Make jest bardzo
jedynie nazwami symbolicznymi uży-  \avr\lib\ldscripts\ - zawiera skrypty wszechstronnym i potężnym narzę-
tymi przez nas w programie). sterujące pracą konsolidatora (lin- dziem pozwalającym na praktycznie
Pliki relokowalne są łączone (linko- kera), w szczególności opisujące dowolne kształtowanie jego działania.
wane, konsolidowane) w następnej ope- wielkości poszczególnych obszarów Jednak ta zaleta potrafi stać się po-
racji - polega to właśnie na ulokowa- pamięci, jej podział na sekcje, ad- ważną wadą i przeszkodą przy roz-
niu wszystkich porcji kodu w obszarze resy początkowe i końcowe, poczynaniu nauki programowania -
pamięci programu oraz wyliczeniu i  \lib\gcc\avr\3.4.2\include - znajdzie- musimy na wstępie opanować dodat-
nadaniu symbolom określonych adre- my tu ogólne pliki nagłówkowe kowy spory zasób wiadomości. Poza
sów. Jednocześnie zostają dołączone gcc, nie powiązane bezpośred- tym make jest narzędziem typowo
wszelkie niezbędne funkcje biblioteczne nio z kostkami AVR ale często tekstowym - nie stanowi to żadnej
wykorzystywane przez nas (jawnie lub używane (np. przy zastosowaniu przeszkody dla miłośników Linuksa,
pośrednio) w programie, a także specy- zmiennych logicznych bool), ale przyzwyczajeni do interfejsów
ficzny dla danego typu mikrokontrolera  \doc\avr-libc\avr-libc-user-manual\ graficznych użytkownicy Windows
plik kodu inicjalizującego. - mieści aktualny opis funkcji mają prawo mieć inne zdanie (ab-
Wynikiem powyższych zabiegów bibliotecznych avr-libc oraz wiele solutnie nie mam zamiaru powracać
jest tzw. plik obiektowy (zazwyczaj istotnych szczegółowych informa- tu do odwiecznego sporu o wyż-
nadaje mu się rozszerzenie .elf), któ- cji dotyczących różnych aspek- szość jednego systemu nad drugim
ry zawiera wszelkie informacje o pro- tów programowania (jest to pozy- - stwierdzam po prostu fakt). W na-
jekcie (kod wynikowy, informacje dla cja obowiązkowa - tu zaglądamy szym kursie realizowanym na plat-
debuggera, wykaz symboli, rozmiary prawie codziennie). formie Windows wykorzystamy więc
poszczególnych sekcji kodu). Z infor- Pozostałe subfoldery zawierają inne narzędzie. Oczywiście w mia-
macji tych możemy korzystać według wewnętrzne podprogramy i biblioteki rę nabierania doświadczenia opano-
potrzeb dekodując potrzebne fragmen- gcc, wywoływane podczas kompilacji wanie make będzie również bardzo
ty za pomocą zbioru narzędzi binutils. w tle bez naszego bezpośredniego wskazane - ale to oddzielny temat i
Rysunek pokazuje tylko podstawowe udziału. w obecnym cyklu artykułów nie bę-
zastosowanie - utworzenie plików wy- Zwróćmy uwagę na dość tajem- dziemy się tym zajmować.
konywalnych wpisywanych przy po- nicze w pierwszej chwili oznacze- Jerzy Szczesiul, EP
mocy programatora do pamięci Flash nia: avr3 - avr4 - avr5. Wynikają jerzy.szczesiul@ep.com.pl
oraz EEPROM mikrokontrolera. one z przyjętego podziału szeregu
Elektronika Praktyczna 3/2005
83


Wyszukiwarka

Podobne podstrony:
Using the EEPROM memory in AVR GCC
AVR GCC w Linuksie przykład instalacji ze źródeł
Kurs AVR GCC cz 5
Kurs AVR GCC, cz 3
Kurs AVR GCC Wyświetlacz LCD od Nokii310
AVR GCC kompilator C dla mikrokontrolerów AVR, część 12
AVR GCC kompilator C dla mikrokontrolerów AVR, część 11
Kurs AVR GCC cz 2
AVR GCC cz7
AVR GCC cz8
AVR GCC cz5

więcej podobnych podstron