Mikrokontrolery_ARM_cz8.pdf

(541 KB) Pobierz
101-103_arm_cz8.indd
K U R S
Mikrokontrolery
z rdzeniem ARM, część 8
Pierwszy projekt
Przechodzimy do pierwszego
projektu na ARM-y – będą to
banalne efekty „choinkowe” na
diodach świecących, ale w pełni
ilustrujące sposób korzystania
z możliwości środowiska Eclipse.
nie pliki startowe dostosowane do
konkretnego modelu. Inaczej jest
w przypadku wykorzystania pakie-
tu gnuarm, który jest przeznaczo-
ny nie dla konkretnego typu mi-
krokontrolerów jednego producenta,
ale dla różnych odmian pochodzą-
cych od różnych producentów. Je-
dyną ich cechą wspólną jest rdzeń
ARM natomiast sposób inicjalizacji,
peryferia, mapa pamięci mogą być
zupełnie odmienne, dlatego pliki
startowe musimy stworzyć samo-
dzielnie. Pliki, jakie musimy stwo-
rzyć to: Skrypt linkera, w którym
zawarte są informacje o umiesz-
czeniu w pamięci poszczególnych
sekcji danych oraz kodu programu.
Plik startowy, w którym zawar-
ty jest startowy kod inicjalizujący
peryferia mikrokontrolera takie jak
pętla PLL czy kontroler pamięci
MAM oraz inicjalizujący obsza-
ry pamięci zgodnie ze standardem
ANSI C/C++. Pisząc nowy projekt
nie będziemy musieli tworzyć od
nowa plików startowych, wystarczy,
że stworzymy je jednorazowo dla
danej rodziny mikrokontrolerów,
a później będziemy je kopiować do
nowego projektu. Pierwszym pro-
gramem, jakim zajmiemy się na
łamach niniejszego kursu będzie
przykładowy program zapalający po
kolei diody LED umieszczone w ze-
stawie ZL6ARM ( www.kamami.pl ).
Będzie on nam mógł później po-
służyć jako wzorzec przy tworze-
niu własnych projektów. Wykorzy-
stywać będziemy pliki startowe
oraz plik reguł makefile tak, aby
za każdym razem nie tworzyć ich
od nowa. Na początek opiszemy,
w jaki sposób stworzyć najprostszy
projekt w Eclipse , a następnie zaim-
portujemy do niego wszystkie pliki
z przykładowego projektu błyska-
jącego diodami, skompilujemy go,
oraz zaprogramujemy pamięć Flash
mikrokontrolera obserwując efekt
działania programu. Po urucho-
mieniu Eclipse wybieramy z me-
nu polecenie File->New->Project .
Pisząc programy dla mikrokon-
trolerów AVR z użyciem kompila-
tora avr-gcc musieliśmy stworzyć
tylko plik makefile określający za-
leżności kompilacji pomiędzy pli-
kami, oraz pliki samego projektu.
Pozostałe elementy niezbędne do
prawidłowego przebiegu kompilacji
(plik startowy oraz skrypty linke-
ra) zawarte były w samym pakie-
cie WinAVR . Na podstawie opcji
–m określającej typ procesora były
automatycznie pobierane odpowied-
Rys. 21.
Pokaże nam się okno dialogowe,
z którego wybieramy opcję: Stan-
dard Make C++ Project . Następnie
klikamy przycisk Next> , pojawi się
wówczas kolejne okno dialogowe.
W polu tekstowym Project Name
wpisujemy nazwę projektu np.
Ledy i wciskamy klawisz Finish , co
spowoduje utworzenie nowego pu-
stego projektu. Kolejną czynnością
jest import plików do projektu.
Możemy tego dokonać klikając pra-
wym przyciskiem myszy na otwar-
tym projekcie (tak jak przedstawio-
no na rys. 20 ), a następnie wybrać
polecenie Import .
Pojawi się okno dialogowe,
z którego wybieramy opcję Archive
File , wówczas zobaczymy kolejne
okno, w którym klikamy przycisk
Browse i wybieramy plik ep3.zip
z przykładowym projektem , któ-
ry można ściągnąć ze strony EP
w dziale Download . Po prawej stro-
nie pokaże się lista plików znajdu-
jących się w archiwum ( rys. 21 ).
Ponieważ wykorzystywać będzie-
my gotowy program pozostawiamy
zaznaczone wszystkie pliki i wci-
skamy klawisz Finish . Gdybyśmy
mieli zamiar tworzyć własny pro-
jekt powinniśmy odznaczyć plik
led.cpp , który jest przykładowym
programem mrugającym diodami
LED. Pozostałe pliki są plikami
niezbędnymi do przeprowadzenia
Rys. 20.
Elektronika Praktyczna 7/2006
101
197729906.010.png 197729906.011.png 197729906.012.png
K U R S
Tab. 4. Pliki projektu i ich funkcje
Nazwa pliku Przeznaczenie
boot.s
Plik startowy inicjalizujący układy peryferyjne mikrokontrolerów LPC213x oraz
inicjalizujący pamięć RAM zgodnie z wymaganiami standardu ANSI C/C++
Plik dla linkera określający, w jaki sposób rozmieścić poszczególne segmenty
w pamięci. Jest on skonfigurowany tak, aby program idane stałe były umiesz-
czone w pamięci Flash, natomiast zmienne umieszczone zostaną w pamięci
RAM.
lpc213x.h Plik nagłówkowy, zawierający definicję rejestrów mikrokontrolerów LPC213x
makefile Plik konfiguracyjny dla narzędzia make służącego do określenia zależności
pomiędzy plikami projektu
led.cpp Przykładowy program mrugający diodami (efekt węża świetlnego)
Rys. 22.
procesu kompilacji. Po tej czynno-
ści możemy przystąpić do kompi-
lacji projektu, czego możemy do-
konać wydając z menu polecenie
Project->Build All . Jeżeli wszystko
przebiegło poprawnie projekt zosta-
nie skompilowany w wyniku, cze-
go powstanie plik ledtst.hex . Jeżeli
wystąpił błąd podczas kompilacji,
w zakładce Problems pojawi się
opis błędu. Po kliknięciu na wy-
branym komunikacie zostaniemy
przeniesieni linii, w której wystąpił
błąd.
Bardzo ciekawą i przydatną
funkcją Eclipse są inteligentne
podpowiedzi, które podpowiadają
programiście, jakie metody i pola
znajdują się w danej klasie/struktu-
rze. Po prawej stronie umieszczo-
na jest zakładka Outline , w której
w sposób graficzny przedstawiono
poszczególne klasy, zmienne, funk-
cje definicje itp. Pozostało nam
teraz zaprogramowanie mikrokon-
trolera, w tym celu za pomocą ka-
bla łączymy port COM0 zestawu
ZL6ARM z wybranym portem sze-
regowym komputera. Schemat ka-
bla połączeniowego przedstawiono
na rys. 22 .
Po podłączeniu zestawu uru-
chamiamy program LPC2000 Flash
Utility .W polu tekstowym Filename
wpisujemy ścieżkę do pliku ledtst.
hex a następnie wciskamy przycisk
Upload to Flash . Po chwili pro-
gram zostanie załadowany i urucho-
miony. Na diodach LED (D4…D11)
zestawu ZL6ARM powinien ukazać
się efekt punktu świetlnego. Przy
pierwszym uruchomieniu progra-
mu należy skonfigurować program
LPC2000 Flash Utility . Na rysunku
rys. 23 przedstawiono proponowa-
ny sposób konfiguracji programu.
Należy wybrać typ mikrokon-
trolera, wpisać częstotliwość kwar-
cu mikrokontrolera oraz zaznaczyć
opcję używania linii DTR/RTS słu-
żących do uruchamiania i zerowa-
nia mikrokontrolera. W przypadku
zmiany pliku HEX (np. w wyniku
dopisania fragmentu kodu) nie mu-
simy po każdej kompilacji ponow-
nie wybierać nazwy pliku, gdyż
przed każdym poleceniem załado-
wania pamięci Flash jest on od-
czytywany od nowa, co jest istot-
ną zaletą programu.
plik wynikowy ledtst.elf ., z którego
za pomocą programu konwertują-
cego tworzony jest plik ledtst.hex .
W pliku makefile będziemy zapisy-
wać przebieg procesu kompilacji,
co przy wykorzystaniu standardo-
wego szablonu jest bardzo proste.
Poniżej przedstawiono makefile na-
szego projektu. Nie będziemy się
tutaj zagłębiać w szczegółowy opis
narzędzia make . Zainteresowanych
odsyłam do literatury lub Interne-
tu. Przedstawimy tylko fragmenty,
które będziemy musieli zmieniać
tworząc własne projekty:
#tutaj wpisz nazwe pliku hex
TARGET = ledtst
W powyższej linii wpisujemy
nazwę pliku wynikowego HEX, jaki
zostanie wygenerowany w wyniku
kompilacji:
CFLAGS = -Os -fpack-struct -mcpu=ar-
m7tdmi -Wall –gstabs
Polu CFLAGS przypisujemy
opcje kompilatora, jakie będą użyte
przy tworzeniu projektu.
Flaga –Os określa stopień opty-
malizacji kompilatora na najmniej-
szy rozmiar pliku wynikowego.
Inna często wykorzystywana
opcja to –O3 , generująca najszyb-
szy kod wynikowy.
Opcja –fpack-struct zakazu-
je kompilatorowi wyrównywania
struktur pustymi bajtami, a więc
Pliki projektu
W tab. 4 przedstawiono pliki,
jakie znalazły się w naszym pierw-
szym projekcie oraz funkcje, jakie
pełnią.
Przebiegiem kompilacji projek-
tu zarządza narzędzie GNU make ,
które na podstawie pliku konfigu-
racyjnego makefile określa na pod-
stawie odpowiednich zależności, co
i w jakiej kolejności ma być kompi-
lowane. Poza tym make kompiluje
tylko te pliki, które uległy zmia-
nie. Tworząc plik makefile musimy
zbudować odpowiednie zależności
i reguły określające, w jaki sposób
powstać ma plik wynikowy. Przed
zapoznaniem się z budową makefi-
le najpierw przedsta-
wimy przebieg proce-
su kompilacji naszego
pierwszego projektu
( rys. 24 ).
Poprzez kompilację
plików led.cpp oraz
lpc213x.h powstaje
plik wynikowy led.
o , natomiast z pliku
boot.s tworzony jest
plik wynikowy boot.o .
Z plików led.o boot.o
na podstawie skryp-
tu lpc2138-rom.ld
powstaje ostateczny
Rys. 23.
Rys. 24.
102
Elektronika Praktyczna 7/2006
lpc2138-rom.ld
197729906.013.png 197729906.001.png 197729906.002.png 197729906.003.png 197729906.004.png 197729906.005.png 197729906.006.png 197729906.007.png 197729906.008.png
K U R S
struktura ma dokładnie taką postać
jak jest zadeklarowana.
Opcja –mcpu=arm7tdmi określa
typ procesora.
Opcja –Wall nakazuje kompila-
torowi generowanie szczegółowych
ostrzeżeń kompilacji.
Opcja –gstabs nakazuje genero-
wanie informacji dla debugera.
#pliki zrodlowe
SRC = led.cpp
#pliki assemblerowe
ASRC = boot.s
W polu SRC wpisujemy li-
stę wszystkich plików źródłowych
*.cpp występujących w projekcie
oddzielając je spacjami natomiast
w polu ASRC wpisujemy listę pli-
ków asemblerowych *.s :
#Zaleznosci pomiedzy plikami w C
boot.o: boot.s
led.o: led.cpp lpc213x.h
#zaleznosci pomiedzy plikami konco-
wymi
$(TARGET).elf: boot.o led.o lpc2138-
rom.ld
Powyższe linie opisują wcześniej
wspomniane zależności pomiędzy
plikami źródłowymi oraz wyniko-
wymi. Odczytujemy je w sposób
następujący: plik boot.o zależy od
(powstaje z) pliku boot.s . Plik led.
Rys. 25.
o zależy od plików led.cpp oraz
lpc213x.h . Plik wynikowy $(TAR-
GET).elf zależy od plików boot.
o led.o lpc2138-rom.ld . W ten wła-
śnie prosty sposób możemy budo-
wać nawet bardzo skomplikowane
projekty bez obawy o prawidłowy
przebieg kompilacji. Tworząc wła-
sne konfiguracje na podstawie po-
wyższego szablonu musimy pamię-
tać, aby poprawnie zapisać wszyst-
kie zależności, gdyż w przeciwnym
przypadku program wynikowy
może działać niepoprawnie.
Lucjan Bryndza SQ7FGB, EP
lucjan.bryndza@ep.com.pl
Wieloletnie doskonalenie uczyniło nas najbardziej wszechstronnym producentem czci i systemów samochodowych.
Zatrudniamy prawie 200 tysicy pracowników w prawie 200 zakładach produkcyjnych na całym wiecie. Nowoczesna
technologia i jako stały si podstaw szerokiej gamy rozwiza technicznych. W Polsce działamy ju od 1995 roku.
Jestemy laureatem nagrody dla Najlepszego Inwestora Zagranicznego, a w 2003 roku zostalimy uhonorowani
godłem Inwestor w Kapitał Ludzki.
Do pracy w Centrum Technicznym w Krakowie poszukujemy osób na stanowiska:
IN YNIER PROGRAMISTA (ref. SE)
Zakres obowi zków:
Tworzenie oprogramowania dla samochodowych systemów sterowania,
multimedialnych lub nawigacji satelitarnej.
Wymagania:
•Wykształcenie wysze (informatyka, elektronika, telekomunikacja lub
pokrewne)
•Znajomo jzyka C lub C++
Dodatkowym atutem b dzie znajomo  :
•Systemów czasu rzeczywistego i systemów wbudowanych
•Technologii obiektowych oraz jzyka UML
•Inynierii oprogramowania
•Cyfrowego przetwarzania sygnałów
•Systemów multimedialnych
•Pakietu Matlab
IN YNIER DS. TESTÓW
OPROGRAMOWANIA (ref. STV)
Zakres obowi zków:
Tworzenie scenariuszy testowych, projektowanie rodowiska testowego
(w tym do testów automatycznych)
i wykonywanie testów oprogramowania.
Wymagania:
•Wykształcenie wysze (elektronika, informatyka, automatyka,
telekomunikacja lub pokrewne)
•Znajomo podstaw elektroniki
•Znajomo zagadnie z zakresu miernictwa elektronicznego
(oscyloskopy, generatory, analizatory itp.)
•Znajomo systemów pomiarowych
•Znajomo podstaw programowania (np. jzyk C lub C++)
Dodatkowym atutem b dzie znajomo  :
•Jzyków skryptowych (Perl, TCL itp.)
•Zagadnie z zakresu testowania systemów
i oprogramowania
Wymagania ogólne: dobra znajomo jzyka angielskiego, mobilno (czste podróe słubowe), umiejtno pracy w zespole
Zaakceptowanym kandydatom oferujemy : interesujc prac w midzynarodowym zespole, w dynamicznie rozwijajcej si firmie * kontakt z najnowszymi
technologiami * współprac z najwikszymi producentami samochodów * moliwo rozwoju i doskonalenia zawodowego * konkurencyjne wynagrodzenie
i atrakcyjny pakiet socjalny * przyjazn atmosfer i bardzo dobre warunki pracy
Osoby zainteresowane prosimy o przesyłanie CV i listu motywacyjnego w jzyku polskim i angielskim na adres:
Magda Szyndera, Delphi Poland S.A. – Centrum Techniczne, ul. Podgórki Tynieckie 2, 30-399 Kraków, e-mail: magda.szyndera@delphi.com
Prosimy o podanie w licie motywacyjnym symbolu referencyjnego.
Przesyłamy potwierdzenie otrzymania aplikacji. W przypadku braku potwierdzenia, prosimy przesła dokumenty poczt tradycyjn .
Uprzejmie informujemy, e kontaktujemy si tylko z wybranymi kandydatami. Na aplikacji prosimy o zawarcie nastpujcej klauzuli: Wyraam zgod na przetwarzanie moich danych osobowych
zawartych w mojej ofercie pracy dla potrzeb niezbdnych do realizacji procesu rekrutacji (zgodnie z ustaw o ochronie danych osobowych z dnia 29.08.97 Dz. U. 133 Poz. 883)
Elektronika Praktyczna 7/2006
103
197729906.009.png
Zgłoś jeśli naruszono regulamin