Professional Documents
Culture Documents
moemy bez problemu poczy najwiksze zalety obu sposobw programowania. Nastpna sprawa to przenono. Znaczne fragmenty kodu (a
szczeglnie algorytmy, przeliczenia,
konwersje itp. - czyli elementy nie
korzystajce bezporednio ze specyficznych zasobw i interfejsw danego mikrokontrolera) moemy atwo
zastosowa w programie dla zupenie innej kostki (praktycznie kada
rodzina mikrokontrolerw posiada
opracowany kompilator C - z innymi jzykami nie jest tak dobrze). Tu
od razu przechodzimy do nastpnej
zalety C: rozpowszechnienia. C jest
od lat oglnie przyjtym standardem
programowania z czym wie si
ogromna ilo dostpnych materiaw: bibliotek, przykadowych kodw,
opisw, tutoriali, gotowych rozwiza
sprztowo - programowych. W wielu
przypadkach wystarczy dobrze poszuka w zasobach sieciowych eby
znale prawie gotowe rozwizania
wasnych zada programowych.
Po trzecie: dlaczego kompilator
avr-gcc (o ktrym kr opinie, e
jest niewdziczny i trudny w konfiguracji i obsudze) a nie jakie inne
rozpowszechnione narzdzie - jak np.
CodeVision czy ICC? Jednym z koronnych argumentw jest oczywicie
fakt, e avr-gcc jest bezpatny. Ale
to nie wszystko: jest to narzdzie
dostpne dla wielu platform (wic
bez problemu moemy przenosi si
z naszymi projektami pomidzy np.
Windows a Linuksem). Przy tym avr-gcc jest produktem open-source, z
czym wie si cay szereg udogodnie: mamy cay czas dostp do najnowszych uaktualnie, penej informacji o wykrytych bdach, a take
do ogromnych zasobw bardziej lub
mniej zaawansowanego kodu tworzonych i oferowanych do swobodnego wykorzystywania, moemy te
cay czas liczy na wsparcie i podpowiedzi na aktywnie dziaajcych
81
KURS
82
Avr-gcc okrelamy oglnym mianem kompilatora - jednak w rzeczywistoci jest to cay szereg wsppracujcych ze sob narzdzi i bibliotek uywanych w odpowiedniej
kolejnoci i z potrzebnymi opcjami
(waciwy kompilator avr-gcc, zestaw narzdziowy avr-binutils oraz
biblioteki dla rodziny AVR avr-libc).
Celem jest przetworzenie kodu rdowego C zapisanego w jednym lub
wielu plikach projektu na wynikowe
pliki: kodu wykonawczego wpisywanego do pamici Flash wybranego
KURS
modelu mikrokontrolera oraz (ewentualnie) danych wpisywanych do
wewntrznej pamici EEPROM. W
trakcie powstaje take szereg pomocniczych plikw zawierajcych rozmaite informacje potrzebne do debugowania oraz pozwalajce oceni efekty pracy kompilatora. Przykadowy
przebieg przetwarzania jest pokazany
na rys. 1.
Najpierw pliki rdowe poddawane
s dziaaniu preprocesora, ktry realizuje zmiany w kodzie nakazane wpisanymi przez nas dyrektywami:
docza dodatkowe pliki z dyrektyw
#include,
wstawia definicje oraz rozwija makroinstrukcje z dyrektyw #define,
uwzgldnia odpowiednie fragmenty
kodu z dyrektyw kompilacji warunkowej #if #else #endif.
Tak przygotowany kod poddawany
jest waciwej kompilacji czyli przekodowaniu zapisu C na cig instrukcji
asemblera (z przeprowadzeniem optymalizacji - automatycznego uproszczenia i skrcenia kodu), wynikiem tego
s porednie pliki *.s.
Pliki asemblerowe podlegaj nastpnie przetworzeniu na kod maszynowy (asemblacji). Powstae pliki
*.o s na razie tzw. relokowalne
(przemieszczalne) - adresy zmiennych
i funkcji nie s jeszcze konkretnie
ustalone (pozostaj nadal okrelone
jedynie nazwami symbolicznymi uytymi przez nas w programie).
Pliki relokowalne s czone (linkowane, konsolidowane) w nastpnej operacji - polega to wanie na ulokowaniu wszystkich porcji kodu w obszarze
pamici programu oraz wyliczeniu i
nadaniu symbolom okrelonych adresw. Jednoczenie zostaj doczone
wszelkie niezbdne funkcje biblioteczne
wykorzystywane przez nas (jawnie lub
porednio) w programie, a take specyficzny dla danego typu mikrokontrolera
plik kodu inicjalizujcego.
Wynikiem powyszych zabiegw
jest tzw. plik obiektowy (zazwyczaj
nadaje mu si rozszerzenie .elf), ktry zawiera wszelkie informacje o projekcie (kod wynikowy, informacje dla
debuggera, wykaz symboli, rozmiary
poszczeglnych sekcji kodu). Z informacji tych moemy korzysta wedug
potrzeb dekodujc potrzebne fragmenty za pomoc zbioru narzdzi binutils.
Rysunek pokazuje tylko podstawowe
zastosowanie - utworzenie plikw wykonywalnych wpisywanych przy pomocy programatora do pamici Flash
oraz EEPROM mikrokontrolera.
Do tych - na razie bardzo skrtowych i oglnych informacji - bdziemy wielokrotnie wraca w trakcie
omawiania przykadowych projektw.
Na razie zobaczmy jeszcze jak s
rozmieszczone poszczeglne elementy
kompilatora i gdzie szuka wymienionych wczeniej narzdzi.
Rys. 2 przedstawia drzewko folderw kompilatora. Nie wszystkie
subfoldery s dla nas jednakowo
istotne ale do niektrych bdziemy
czsto zaglda.
Gwny folder zosta nazwany
na podstawie uytych wersji narzdzi (avr-gcc w wersji 3.4.2, binutils
w wersji 2.15 i biblioteki avr-libc w
wersji 1.0.4). W WinAvr powysza nazwa gwnego katalogu nie wystpuje
- rol t peni po prostu \WinAvr\,
jednak zasadnicza struktura drzewa
subfolderw pozostaje taka sama.
Dla uytkownika - programisty AVR
najbardziej istotne s podkatalogi:
\bin\ - zawierajcy zestaw bezporednio uywanych programw narzdziowych avr-gcc i avr-binutils,
\avr\include\ (oraz \avr\include\
avr\) - grupujcy pliki nagwkowe (headers) biblioteki avr-libc,
w szczeglnoci pliki opisujce
zasoby poszczeglnych kostek,
do ktrych czsto zagldamy dla
sprawdzenia np. nazw rejestrw
czy wektorw przerwa,
\avr\lib\ldscripts\ - zawiera skrypty
sterujce prac konsolidatora (linkera), w szczeglnoci opisujce
wielkoci poszczeglnych obszarw
pamici, jej podzia na sekcje, adresy pocztkowe i kocowe,
\lib\gcc\avr\3.4.2\include - znajdziemy tu oglne pliki nagwkowe
gcc, nie powizane bezporednio z kostkami AVR ale czsto
uywane (np. przy zastosowaniu
zmiennych logicznych bool),
\doc\avr-libc\avr-libc-user-manual\
- mieci aktualny opis funkcji
bibliotecznych avr-libc oraz wiele
istotnych szczegowych informacji dotyczcych rnych aspektw programowania (jest to pozycja obowizkowa - tu zagldamy
prawie codziennie).
Pozostae subfoldery zawieraj
wewntrzne podprogramy i biblioteki
gcc, wywoywane podczas kompilacji
w tle bez naszego bezporedniego
udziau.
Zwrmy uwag na do tajemnicze w pierwszej chwili oznaczenia: avr3 - avr4 - avr5. Wynikaj
one z przyjtego podziau szeregu
83