kursC czesc001

background image

36

Programowanie

E l e k t r o n i k a d l a W s z y s t k i c h

Kursów C jest mnóstwo zarówno w Inter−
necie, jak i w różnego typu publikacjach.
Ja jednak nie chcę się skupiać na C jako
takim. Przede wszystkim chcę pokazać,
w jaki sposób można w tym języku zapro−
gramować mikrokontroler.

Zajmiemy się mikrokontrolerem AVR

i kompilatorem GCC. Mimo iż C jest już
pewnym standardem, nie wszystko, o czym
będzie tutaj mowa, możesz przenieść bezpo−
średnio na inny kompilator. Musisz liczyć się
z tym, że poszczególne kompilatory od czy−
stego C muszą się troszkę zdystansować. Jest
to związane z występowaniem w mikrokon−
trolerach elementów nieujętych w standar−
dzie, jak na przykład układ przerwań. Na
wszelkie niestandardowe fragmenty postaram
się zwrócić Twoją uwagę.

Na początku może wydać się to trudne,

może nie wszystko z pierwszego kodu zro−
zumiesz... Umówmy się, że w chwili, gdy
trafisz na niezrozumiały fragment − po prostu
go przepiszesz... wyjaśnienie zapewne pojawi
się wcześniej czy później, a ja z doświadcze−
nia wiem, że nic bardziej nie cieszy, jak dzia−
łający układ... i nic lepiej nie uczy niż prak−
tyka.

Pewne podstawowe informację jak i cie−

kawostki oraz „rodzynki” będę umieszczał
w ramkach, tak że będziesz mógł do nich zaj−
rzeć, jeśli coś wyda się niejasne. Łatwo
będzie Ci także sięgnąć do tych informacji
w przyszłości, gdy zaczniesz pisać już
całkowicie samodzielne programy.

Zacznijmy więc... na trzy! Trzy kroki.

Krok pierwszy
− zbieranie narzędzi

a/. Pakiet WinAVR. Do kompilacji naszych
programów skorzystamy ze znakomitego
kompilatora AVR−GCC. Kompilator ten co
prawda potrafi „przełknąć” kod napisany w

większej ilości języków niż tylko C. Jednak
część z nich w wersji dla procesorów AVR
nie została do końca zaimplementowana, co
sprawia, że pisanie w nich programu wymaga
wiedzy nie tylko o danym języku, ale także
o istniejących ograniczeniach. Aby dłużej już
nie zaciemniać sprawy, umówmy się, że w tej
chwili będziemy korzystać tylko z kompilato−
ra C, pozwalając sobie czasami na niewielkie
ustępstwa pozwalające prościej zapisać jakąś
funkcję. w takim przypadku będę jednak
zaznaczał, że dana składnia nie jest zgodna ze
standardem ANSI C.

Pakiet zawierający AVR−GCC w wersji

dla Windows uzyskał nazwę WinAvr – warto
wiedzieć o tym przy poszukiwaniu odpowied−
nich plików. Cały pakiet
jest udostępniany na
licencji typu Open Sour−
ce.
Oznacza to, że osoba
czuwająca nad projektem
udostępnia cały jego kod
źródłowy. Praktycznie
każdy może wnieść do
programu coś nowego.
Nas jednakże w tej chwili
interesuje to, że kompila−
tor ten można ściągnąć
całkowicie za darmo. Nie
spotkasz się tutaj z ja−
kimikolwiek ogranicze−
niami, na przykład długo−
ści kodu wynikowego.
Pobieranie programu mo−
żesz rozpocząć od strony
domowej projektu:
http://winavr.sourcefor−
ge.net/

Strona jest dość przej−

rzysta. Warto zapamiętać
ten adres ze względu na
mnogość przydatnych

odnośników w dziale „Links”. Aktualnie jed−
nak proponuję przejście na stronę:

http://sourceforge.net/projects/winavr/

Jeśli nie widzisz linku na stronie domowej,

możesz także wpisać podany adres bezpo−
średnio w okienko przeglądarki. Powinieneś
ujrzeć teraz stronę podobną do tej na rysun−
ku 1.
Także na wspomnianym rysunku
w skrócie opisałem jak postępować dalej.

W chwili pisania tego kursu dysponowa−

łem wersją programu 20050214. Okazuje się,
że między kolejnymi wersjami pojawiają się
czasami różnice sprawiające, że poprzednio
napisany program nie zostanie skompilowany

P

P

P

P

rr

rr

o

o

o

o

g

g

g

g

rr

rr

a

a

a

a

m

m

m

m

o

o

o

o

w

w

w

w

a

a

a

a

n

n

n

n

ii

ii

e

e

e

e

p

p

p

p

rr

rr

o

o

o

o

c

c

c

c

e

e

e

e

ss

ss

o

o

o

o

rr

rr

ó

ó

ó

ó

w

w

w

w

w

w

w

w

jj

jj

ę

ę

ę

ę

zz

zz

yy

yy

k

k

k

k

u

u

u

u

C

C

C

C

Część 1

Panuje powszechna opinia, że C jest języ−
kiem bardzo trudnym. Mam nadzieję, że
szybko przekonam Cię, że wcale tak być
nie musi. Kurs ten ma ambicje stać prze−
dłużeniem i uzupełnieniem zakończonego
właśnie kursu mikroprocesorowej Oślej
łączki, gdzie wykorzystany był BASCOM
– dialekt języka BASIC. Czasami będę się
odwoływał do Twojej wiedzy na temat tego
właśnie języka. Chcę zaznaczyć jednak,
że wiedza ze wspomnianego kursu może
być pomocna w zrozumieniu tego, co chcę

przekazać, nie jest jednak bezwzględnie
konieczna.

Z zawartych tutaj informacji możesz

skorzystać, także jeśli znasz biegle język C,
ale nie programowałeś jeszcze w nim
mikrokontrolera. Także jeśli posługiwałeś
się do tej pory BASCOM−em lub asemble−
rem, możesz poznać zupełnie nowy, cieka−
wy sposób pracy. Nawet jeżeli masz już za
sobą napisanie niejednej aplikacji w C
działającej na mikrokontrolerze, możesz
znaleźć tutaj coś dla siebie. Przedstawię

bowiem trochę informacji o tym „jak to
działa od środka”, co pomoże w lepszym
zrozumieniu tego, co się dzieje z Twoim
programem.

Na początek pokażę Ci, jak zdobyć

i skonfigurować całkowicie za darmo i le−
galnie bardzo przyzwoite narzędzie pracy.
Następnie chwilkę poświęcimy temu,
z jakiego sprzętu będziemy korzystać
w najbliższym czasie. Po takim wstępie
spróbujemy napisać pierwszą, prostą apli−
kację.

Rys. 1 Strona ściągania kompilatora

WinAVR

background image

bez pewnych drobnych zmian. Jeśli pojawi
się jakikolwiek problem z kompilacją przed−
stawionych programów, proponuję Ci na
początek pobranie tej samej wersji kompilato−
ra. Po dokonaniu wyboru, zgodnie z rysun−
kiem 1,
pojawi się jedno z okienek przedsta−
wionych na rysunku 2. Wybieramy pasującą
nam opcję. Zostaniemy przekierowani do
strony z zapytaniem, z jakiego serwera chce−
my skorzystać. Wybieramy dowolny, najle−
piej w Europie. Po chwili powinno rozpocząć
się pobieranie pliku. Jak widać na przedsta−
wionych ilustracjach, najnowsza w chwili
pisania tego tekstu wersja miała rozmiar
14MB. Pobieranie może więc chwilę potrwać.

b/. AVRStudio4. Drugim pakietem, z któ−

rego będziemy korzystać, jest znakomite
AVRStudio. Dokładniej – skorzystamy z mo−
żliwości emulacji programu. Najnowszą wer−
sję AVRStudio udostępnia nieodpłatnie firma
ATMEL na swojej stronie domowej. Przy
odrobinie szczęścia program ten znajdziesz
na jakimś krążku w czasopiśmie, ważne jed−
nak, aby była to wersja minimum 4.10.
Dopiero ta wersja akceptuje format pliku,
z którego będziemy korzystać w celu emulo−
wania programu.

Mimo iż AVRStudio4 nie umożliwia

pisania programów w C, pozwala na bar−
dzo wygodną ich symulację. Uważam, że
dużo wygodniejszą niż miało to miejsce
w poprzedniku, który z kolei znakomicie
integrował się z dowolnym kompilatorem
C... o ironio...

Jeśli nie przeraża Cię pobranie z sieci

41MB danych – gorąco zachęcam Cię do
zassania najnowszej wersji oprogramowania
ATMEL−a. Ja w chwili pisania tego kursu
dysponowałem wersją 4.11 i dokładnie tej
wersji dotyczyć będzie dalszy opis. Poniżej

przedstawiam krok po kroku, jak pobrać
wspomniane oprogramowanie. Wejdź na stro−
nę główną firmy ATMEL:

www.atmel.com

Spójrz na rysunek 3. Pokazałem na nim

kolejne przejścia od strony głównej do strony
zawierającej informacje o procesorach AVR.
Poczekaj chwilę, aż nowa strona zostanie
władowana, następnie z pomarańczowego
menu po lewej stronie wybierz pozycję
„Tools & Software”. Po chwili pojawią się
dostępne narzędzia dla procesorów AVR. Bez
problemu powinieneś znaleźć tutaj AVR Stu−
dio 4. Nie przytaczam kolejnego
obrazka – przejście jest bardzo proste.
Znajdziesz się na stronie umożliwiają−
cej pobranie dokumentacji opisującej
interesujący nas program, dodatko−
wych wtyczek do niego oraz oczywi−
ście samego programu. Dla naszego
kursu znaczenie ma odnośnik w stylu:
AVR Studio 4.11 (build 401). Za krót−
ką lub też dłuższą chwilę – zależnie od
możliwości Twojego łącza oraz chwi−
lowego obciążenia sieci – powinieneś
dysponować już wszystkimi potrzeb−
nymi nam programami. Następnym
krokiem będzie ich instalacja oraz
konfiguracja.

Krok drugi
− instalacja i konfiguracja

Programy, których użyjemy, mają własne
instalatory, więc nie powinno być z nimi pro−
blemów. Przy AVRStudiu przyjmijmy zasa−
dę, aby nie przeszkadzać instalatorowi i zga−
dzać się na wszystkie jego domyślne propo−
zycje. Instalator WinAVR zaraz po pytaniu
o folder docelowy wyświetli okienko
„Wybór komponentów”. W okienku tym

polecam Ci odznaczenie opcji „Add Directo−
ries to PATH”.
Proponowane ustawienie
opcji przedstawiłem na rysunku 4. Osobiście
jestem przeciwnikiem dodawania czegokol−
wiek do PATH−a. Informację o tym dlaczego
mam takie obiekcje, znajdziesz w ramce
„PATH – co to takiego?”
. Przy sposobie,
w jaki będziemy używać kompilatora, dodat−
kowe utrudnienie będzie polegało tylko na
dodaniu jednej linijki do skryptu kompilacji.

PATH – co to takiego?

Zmienna systemowa PATH zawiera ścież−
ki, w jakich system ma szukać żądanego
programu. Jeśli chcesz się przekonać, jak to
działa, uruchom „Wiersz polecenia”
(
w starszych systemach będzie to „Tryb
MS−DOS”).
Wpisz teraz polecenie edit
i naciśnij ENTER. Pojawi się znany niektó−
rym edytor tekstowy. Możesz spróbować
także innych komend, na przykład mspa−
int, notepad.
Możesz próbować z poziomu
innego katalogu – zmień katalog polece−

niem cd.

Skąd system wie, gdzie ma

szukać informacji? Wyjdź z uru−
chomionego programu i wydaj
inną komendę: path. Dostaniesz
informację na temat co „siedzi”
we wspomnianej zmiennej.

Okazuje się, że w chwili gdy

wydajesz komendę edit, system
szuka wszelkich plików urucha−
mialnych o podanej nazwie
(edit.exe, edit.com, edit.bat).
Najpierw przeszukuje aktualny
folder. Jeśli nie znajdzie odpo−
wiedniego pliku, sięga do kolej−
nych ścieżek znajdujących się
w zmiennej PATH. Wpisy prze−
twarzane są w kolejności od
pierwszego do ostatniego.

WinAVR korzysta z tego udo−

godnienia, umożliwiając urucho−
mienie swojego programu o na−
zwie make.exe z poziomu folderu

37

Programowanie

E l e k t r o n i k a d l a W s z y s t k i c h

Rys. 4 Zmiany podczas instalacji

WinAVR

Rys. 3 Strona firmy

ATMEL

Rys. 2 Wybór konkretnego pliku

do pobrania

background image

zawierającego pliki naszego programu. Czy
teraz widzisz niebezpieczeństwo? Zastanów
się przez chwilę, co się stanie, jeśli w po−
dobny sposób zechcesz zainstalować kom−
pilator C dla procesorów 51, może ARM?
Zapewniam Cię, że nazwa make.exe wśród
kompilatorów nie jest wcale rzadka. Myślę,
że już zaczynasz rozumieć – w takim przy−
padku przy próbie kompilacji zostanie uru−
chomiony ten kompilator, który jako pierw−
szy wpisze swoje dane do PATH−a. Do
pozostałych będziesz mógł się dostać tylko
przez bezpośrednie podanie pełnej ścieżki.

Jak rozwiązać przedstawiony problem?

Dalej napiszemy banalne pliki wsadowe
które ustawią odpowiednio wspomnianą
zmienną tylko w chwili kompilacji i tylko
dla jej wątku. Nie tylko dodadzą odpowied−
nie katalogi. Po prostu ustawimy perma−
nentnie katalogi takie, jakie są nam potrzeb−
ne, zupełnie nie przejmując się poprzednią
zawartością zmiennej. W ten prosty sposób
ominiemy przedstawiony wyżej problem,
jednocześnie nie zmniejszając komfortu
obsługi naszych narzędzi. Ważne jest to, że
w systemie Windows takie przypisanie nie
przybiera formy stałej. Obowiązuje tylko
dla aktualnie działającego programu.

Na resztę warunków instalacji zgadzamy

się bez sprzeciwów. Na początkowym etapie
przygody z GCC dotyczy to także ścieżki
docelowej instalacji. Dalszy opis dotyczy
standardowo zainstalowanego kompilatora do
katalogu C:\WinAVR. Katalog instalacyjny
AVRStudio nie ma znaczenia. W tym miej−
scu oba programy powinny już być zainstalo−
wane. Zajmijmy się więc ich konfiguracją.

Na początek proponuję stworzenie pro−

ściutkiego skryptu, który przeprowadzi
wszystkie czynności mające na celu kompila−
cję dowolnego programu. Dalej opisane pliki
teoretycznie możesz umieścić gdziekolwiek.
Aby nie czynić zamieszania, proponuję Ci
zapisać je w katalogu C:\WinAVR. Uruchom
dowolny edytor tekstowy, najlepiej niech
będzie to prosty windowsowy Notatnik.
Wpisz w nim kod widoczny na listingu 1.

Uważaj: Bardzo ważny w pierwszej linii jest
brak spacji pomiędzy poszczególnymi ścież−
kami oraz naokoło znaku równości! Przy
zignorowaniu tego faktu skrypt może w ogóle
nie działać.
Po przepisaniu podanego listingu
zapisz plik w wybranym folderze – dla ujed−
nolicenia naszej sytuacji umówmy się, że
przynajmniej na początku zapiszesz plik tak
jak ja – w folderze C:\WinAVR, pod nazwą
make.bat. Pamiętaj o wpisaniu rozszerzenia
podczas zapisywania. Jeśli o tym zapomnisz,
plik zostanie zapisany z domyślnym rozsze−
rzeniem jako make.txt. Chwilowo jeszcze bez

wyjaśnień wpisz podobnie jak poprzednio
skrypt z listingu 2. Zapisz go jako
C:\WinAVR\clean.bat.

Gratuluję – właśnie stworzyłeś coś, co

nazwiemy skryptami kompilacji. Pierwszy z
nich spowoduje skompilowanie Twojego pro−
gramu. Drugi umożliwi automatyczne usunię−
cie wszystkich plików tworzonych przez
kompilator – czasami okazuje się to bardzo
wygodne. Jeśli będziesz chciał na przykład
zapisać na dyskietkę kopię swojego progra−
mu, nie musisz dodawać wszystkich plików
powstałych podczas kompilacji. Jedna
komenda i masz tylko to co najważniejsze.

Działanie powyższych skryptów jest tak

samo proste, jak ich napisanie. W pierwszej
linii obu z nich pojawia się ustawienie ścieżek,
których potrzebuje kompilator AVR−GCC.
Pamiętasz? Wspomniałem już o tym, że bę−
dziemy musieli to zrobić ręcznie. Następnie
wywoływane jest polecenie make.exe kompi−
latora. Plik, do którego się odwołujemy, znaj−
duje się w katalogu C:\WinAVR\utils\bin. Zależ−
nie od tego, z jakimi zostanie wywołany
parametrami, wywoła on inne programy
z pakietu kompilatora. Wydanie komendy
make.exe bez parametru, jest równoważ−
ne z komendą make.exe all. Powoduje
uruchomienie wszystkich procesów
koniecznych do kompilacji programu.
Automatycznie utworzone zostaną pliki,
które będziemy mogli wpisać do pamięci
docelowego urządzenia, oraz specjalny
plik umożliwiający symulację programu.
Z kolei, jak się łatwo domyślić, parametr
clean spowoduje usunięcie wszystkich
plików poza tymi, które utworzyliśmy
sami. Skrypty te należy uruchomić z kata−
logu zawierającego pliki programu.
Można to zrobić nawet bezpośrednio za
pomocą konsoli, a same pliki pisać w no−
tatniku... ale my mieliśmy stworzyć sobie
przyjemniejszy zestaw narzędzi. W celu
pisania kodu, jego kompilacji, wreszcie

zarządzania ca−
łym projektem,
w y k o r z y s t a m y
bardzo wygodny

i uniwersalny program o nazwie
„Programmers Notepad”. Korzy−
stam z tego narzędzia już od
dwóch lat i w tym czasie program
przeszedł wiele zmian. O ile na
początku praca była dość kłopotli−
wa, w tej chwili śmiało mogę
powiedzieć, że narzędzie jest
rewelacyjne – mam nadzieję, że
w najbliższym czasie uda mi się
przekonać Ciebie, że tak jest w is−
tocie. Na pulpicie powinien się
znajdować teraz skrót o nazwie

„Programmers Notepad”. Jeśli tak jest, uru−
chamiamy go. W przeciwnym przypadku uru−
chamiamy bezpośrednio plik

C:\WinAVR\pn\pn.exe.

Po pierwszym uruchomie−

niu program powinien wyglą−
dać mniej więcej tak jak na

rysunku 5. Ja pomniejszyłem okienko spe−
cjalnie, tak aby widoczne były wszystkie ele−
menty kontrolne, a jednocześnie obrazek nie
zajmował wiele miejsca. W celu „zbratania”
kompilatora z uruchomionym właśnie edyto−
rem wydajemy następujący ciąg komend:
Tools−>Options. W okienku, które się ukaza−
ło, wybieramy z listy po lewej stronie opcję
Tools. Upewniamy się, że w rozwijalnej liście
„scheme” podświetlone jest pole „(None –
Global Tools)”.
Na rysunku 6 umieściłem
okienko, jakie powinno się pojawić oraz spo−
sób jego wywołania. Zauważysz teraz, że in−
stalator domyślnie dodał do zestawu naszych
narzędzi trzy dotyczące naszego kompilatora.
Okazuje się jednak, że domyślne ustawienia
nie działają, jeśli podczas instalacji nie
zezwoliliśmy na dodanie wpisów do PATH−a.
Poza tym, narzędzia te można skonfigurować
troszkę wygodniej. Bez większego żalu

38

Programowanie

E l e k t r o n i k a d l a W s z y s t k i c h

Listing 1

@

set

PATH=C:\WinAVR\BIN;C:\WinAVR\UTILS\BIN;

make.exe

clean

Listing 2

@

set

PATH=C:\WinAVR\BIN;C:\WinAVR\UTILS\BIN;

make.exe

clean

Rys. 5 Programmers Notepad

Rys. 6 Wejście w konfigurację narzędzi

(Tools)

background image

zaznaczamy więc kolejno wszystkie wpisy,
przyciskając za każdym razem przycisk
Remove. Gdy mamy już puste pole, wybiera−
my, znajdujący się nieco wyżej, przycisk
Add. Pojawi się okienko „Właściwości: New
Tool”. Zakładkę „Properties” wypełnij tak,
jak to pokazałem na rysunku 7. Przy polu
Command znajduje się przycisk z trzema
kropkami. Możesz użyć go w celu znalezienia
naszego pliku make.bat. Pole Shortcut
wypełniamy w troszkę nietypowy sposób:
kliknij myszą na polu do wprowadzania
danych, a następnie – uwaga – przyciśnij
przycisk F7. I już. Możesz oczywiście spró−
bować innej kombinacji klawiszy.

Na kolejnej zakładce nie powinno być

potrzeby wprowadzania jakichkolwiek
zmian. Na wszelki wypadek jednak upewnij
się, że ustawienia są zgodne z tymi przedsta−
wionymi na rysunku 8. Jeśli wszystko się
zgadza, zatwierdzamy utworzenie nowego
narzędzia, klikając OK. Aktualnie mamy już

możliwość wygodnej kompilacji programu
z poziomu naszego „Notatnika”. Dodajmy
jeszcze możliwość wywołania drugiej z utwo−
rzonych przez nas komend.

W identyczny sposób jak poprzednio

dodaj nowe narzędzie. Edytuj ustawienia tak,
aby zgadzały się z tymi na rysunku 9. Za−
kładka „Console I/O” powinna być wypeł−
niona identycznie jak poprzednio. W okienku
tworzenia narzędzi całą naszą pracę potwier−
dzamy przyciskiem OK. W tej chwili nasz
„notatnik” jest już skonfigurowany i gotowy
do pracy.

Krok trzeci
− przygotowanie
części sprzętowej

Myślę, że wielu z Was ucieszy fakt, że dziś
skorzystamy z dokładnie tego samego sprzę−
tu, na jakim opierał się kurs BASCOM−a.
Osobom uczestniczącym do tej pory aktywnie
w poprzednim kursie umożliwi to natychmia−

stowe wypróbowanie nowej wiedzy. Jeśli do
tego zapoznałeś się z treścią artykułu „Progra−
mator BASCOM−a pomocą przy programo−
waniu w C, asemblerze, itd...” (EdW 1/2005)
– wierzę, że znakomicie poradzisz sobie
z dalszą częścią kursu.

Na rysunku 10 przedstawiam schema−

tycznie przyporządkowanie funkcji wypro−
wadzeniom procesora w płytce, której będzie−
my już za chwilę używać. Uprości to zrozu−
mienie (oraz pisanie ;]) kodów programów.
Natomiast na fotografii 1 możesz zobaczyć
sprzęt, z jakiego korzystałem przy wykony−
waniu pierwszego ćwiczenia. Przy okazji
Mikroprocesorowej Oślej łączki, w numerze
2/2003 wykonany był identyczny układ
– 5 diod z rezystorami ograniczającymi
(około 200

Ω) podłączonych anodami w stro−

nę wyjść Q2−Q6, a katodami w stronę wypro−
wadzenia GND. Przy odrobinie wprawy
układ można zmontować „na pająku” w 10
minut.

39

Programowanie

E l e k t r o n i k a d l a W s z y s t k i c h

GCC – idea pracy

Jeśli używałeś do tej pory kompilatora
BASCOM, prawdopodobnie przyzwyczaiłeś
się już do przyjemnego interfejsu użytkowni−
ka oraz przycisku „Compile current file...”.
GCC jest inny – chcę, abyś zrozumiał, że sam
kompilator praktycznie może działać bez
jakiegokolwiek środowiska programisty.
Przy odrobinie wprawy można uruchomić go
bezpośrednio z linii komend i w ten sposób
przeprowadzić kompilacje. Z drugiej jednak
strony możliwe jest wykorzystanie jakiego−
kolwiek zewnętrznego środowiska programi−
sty. Jednym z powodów tej swoistej uniwer−
salności GCC jest idea plików makefile. Plik
taki zawiera informacje, jakie narzędzia
powinny zostać uruchomione, jakie pliki
kompilować, w jaki sposób połączyć skompi−

lowane pliki w program (linkowanie), w ja−
kim formacie program powinien zostać
wygenerowany. W pliku makefile mogą zna−
leźć się także inne informacje – skorzystali−
śmy z jednej z nich, umożliwiającej nam
czyszczenie projektu. Wywoływana przez nas
komenda make jest w zasadzie interpreterem
plików makefile. Komenda ta poszukuje
w aktualnym katalogu pliku o nazwie makefi−
le
(brak rozszerzenia). Gdy go odnajdzie,
wykonuje zapisany w nim program.

Spodziewasz się prawdopodobnie, że

skoro taki plik zawiera tak dużą ilość infor−
macji, zapewne jest (po)tworem dość skom−
plikowanym. Jeśli tak myślisz... masz rację.
Nie przerażaj się jednak w tym momencie.
Twórcy WinAVR zadbali o to, aby ułatwić

nam zadanie. Stworzyli specjalny szablon,
bardzo łatwy i intuicyjny do modyfikacji.
W praktyce okazuje się, że nie będziemy
musieli modyfikować nic więcej niż kilka
pierwszych linii. Już za chwilę przekonasz
się, że po kilku praktycznych próbach pliki
makefile wydają się całkowicie naturalne.

*Przy pisaniu tekstu tej ramki korzysta−

lem z artykulu “Downloading, Installing and
Configuring WinAVR”, którego autorem
jest: Colin O’Flynn, edytorem: Eric Wed−
dington. Artykuł dostępny w dokumentacji
na stronie domowej projektu:
http://winavr.sourceforge.net/download/instal
l_config_WinAVR.pdf

Rys. 7 Narzędzie „make”

Rys. 8 Zakładka „Console I/O”

Rys. 9 Narzędzie „clean”

background image

Start!
− pierwszy program:

Nasz pierwszy programik, jak tradycja na−
kazuje, będzie banalny w swym działaniu.
Jego przeznaczeniem jest umożliwienie zapo−
znania się z najbardziej podstawowymi zagad−
nieniami C oraz z zasadami pracy z nowymi
narzędziami. Aby ułatwić Ci zadanie, na
rysunku 11 umieściłem opis krok po kroku, co
powinieneś zrobić żeby móc rozpocząć pisa−
nie nowego programu. W ramce „Plik make−
file” znajdziesz natomiast dokładny opis,
jakie zmiany powinieneś wprowadzić w tytu−
łowym pliku.

Obrazek opisujący kolejne kroki do rozpo−

częcia programu jednoznacznie przedstawia,
jak okiełznać Programmers Notepada w połą−
czeniu z WinAVR. Postaram się więc wyja−

śnić jedynie sens oraz celowość tych działań.
Przyzwyczaj się do tego, aby każdy nowy
program umieszczać w osobnym folderze.
Zauważ, że program kompilowany przez
GCC musi posiadać plik o nazwie makefile.
Bez tego nie jest możliwa jego kompilacja.
Ponieważ dla każdego programu plik ten
będzie miał różną formę, umieszczanie kilku
programów w tym samym katalogu wydaje
się nierealne. Nie jest to jednak żadnym ogra−

niczeniem. W praktyce umieszczanie więk−
szej ilości kodów w jednym folderze powo−
duje tylko bałagan na dysku. Tematowi pliku
makefile poświęciłem już dwie ramki. Na
rysunku 11 pokazuję jedynie, skąd skopio−
wać go do folderu naszego programu. Nie−
wiele natomiast wspominałem o projektach.
Jest to bardzo wygodne rozwiązanie od nie−
dawna dostępne w Programmers Notepadzie.
Plik projektu zawiera w zasadzie tylko opis,

40

Programowanie

E l e k t r o n i k a d l a W s z y s t k i c h

Plik makefile

Przygotowany przez twórców AVR−GCC
plik – szkielet zawiera wszystko co potrzeb−
ne, aby skompilować własną aplikację.
Powinien się on znajdować w katalogu
C:\WinAVR\sample. Zawiera bogate komen−
tarze, tak że nie ma problemu ze zrozu−
mieniem jego działania. W najprostszych
aplikacjach musisz znać jedynie jego pierw−
sze linie, które są przedstawione na rysunku
obok. Jeśli zmodyfikujesz je zgodnie z przy−
toczonym opisem, będziesz gotowy już do
tworzenia kodu aplikacji. Jeśli do tej pory
pisałeś programy za pomocą środowiska
BASCOM – zauważ, że za pomocą dość
wygodnego pliku tekstowego robisz właśnie
to, co do tej pory robiłeś za pomocą menu
okienkowego lub dodając odpowiednie
komendy sterujące w programie. Pamiętasz
komendy takie jak $crystal, $regfile...?
A może korzystałeś zawsze z ustawień
w menu Options−>Compiler−>Chip...? Teraz
robimy dokładnie to samo i jeśli zrozumiałeś
na czym polega konfiguracja kompilatora
BASCOM, teraz też poradzisz sobie bez
trudu.

Rys. 10 Przyporządkowanie

wyprowadzeń

background image

jakie pliki wchodzą w jego skład, ewentualnie
umożliwia ich ułożenie w wirtualnych folde−
rach. Gdy otworzymy zapisany projekt,
w okienku po lewej stronie będziemy mieli
wygodny dostęp do wszystkich potrzebnych
nam plików (porównaj rysunek 5). Myślę, że
tak jak ja przekonasz się, że jest to bardzo
przyjazna forma zarządzania projektem.

Dodatkowo nasze narzędzia kompilowa−

nia zostały wcześniej skonfigurowane w taki
sposób, że niezależnie od tego, jaki plik jest
aktualnie otwarty w edytorze, przy wydaniu
komendy kompilacji kompilowany będzie
program, który otwarty jest w oknie „Pro−
jects”
. W tej chwili może jeszcze tego nie
zauważasz, ale w przyszłości okaże się to
także drobną zaletą. Jeśli chcesz zobaczyć, co
dokładnie zawiera plik projektu – otwórz go
za pomocą zwykłego notatnika. Ja to zrobi−
łem z czystej ciekawości. W tym miejscu
zacząłbym nowy akapit, ale mogę się mylić.
Przyjmijmy na początek naszej przygody
z WinAVR założenie, zgodne z pomysłem
twórców, aby plik główny programu miał
nazwę taką samą jak projekt. Ułatwi to pisa−
nie aplikacji. Rysunek pokazuje, jak utworzyć
i zapisać plik kodu źródłowego. Pamiętaj, że
dopóki nie wydasz polecenia zapisania pliku
na dysk, plik ten istnieje tylko w pamięci
RAM komputera. Nie możesz dodać go do
naszego projektu. Ostatnia część instrukcji
przedstawionej na rysunku 11 przedstawia
proces dodawania plików do projektu. Po tej
czynności w panelu „Projects” pojawią się
wybrane pliki. Dwukrotnie kliknij plik make−
file
i zmodyfikuj go zgodnie z wcześniejszym
opisem w odpowiedniej ramce.

Od tej chwili mamy już gotowy szkielet

naszego programu. Jeśli nie wszystko wydaje
się jasne – nie przejmuj się. Przeczytaj ewen−
tualnie jeszcze raz wszystkie kroki, jakie nale−
ży wykonać. Ewentualnie spróbuj stworzyć
szkielet programu o innej nazwie. Tworzenie
nowego programu jest czynnością, którą
będziemy często powtarzać. Jednak nie będę
już tak dokładnie tego procesu opisywał.
Dopóki sprawia to jakieś problemy – śmiało
wracaj do tego opisu. Zobaczysz, że bardzo
szybko wszystkie przedstawione czynności
będziesz wykonywał niemal odruchowo.

Kliknij dwa razy na pliku hello.c znajdującym
się w panelu „Projects” – zostanie on otwarty.
Powiększ go tak, aby zajmował całe miejsce
dostępne do edycji. Jeśli wciąż masz otwarty
plik makefile, zauważysz teraz tuż poniżej
paska narzędzi zestaw zakładek pozwalają−
cych na przechodzenie pomiędzy otwartymi
plikami. Zauważ, co się dzieje, gdy wybie−
rzesz otwarty już plik za pomocą dwukrotne−
go kliknięcia w lewym panelu. Dzięki tym
kilku eksperymentom oswoisz się z działaniem
naszego edytora. W przyszłości pozwoli Ci to
szybciej wybierać do edycji potrzebne pliki.

Pewnie czekasz już tylko, kiedy wreszcie

coś napiszemy... Mam nadzieję, że tak jest –
ponieważ zrobimy to właśnie teraz.

Spójrz na listing 3. To jest nasz pierwszy

program. Wpisz go do otwartego wcześniej
pliku hello.c. Nie przejmuj się, nawet jeśli
przedstawiony kod nic Ci nie mówi. Wyja−
śnienie pojawi się za chwilę – gdy tylko zmu−
simy nasz program do działania. Teraz pamię−
taj tylko o tym, o czym wspomniałem w małej
ramce wcześniej: C uwzględnia wielkość liter
oraz kod powinien kończyć się znakiem
nowej linii.

Jeśli wszystko do tej pory skonfigurowałeś

zgodnie z opisem, powinieneś móc wywołać
kompilację za pomocą przycisku F7. Zrób to.

Działająca kompilacja zacznie wypisywać

wynik w znajdującym się na dole okienku

45

Programowanie

E l e k t r o n i k a d l a W s z y s t k i c h

Listing 3

Uważaj. Język C jest czuły na wielkość

liter. Oznacza to, że zapis int main(void) nie
jest równoważny z Int Main(VOID). Plik
źródłowy powinien się kończyć znakiem
końca linii. Oznacza to, że po napisaniu
wszystkiego powinieneś jeszcze nacisnąć
ENTER.

Nasze narzędzia są aktywne tylko wtedy,

gdy jakikolwiek plik jest otwarty do edycji.
W innym przypadku nie będzie możliwe ich
uruchomienie. Jeśli zamknąłeś wszystkie
pliki przed próbą wywołania kompilacji,
otwórz dowolny plik z projektu (na przykład
makefile).

Rys. 11 Schemat rozpoczęcia pracy

z nowym programem

#include <avr\io.h>

#include <avr\delay.h>

int

main(

void

)

{

/* Ustawienie wyjϾ */

DDRD =

0x7c

;

for

(;;)

{

/*wy³¹czenie diod*/

PORTD =

0x7c

;

_delay_loop_2(

0xffff

);

/*w³¹czenie diod*/

PORTD =

0

;

_delay_loop_2(

0xffff

);

}

return

0

;

}

background image

Output. Gdy wszystko przebiegnie prawidło−
wo, powinieneś ujrzeć na końcu podsumowa−
nie kompilacji oraz bardzo ważną dla nas
wiadomość:

> Process Exit Code: 0

Oznacza to w praktyce, że kompilacja

zakończyła się sukcesem. Jeśli ujrzysz inny
kod zakończenia procesu, oznacza to, że wy−
stąpił błąd uniemożliwiający dalszą kompila−
cję. W takim przypadku należy przewinąć
okienko wyniku do miejsca opisu znale−
zionych błędów. Będą one wyróżnione fio−
letowym kolorem. Możemy kliknąć myszą na
interesującym nas błędzie, a kursor zostanie
automatycznie przeniesiony do odpowiedniej
linii.

W tej chwili jednak program jest na tyle

prosty, że wierzę, iż nie sprawił problemu.
Gdyby jednak coś poszło nie tak, poniżej
przedstawiam kilka rozwiązań pro−
blemów, z którymi sam się spotka−
łem: Jeśli kompilacja nie może
zostać wywołana i program został
dopiero co zainstalowany – koniecz−
ny może być restart komputera.
Kilka razy przytrafił się taki problem
zaraz po zainstalowaniu najnowszej
wersji WinAVR. Jeśli i to nie poma−
ga – wróć do odpowiedniego śródty−

tułu i sprawdź konfigurację narzędzi. Wreszcie
– zabawna sytuacja, która raz doprowadziła
mnie prawie do rozpaczy... Sprawdź, czy
okienko Output nie jest tak pomniejszone, że
praktycznie niewidoczne – widoczny jest
wtedy jedynie jego pasek tytułowy, ale zawar−
tość już nie. Rozmiar okienka można zmieniać,
przeciągając je myszą za samą górę wspomnia−
nego paska. Wskaźnik myszy zmienia się
wtedy w pionową strzałkę.

To tyle szybkiej pomocy. Bardziej

zaawansowanymi problemami zajmiemy się
jeszcze później. Teraz praktycznie one nas nie
dotyczą. Koniec Twojego opisu przebiegu
kompilacji powinien wyglądać dokładnie tak
jak na rysunku 12.

Kompilator powinien wygenerować teraz

plik hello.hex. Zajrzyj do katalogu programu
i sprawdź, czy tak jest w rzeczywistości.
Osoby troszkę obeznane z programowaniem
na pewno już domyślają się, co się w nim
znajduje. Jest to plik przeznaczony dla pro−
gramatora. Wczytaj go do programu obsługu−
jącego Twój programator i wyślij do skon−
struowanego układu prototypowego. Sposób
posługiwania się programatorem w chwili
gdy posiadamy gotowy plik hex, opisałem do−
kładnie w artykule „Programator BASCOM−
a pomocą przy programowaniu w C, asem−
blerze, itd...” (EdW 1/2005).
Jeśli wszystko
poszło tak jak powinno, zobaczysz swoją
pierwszą „mrygałkę” stworzoną za pomocą C!

Jak to działa

Telegraficzny wyciąg informacji podsta−
wowych znajdziesz w ramce. Przeczytaj
zawarte tam informację. Powinieneś wiedzieć
już co nieco o składni naszego kodu. Ja napi−
szę, co się dzieje we wnętrzu głównej funkcji
programu. Na początku do rejestru o nazwie
DDRB wpisywane są jedynki tam, gdzie linie
portu chcemy ustawić jako wyjścia. Jest to
rejestr kierunku portu B. Jego oznaczenie jest
zgodne z oznaczeniem asemblerowym.
Posługujemy się tutaj liczbą zapisaną szes−
nastkowo. Porównaj zapisywaną liczbę

46

Programowanie

E l e k t r o n i k a d l a W s z y s t k i c h

„clock skew detected“

Czasami może zdarzyć się, że po zakończe−
niu kompilacji mimo jej prawidłowego prze−
biegu otrzymasz tytułowe ostrzeżenie. Pod−
czas kompilacji programu to, czy dany plik
zostanie ponownie skompilowany, jest opie−
rane na zapisanym w pliku czasie jego
modyfikacji. Okazuje się jednak, że w syste−
mie FAT informacja taka jest zapisywana
z rozdzielczością dwóch sekund. Niektóre ze
sterowników zaokrąglają prawdopodobnie
ten czas w górę. Zauważ teraz, że tak skonfi−
gurowaliśmy nasz edytor, że w chwili wywo−
łania kompilacji otwarte pliki są zapisywane.

Jeśli wystąpi opisana sytuacja z zaokrągle−
niem, program make może spostrzec, że dany
plik pochodzi z przyszłości! W praktyce więc
pojawiające się tytułowe ostrzeżenie możesz
zignorować. Jeśli korzystasz z systemu pli−
ków NFTS, problem nie powinien wystąpić.
Jeśli chcesz, możesz przeprowadzić w takiej
sytuacji czyszczenie (F8) i ponowną kompi−
lację – zapewnia to, że wszystkie pliki zosta−
ną ponownie przekompilowane.

*na podstawie FAQ z załączonej do
WinAVR dokumentacji

ABC... C

formaty liczb

Liczby w C można podać w trzech forma−
tach: dziesiętnym, szesnastkowym i rzadko
stosowanym ósemkowym. W pierwszym
przypadku liczbę zapisuje się bez żadnych
przedrostków. Aby zapisać liczbę szesnast−
kowo, trzeba ją poprzedzić przedrostkiem
0x, dla postaci ósemkowej będzie to samo
zero. Uważaj więc: Zapis 123 nie jest rów−
noznaczny z 0123.

Brak jednak możliwości zapisu binarne−

go. Zamiast tego najczęściej zapisuje się
liczbę szesnastkowo.

ABC... C

Trochę podstaw

w telegraficznym skrócie

Teraz opowiem Ci trochę o podstawach C na
podstawie naszego pierwszego programu.
W pierwszych liniach widzisz dyrektywy
#include nakazujące dołączenie plików
nagłówkowych do naszego programu. Aby
można było w kodzie użyć funkcji znajdują−
cych się w bibliotekach GCC, trzeba naj−
pierw dołączyć do kodu odpowiedni plik.
My w tym przypadku korzystamy z definicji
rejestrów specjalnych znajdujących się w
procesorze oraz z procedur generujących

opóźnienia. Jeśli chcesz już teraz poznać
wszystkie funkcje, jakie przygotowali twórcy
AVR−GCC, zajrzyj do pliku C:\WinAVR\doc\
avr−libc\avr−libc−user−manual.pdf.

Funkcja main − każdy program musi

zawierać funkcję o takiej nazwie. Niezależnie
od tego, w jakim miejscu została ona umiesz−
czona, wykonywanie programu rozpocznie
się właśnie od niej.

Nawiasy klamrowe {} oznaczają w tym

przypadku tak zwane ciało funkcji. Między
nimi muszą znajdować się instrukcję definiu−
jące
co ma zostać wykonane po ich wywołaniu.

Pojedyncza instrukcja w C zawsze koń−

czy się znakiem średnika. Możesz zapisać

kilka instrukcji w jednej linii. Ważne jest jed−
nak, aby zakończyć średnikiem każdą z nich.

Komentarze według standardu ANSI−C

należy zaczynać sekwencją /*, a kończyć */.
Większość kompilatorów dopuszcza użycie
znaków //, które oznaczają komentarz do
końca linii – jest to analogiczne do znaczka

‘

z BASCOM−a.

Aby wywołać jakąś funkcję, umieść jej

nazwę tak, jakby to była normalna instrukcja.
Parametry wpisz w nawiasach ( ) zaraz za
nazwą. Jeśli wywołujesz funkcję, która nie
wymaga parametrów, musisz umieścić puste
nawiasy. Nawiasy ( ) nazywane są często
operatorem wywołania.

Rys. 12 Przebieg kompilacji

background image

z rysunkiem 10, zajrzyj do ramki mówiącej
o formatach liczb.

Pętlę typu for powinieneś już znać choćby

z BASCOM−a. W C pętla taka bez podania
jakichkolwiek warunków (w nawiasie) jest
przeznaczona specjalnie do tworzenia pętli
nieskończonych. Nawiasy klamrowe pod
instrukcją for wyznaczają ciało pętli (patrz też
ramka o instrukcjach złożonych). W pętli
zapisujemy kolejno do portu wyjściowego
jedynki i zero. Między tymi instrukcjami
odczekujemy pewien czas.

Funkcja _delay_loop_2 nie jest standar−

dową instrukcją C. Jest to dodatkowa funkcja
zewnętrzna, z której możemy skorzystać
dzięki dołączeniu nagłówka <avr\delay.h>.
Zauważ tutaj, że parametr wywoływanej
funkcji podany jest w zapisie szesnastkowym.
Dzięki temu łatwo można określić maksymal−
ną, możliwą do uzyskania wartość opóźnie−
nia. Jest to chyba bardziej intuicyjne niż zapis
dziesiętny: 65535.

Program kończy się instrukcją return 0.

Instrukcja ta powoduje opuszczenie funkcji
i zwrócenie przez nią podanej wartości.
Zauważ, że nie ma sensu kończenie funkcji
main. Zapis taki jest w naszym przypadku
w zasadzie tylko formalnością. Standard tego
wymaga. Kompilator doskonale zdaje sobie
sprawę, że nie ma dokąd wracać. Instrukcja
return spowoduje więc utworzenie tak zwa−
nej martwej pętli i program się zatrzyma.
Jeśli jednak jest to zbędne, to instrukcja ta
nie zmarnuje cennych zasobów. Wyjaśnienie
znajdziesz w ramce „Jak ten GCC to robi”.

Symulacja programu

Odłóżmy na chwilę C jako taki i powróćmy
do naszych narzędzi. Często możliwość prze−
prowadzenia symulacji działania programu
okazuje się niezbędna do jego uruchomienia.
Do tego celu przyda się wygenerowany plik
hello.elf.

Uruchom teraz AVRStudio. Jeśli nic nie

zmieniałeś w jego ustawieniach, pojawi się
okienko pozwalające Ci na utworzenie nowe−
go projektu lub też wybranie jakiegoś wcze−
śniej otwartego. Znajdziesz przycisk Open.
Kliknij go. Jeśli jednak wspomniane okienko
nie jest dostępne, nie przejmuj się. Otworzyć
wybrany plik możesz także nieśmiertelną
sekwencją File−>Open File... W każdym
przypadku pojawi się okienko wyboru pliku.
Wybierz plik hello.elf.

Uważaj! Jeśli otwierasz plik za

pomocą menu, okienko wyboru
pliku będzie troszkę bardziej
skomplikowane. Zalecane usta−
wienia możesz zobaczyć na rysun−
ku 13.
Po otwarciu wybranego
pliku program automatycznie roz−
pozna, że zawiera on dane dla
symulatora. Powinno pojawić się
okienko takie jak na rysunku 14.
Rysunek ten pokazuje też ustawie−
nia, jakie powinieneś wprowadzić
dla naszego kodu. Chwilę po
wybraniu przycisku Finish symu−
lator zostanie zainicjowany.

Powinno zostać otwarte okno z podglądem
głównego pliku kodu źródłowego. Zauważ
teraz, że z lewej strony znajduje się żółta
strzałka. Zapewne pamiętasz podobną strzałkę
z emulatora BASCOM−a. Wskazuje ona punkt
programu, w którym aktualnie znajduje się
nasz wirtualny procesor. Symulator już nadaje
się do pracy. Pozostaje jeszcze mała formal−
ność którą dobrze jest wypełnić. Wybierz
z menu Debug−>AVR Simulator Options lub
też szybciej: skorzystaj ze skrótu klawiaturo−
wego ALT+O. Okienka, które się pojawi, nie
prezentuję. W tej chwili zawiera ono tylko
dwie opcje. Ustaw częstotliwość pracy układu
na 4MHz. Dzięki temu czas symulacji wyli−
czany przez AVRStudio będzie prawidłowy.

Zanim zajmiemy się symulowanym wyko−

nywaniem naszego programu, przyjrzyj się
zakładce po lewej stronie. Nosi ona nazwę
„Workspace”. Jeśli nie posiadasz takiego
okienka – spróbuj je uruchomić, włączając
opcję View−>Workspace. Na rysunku 15
przedstawiłem Ci najbardziej interesujące nas
informacje dostępne z poziomu wspomniane−
go panelu. Pod zakładką Project znajdziesz
wszystkie pliki naszego programu, do jakich
symulatorowi udało się dotrzeć. Dwukrotne
kliknięcie na którymś z nich powoduje jego
otwarcie. Z punktu widzenia symulacji dużo cie−
kawsza jest zakładka I/O. Umożliwia ona pod−
gląd oraz wpływ na stan wszystkich rejestrów

47

Programowanie

E l e k t r o n i k a d l a W s z y s t k i c h

C zwany jest przez niektórych asemblerem
wysokiego poziomu. Jest w tym stwierdze−
niu sporo racji. Zauważ, że brak tutaj funk−
cji znanych z BASCOM−a automatycznie
ustawiających część sprzętową. Tutaj
musisz wiedzieć co nieco o procesorze, któ−
rego używasz, a wszelką konfigurację
będziesz musiał przeprowadzić niejako
ręcznie.

Jak ten GCC to robi

GCC stara się oszczędzać pamięć proceso−
ra jak to tylko możliwe. Mimo tego, że
w przykładowym programie instrukcja
return istnieje, nie zostanie ona uwzględ−
niona w kodzie wynikowym. Kompilator
po prostu „zauważył”, że wyżej znajduje się
pętla nieskończona i program nigdy nie
wydostanie się poza nią.

Rys. 13 Wybór pliku do symulacji

Rys. 14 Wybór symulatora programowego

ABC... C

instrukcje proste, instrukcje złożone

O instrukcji prostej już pisałem. Każda taka instrukcja koń−
czy się znakiem średnika i wyznacza pewną elementarną
czynność, jaką możesz wykonać. Czasami jednak zdarza
się, że w miejscu, gdzie formalnie można umieścić jedną
instrukcję, my chcielibyśmy umieścić ich więcej. Między
innymi do takiego celu zostały stworzone instrukcje złożo−
ne. Instrukcję taką tworzy się, biorąc w klamerki {} ciąg
instrukcji prostych. Przykład widzisz w naszym programie.
Dla pętli nieskończonej instrukcja for ma składnię:

for

(;;) instrukcja

Jak widzisz, w przykładowym programie zamiast

instrukcji pojedynczej skorzystaliśmy z instrukcji złożonej.

background image

wewnętrznych naszego procesora. Śmiało –
porozwijaj inne opcje niż te, które udało mi
się zamieścić na ilustracji.

Po tym krótkim oswojeniu AVRStudia przy−

stąpmy do rozpoczęcia właściwej symulacji.

Na rysunku 15 widzisz opcję I/O

AT90S2313−>PORTD. Rozwiń ją. Poza tym
interesować nas będzie także ile czasu upłynę−
ło w czasie wykonywania instrukcji. Opcję tę
zaznaczyłem na rysunku. Od tej chwili możesz
symulować przebieg programu, obserwując
jednocześnie najważniejsze z naszego punktu
widzenia elementy. W czasie symulacji pro−
gram najczęściej będziesz wykonywał krok
po kroku. Zobacz, jakie sposoby wykonania
kroku oferuje Ci AVRStudio – rozwiń menu
Debug. Z BASCOM−a powinieneś znać przy−
najmniej „Step Into” oraz „Step Over”. W
praktyce są one na tyle ważne, że warto zapa−
miętać ich skróty klawiaturowe. Pierwszy to
F11, drugi F10. Spróbuj przejść przez symu−
lację naszego programu za pomocą klawisza
F10. Po kilku krokach prawdopodobnie czeka
Cię niespodzianka. Mimo wybrania metody
poruszania się przez program, która teore−
tycznie zapewnia omijanie wszelkich wejść
do podprogramów, emulator wskoczył jednak
do funkcji opóźniającej. Jest to związane ze
słówkiem inline, które pojawia się przed defi−
nicją wywoływanej funkcji. Jego znaczenie
omówię jednak w jednej z przyszłych części
tego cyklu.
Symulacja tej funkcji krok po
kroku jest bardzo uciążliwa – jej pętla będzie
przecież powtarzana ponad 64 tysiące razy!

Z opresji możemy wyjść się na dwa spo−

soby:

1. Zamknij okno z kodem procedury opóź−

nienia. Następnie w kodzie głównym ustaw
kursor tuż na następnej pozycji – niech nie
będzie to linia komentarza – powinna to być
kolejna instrukcja. Teraz wybierz z menu
Debug funkcję „Run To Cursor”. Jeśli
w okienku Output – na dole AVRStudio – nie
pojawił się napis jak na rysunku 16, nasz
program zacznie wykonywać się w trybie
ciągłym. Może to trochę potrwać, jednak
w ostateczności zatrzyma się dopiero po
zakończeniu instrukcji opóźnienia.

2. Początek identyczny jak wyżej. Po

umieszczeniu kursora na następnej pozycji
wstawimy tutaj tak zwany „punkt wstrzyma−
nia”. Najszybciej zrobisz to klawiszem F9.
Jeśli zrobisz to prawidłowo, wybrana linia
zostanie oznaczona jak widać to na rysunku
17.
Uruchamiamy teraz program w trybie
pracy ciągłej (znów najszybciej przez F5).
Symulator zatrzyma się dopiero na oznaczo−
nej linii. Zauważ, że nie w każdej linii możesz
umieścić punkt wstrzymania. Spróbuj sam,
gdzie jest to możliwe.

Osobiście częściej nawet niż z samej

symulacji korzystam z możliwości wygodne−
go podejrzenia tego, co stworzył kompilator
w asemblerze. Umożliwiają to komendy
View−>Disassembler. Zobaczysz wtedy mie−
szany kod C razem z odpowiednikiem
w asemblerze. Jest to bardzo wygodny i czy−
telny sposób przedstawienia. Zauważ, że
funkcja ta nie jest dostępna, gdy symulacja
jest wyłączona. Jeśli tak się stało – uruchom

ją ponownie po−
leceniem „Start
debugging”.

W następnych

odcinkach będę
starał się już uni−
kać opisywania
samego AVRStu−
dio. Program ten
posiada znako−
mitą instrukcję,
która powinna
wyjaśnić więk−
szość wątpliwo−
ści. Tutaj moim
celem było umo−
żliwienie Ci „łat−
wego startu”.
Nie zawsze po−
dawałem naj−
prostszą drogę
do poszczegól−
nych komend –
wiele z nich jest
dostępnych z po−
ziomu paska na−
rzędzi – postaraj
się samodzielnie
je odnaleźć.

WinAVR + AVRStudio
– konkluzja

Może wydaje Ci się, że takie składane śro−
dowisko nie jest zbyt wygodne. W praktyce
okazuje się, że praca jest całkiem przyjemna.
Gdy podczas symulacji wykryjesz jakiś błąd,
przełącz się na Programmers Notepada. Do−
konaj koniecznych poprawek i skompiluj pro−
gram. Następnie przełącz się zpowrotem na
AVRStudio. Program automatycznie wykryje
zmianę w pliku elf i zapyta, czy chcesz wczy−
tać jego nową wersję. Po odpowiedzi twier−
dzącej wszystkie zmiany, jakie wprowadziłeś,
pojawią się w symulacji. Uważaj tutaj jedynie
na sytuację, gdy symulator jest całkowicie
zajęty odtwarzaniem programu. Wtedy może
nie reagować na zmianę pliku. W takim przy−
padku po prostu zatrzymaj jego pracę. Wtedy
zmiana powinna zostać zauważona. Gdy
zamkniesz AVRStudio, utworzony zostanie
plik z rozszerzeniem aps. Gdy go otworzysz,
wszystkie ustawienia zostaną odtworzone
i automatycznie zostanie zainicjowana symu−
lacja.

Mimo iż dziś stworzyliśmy bardzo prosty

programik, nie bądź tym faktem zawiedziony.
Dziś zapoznałeś się z narzędziami, jakich
będziemy używać. Oswoiłeś się z nietypo−
wym sposobem pracy. Nauczyłeś się edyto−
wać plik makefile. A przede wszystkim może
już stwierdzasz, że C nie jest wcale taki
straszny, jak twierdzą niektórzy.

A ciekawsze programy jeszcze napi−

szemy...

Radosław Koppel

48

Programowanie

E l e k t r o n i k a d l a W s z y s t k i c h

Rys. 15 Panel „Workspace”

Rys. 16 Zły wybór linii zatrzymania

Rys. 17 Punkt wstrzymania


Wyszukiwarka

Podobne podstrony:
kursC czesc007
kursC czesc006
kursC czesc003
kursC czesc006a przeprowadzka
kursC czesc000 programowanie
kursC czesc018
kursC czesc008
kursC czesc002
kursC czesc013
kursC czesc011
kursC czesc010
kursC czesc007
kursC czesc018

więcej podobnych podstron