63_68.PDF

(346 KB) Pobierz
PIC-owe C - Tani kompilator firmy CCS
P R O G R A M Y
Tani kompilator firmy CCS
Takie by³y pocz¹tki. Potem by³o juø
znacznie lepiej, ale zacz¹³em poszuki-
waÊ narzÍdzi pozwalaj¹cych znacznie
szybciej tworzyÊ programy. Po zbadaniu
zasobÛw Internetu okaza³o siÍ, øe istnie-
je kilka firm oferuj¹cych kompilatory jÍ-
zyka C dla mikrokontrolerÛw Microchi-
pa. Naj³atwiej jest znaleüÊ taki kompi-
lator dla najbardziej popularnego, 14-bi-
towego rdzenia (rodziny 16xx), ale ofe-
rowane s¹ teø kompilatory dla rodzin
12xx, 17xx i†18xx. Jedn¹ z†firm, oferu-
j¹cych kompilatory C dla wszystkich ro-
dzin mikrokontrolerÛw PIC (z†wyj¹tkiem
PIC 17xx), jest Custom Computer Servi-
ces , bardziej znana jako CCS.
W†ofercie tej firmy znajduj¹ siÍ trzy
podstawowe ( tab. 1 ) kompilatory, ozna-
czone jako:
- PCB dla rdzenia 12-bitowego PIC 12xx,
- PCM dla rdzenia 14-bitowego PIC16xx,
- PCH dla rdzenia 16-bitowego PIC18xx.
Kaødy z†tych kompilatorÛw wystÍpuje
oddzielnie i†trzeba je osobno zakupiÊ.
Uøytkownicy zespolonych úrodowisk pro-
jektowych, takich jak Bascom, czy kom-
pilatory C firm Keil lub IAR, byliby naj-
prawdopodobniej nieco zawiedzeni przy
pierwszym zetkniÍciu z†tymi trzema pro-
duktami CCS. Kompilatory w†wersjach
PCB, PCM i†PCH s¹ wywo³ywane przez
rÍcznie wpisywane komendy. Nie ma tu
øadnego dedykowanego edytora, mene-
døera projektu, czy - rzecz juø prawie
standardowa - programowego symulatora
wykonywanego programu. Jednak wymie-
nione niedogodnoúci nie dyskwalifikuj¹
tych kompilatorÛw.
Producenci oprogramowania narzÍ-
dziowego dla mikrokontrolerÛw Micro-
chipa s¹ w†tej komfortowej sytuacji, øe
maj¹ do dyspozycji bardzo dobre i†dar-
mowo rozprowadzane úrodowisko pro-
jektowe MPLAB. Zapewnia ono moøli-
woúÊ edycji plikÛw ürÛd³owych, tworze-
nia w³asnych projektÛw oraz zawiera
doskona³y symulator programowy
z†moøliwoúci¹ krokowego wykonywania
programu, podgl¹dania wartoúci zmien-
nych, rejestrÛw i†obszarÛw pamiÍci
RAM, ROM i†EEPROM uøytkownika.
WspÛ³praca MPLAB z†kompilatorami
Kiedy po raz pierwszy
zetkn¹³em siÍ
mikrokontrolerami PIC16xx
firmy Microchip przeczyta³em
w†dokumentacji firmowej, øe
maj¹ one tylko 35 instrukcji.
Nieüle - pomyúla³em - ³atwo
siÍ bÍdzie tego nauczyÊ. Ale
rzeczywistoúÊ okaza³a siÍ
troszkÍ inna. Po pierwszych
prÛbach praktycznego
wykorzystania instrukcji
BTFSC, BTFSS, INCFSZ itp.
zacz¹³em z†rozrzewnieniem
wspominaÊ listÍ rozkazÛw
Z-80, czy nawet 8051.
Rys. 1.
Rys. 2.
Elektronika Praktyczna 3/2002
63
P R O G R A M Y
Elektronika Praktyczna 3/2002
63
32253566.007.png 32253566.008.png 32253566.009.png
P R O G R A M Y
Właściwości kompilatora PIC C firmy CCS:
Wbudowane biblioteki obs³ugi RS-232, I 2 C, przetwornika A/D, bitowej obs³ugi
I/O, generowania opÛünieÒ, obs³ugi uk³adÛw licznikowych, SSP, PSP, USB.
MoøliwoúÊ integracji z†MPLAB-em oraz innymi edytorami i†symulatorami umoø-
liwiaj¹cymi debbuging kodu ürÛd³owego. Format pliku HEX i†pliku debug za-
pewnia kompatybilnoúÊ z†wiÍkszoúci¹ dostÍpnych programatorÛw i†debuggerÛw.
Funkcja printf umoøliwia formatowanie i†wyúwietlanie w†postaci dziesiÍtnej lub
heksadecymalnej.
DziÍki mechanizmowi wywo³ywania funkcji istnieje moøliwoúÊ g³Íbszego za-
gnieødøania, niø wynika to z†g³Íbokoúci stosu sprzÍtowego.
DostÍpnoúÊ ürÛd³owych plikÛw procedur do obs³ugi typowych LCD, klawiatur
w†postaci matryc, szeregowych EEPROM-Ûw serii 24XXX oraz 93XXX, zegarÛw
czasu rzeczywistego DS2223 i†NJU6355, szeregowych SRAM-Ûw, przetwornikÛw
A/D, cyfrowych potencjometrÛw i†innych.
1/8/32-bitowe zmienne sta³oprzecinkowe oraz 32-bitowe zmienne zmiennoprze-
cinkowe.
Instrukcje asemblerowe mog¹ byÊ wstawiane inline oraz mog¹ odnosiÊ siÍ do
wszystkich zmiennych.
Sta³e (rÛwnieø ³aÒcuchy i†tablice) s¹ pamiÍtane w†pamiÍci programu.
Rys. 3.
Standardowy typ bitowy ( Short Int ) umoøliwia generowanie bardzo wydajnego,
bitowo zorientowanego kodu.
#BIT i†#BYTE pozwalaj¹ na zorientowanie zmiennych C na komÛrki pamiÍci
o†okreúlonym adresie bezwzglÍdnym. Umoøliwia to obrazowanie rejestrÛw spe-
cjalnych poprzez zmienne C.
CCS musi byÊ poprzedzona jego odpo-
wiedni¹ konfiguracj¹.
Po utworzeniu w³asnego projektu, z†za-
k³adki Options->Development Mode trze-
ba wybraÊ rodzaj procesora i†narzÍdzie
do symulacji ( rys. 1 ). NastÍpnie trzeba
zainstalowaÊ kompilator, ktÛry pÛüniej
moøe byÊ uøywany jako standardowo dla
jÍzyka opisu projektu ( rys. 2 ). W†nowo
utworzonym projekcie trzeba okreúliÊ ro-
dzaj kompilatora, úcieøki dostÍpu do pli-
kÛw nag³Ûwkowych i†bibliotecznych oraz
typy plikÛw ürÛd³owych ( rys. 3 ).
Klikaj¹c na nazwie pliku z†rozszerze-
niem hex w†polu Project Files , a†nastÍp-
nie na podúwietlonym przycisku Node
Properties , uzyskujemy dostÍp do usta-
wieÒ samego kompilatora ( rys. 4 ). Moø-
na tu ustawiÊ rodzaj uøywanego kompi-
latora i†w³¹czyÊ generowanie pliku Tre-
e . W†polu Additional Command Line
Options moøna wpisaÊ dowolne komen-
dy kompilatora, szczegÛ³owo opisane
w†dokumentacji firmowej.
Od tego momentu MPLAB jest skonfi-
gurowany i†moøna rozpocz¹Ê tworzenie
w³asnego programu. Za jego pomoc¹ moø-
na takøe symulowaÊ dzia³anie tworzone-
go programu korzystaj¹c z†wbudowanego
programowego symulatora ( rys. 5 ) lub
sprzÍtowego emulatora, np. opisywanego
juø w†EP zestawu MPLAB-IDE 2000.
Firma CCS ma w†swojej ofercie rÛw-
nieø w³asne úrodowisko IDE-PCW. Dzia-
³a ono w†systemie operacyjnym Win-
dows 95/98 ( rys. 6 ) i†umoøliwia tworze-
nie w³asnych projektÛw oraz edycjÍ pli-
kÛw ürÛd³owych z†moøliwoúci¹ w³¹cze-
nia kontroli syntaktycznej (wyúwietlanie
w†rÛønych kolorach s³Ûw kluczowych
i†komentarzy). Standardowo, pakiet ma
wbudowane kompilatory PCB i†PCM,
a†za dodatkow¹ op³at¹ moøna doinsta-
lowaÊ kompilator PCH.
Kreator projektÛw ma wbudowan¹ fun-
kcjÍ automatycznego tworzenia pliku na-
g³Ûwkowego o†nazwie projektu. W†pliku
ürÛd³owym automatycznie przygotowywa-
ne jest wywo³anie szeregu funkcji biblio-
tecznych obs³uguj¹cych peryferia mikro-
kontrolera. Pakiet PCW umoøliwia rÛwnieø
ogl¹danie danych katalogowych wybrane-
go w†projekcie mikrokontrolera i†deasemb-
lacjÍ plikÛw z†rozszerzeniem *.hex . Z†za-
k³adki Tools moøna uruchomiÊ narzÍdzie
Device Editor umoøliwiaj¹ce edycjÍ pliku
bazy danych mikrokontrolerÛw devi-
ces.dat . Znajduje siÍ tam teø Serial Port
Monitor (umoøliwiaj¹cy komunikacjÍ po-
przez port szeregowy RS232 pomiÍdzy
tworzon¹ aplikacj¹ a†komputerem), disa-
sembler oraz programy umoøliwiaj¹ce po-
rÛwnywanie plikÛw, wybÛr mikrokontrole-
ra, szybkie przejúcie do pakietu MPLAB
i†zaprogramowanie mikrokontrolera. Ta
ostatnia czynnoúÊ wymaga oczywiúcie od-
powiedniego programatora. Kompilator,
w†trakcie kompilacji pliku ürÛd³owego (op-
rÛcz pliku wynikowego z†rozszerzeniem
*.hex ) generuje teø kilka plikÛw pomocni-
czych. Z†zak³adki View moøna otwieraÊ
i†analizowaÊ plik listingu c/asm . Zawiera
on listing programu ürÛd³owego w†C wraz
z†odpowiadaj¹cymi mu sekwencjami
w†asemblerze. Plik ten jest szczegÛlnie
przydatny w†sytuacji, kiedy naleøy przea-
nalizowaÊ fragment jakiegoú programu.
Kompilator generuje teø plik Call Tre-
e , w†ktÛrym pokazane s¹ (w†postaci
drzewa) wszystkie funkcje wraz z†ich
wywo³aniami. Dodatkowo zawarta jest
tam informacja o†uøyciu przez funkcje
pamiÍci programu i†pamiÍci
RAM. Z†zak³adki View moøna
teø ogl¹daÊ plik wynikowy
w†postaci hexadecymalnej lub
ASCII, plik MAP okreúlaj¹cy
mapÍ zajÍtoúci pamiÍci RAM
w†ostatnio kompilowanym pro-
gramie, plik z†rozszerzeniem
COD uøywanym przez symula-
tor programowy, plik Valid Fu-
ses informuj¹cy o†stanie rejest-
ru bezpiecznikÛw oraz pliki
Valid Interrupts i† Status Line .
DoúÊ przydatn¹ moøe byÊ
funkcja Data Sheet , rÛwnieø
uruchamiana z† View . Umoøli-
wia ona przegl¹danie danych
katalogowych w†trakcie pisania progra-
mu. Jest to przydatna funkcja, szczegÛl-
nie w†momencie tworzenia aplikacji
niewystarczaj¹co poznanego mikrokont-
rolera.
Ca³oúÊ jest doúÊ uøytecznym úrodo-
wiskiem projektowym, ale ma jedn¹
doúÊ istotn¹ wadÍ - brak jest tam jakie-
gokolwiek symulatora programowego.
W†pewnym sensie lukÍ tÍ wype³nia od-
wo³anie siÍ do pakietu MPLAB. MPLAB
uruchamia siÍ wtedy z†otwartym projek-
tem przygotowanym z†poziomu PCW
i†moøna korzystaÊ wtedy z†symulatora.
WiÍkszoúÊ producentÛw kompilatorÛw
dla mikrokontrolerÛw deklaruje zgodnoúÊ
swoich produktÛw z†norm¹ ANSI. Nor-
ma ta okreúla przede wszystkim sk³ad-
niÍ deklaracji i†definicji funkcji, cechy
arytmetyki, moøliwoúci preprocesora, de-
finicjÍ standardowej biblioteki itp. Znor-
malizowanie jÍzyka umoøliwia w†miarÍ
proste przenoszenie oprogramowania.
Z†mikrokontrolerami sprawa nie jest tak
prosta. OprÛcz standardowych konstruk-
cji jÍzykowych, kompilatory dla mikro-
kontrolerÛw musz¹ byÊ wyposaøone
w†rozszerzenia pozwalaj¹ce przede
wszystkim na zaprogramowanie uk³adÛw
peryferyjnych. W†przypadku kompilatora
CCS rozszerzenia te mog¹ byÊ realizowa-
Rys. 4.
64
Elektronika Praktyczna 3/2002
P R O G R A M Y
64
Elektronika Praktyczna 3/2002
32253566.010.png 32253566.001.png 32253566.002.png
P R O G R A M Y
Rys. 5.
Rys. 6.
ne poprzez komendy preprocesora i†nie-
standardowe funkcje biblioteczne.
Preprocesor, oprÛcz standardowych
komend typu #IF , #ELSE , #LIST itp., za-
wiera komendy pozwalaj¹ce na sterowa-
nie rozszerzeniami spotykanymi tylko
w†mikrokontrolerach PIC.
Komenda #bit pozwala na definiowa-
nie zmiennej bitowej w†dowolnym rejes-
trze. Rejestrem tym moøe byÊ komÛrka
SFR lub obszaru pamiÍci GPR. Sterowa-
nie liniami portu moøe siÍ odbywaÊ po-
przez ich zdefiniowanie, np. #bit
led=6.2 , gdzie 6 to adres rejestru SFR
PORTB. Wyzerowanie tej linii wygl¹da
bardzo prosto: led = 0; .
Bitowe flagi definiuje siÍ tak samo.
Obs³uga przerwaÒ jest zawsze zwi¹zana
z†rozszerzeniem jÍzyka C. W†przypadku
kompilatora CCS funkcje obs³ugi prze-
rwania s¹ poprzedzone komend¹
#INT_xx , gdzie xx jest parametrem
okreúlaj¹cym przyczynÍ zaistnienia
przerwania. Na przyk³ad, komenda
#int_rtcc poprzedzaj¹ca procedurÍ po-
woduje, øe w†przypadku wyst¹pienia
przerwania od licznika T0 zostanie wy-
wo³ana ta w³aúnie procedura.
Wielu CzytelnikÛw zapewne doceni³o
wbudowane w†kompilator Bascom funk-
cje obs³ugi magistrali I 2 C, wyúwietlacza
LCD czy nawet niektÛrych uk³adÛw sca-
lonych. Do tej pory, producenci kompi-
latorÛw C niechÍtnie umieszczali takie
funkcje w†swoich pakietach projekto-
wych. Przyk³adem moøe byÊ opisywany
na ³amach EP bardzo dobry kompilator
dla 8051 firmy Keil, ktÛry nie ma øad-
nej bibliotecznej funkcji wspomagaj¹cej
obs³ugÍ chociaøby magistrali I 2 C, za wy-
j¹tkiem standardowych funkcji znako-
wych np. printf . Zaczyna siÍ to powoli
zmieniaÊ, czego przyk³adem jest opisy-
wany tutaj kompilator.
Komendy preprocesora #use delay
clock , #use I 2 C , #use RS232 pozwalaj¹
na wykorzystanie funkcji bibliotecz-
nych obs³uguj¹cych magistralÍ I 2 C
i†programowy port szeregowy RS232.
SzczegÛlnie ten ostatni wydaje siÍ
przydatny, poniewaø wiele PIC-Ûw
z†rodziny 16xx nie posiada szeregowe-
go portu sprzÍtowego.
åciúle ze úrodowiskiem sprzÍtowym
zwi¹zane s¹ komendy #DEVICE okreúla-
j¹ce typ mikrokontrolera i† #FUSES po-
zwalaj¹ce programowaÊ ³¹czniki (bez-
pieczniki) konfiguracyjne (typ oscylato-
ra, protekcjÍ odczytu itp.). Komenda
#ORG pozwala na umieszczenie kodu
programu w†okreúlonej przestrzeni pa-
miÍci programu.
Do³¹czana standardowo do kompilato-
ra biblioteka zawiera, oprÛcz powszech-
nie spotykanych funkcji matematycz-
nych i†wejúcia wyjúcia, wiele dodatko-
wych funkcji pozwalaj¹cych szybko
i†³atwo tworzyÊ programy obs³uguj¹ce
port szeregowy, magistralÍ I 2 C i†SPI
oraz Parallel Slave Port (PSP). DoúÊ roz-
budowane s¹ funkcje pozwalaj¹ce
w†prosty sposÛb ìmanipulowaÊî bitami
- ustawiaÊ jako wejúcie lub wyjúcie, od-
czytywaÊ poszczegÛlne bity, ustawiaÊ
rejestry TRIS itp. Dodatkowo, s¹ dostÍp-
ne funkcje rotacji i†przesuwania bitÛw
w†s³owie. Ze sterowaniem mikrokontro-
lerem zwi¹zane s¹ funkcje sleep() po-
zwalaj¹ce uzyskaÊ rozkaz sleep , re-
set_cpu() , disable_interrupts , enable_in-
terrupts() czy ext_int_edge() . DostÍpne
s¹ teø funkcje sterowania timerami
i†watchdogiem, przetwornikiem A/D
i†analogowym komparatorem. Moøliwe
jest takøe ³atwe zapisywanie i†odczyty-
wanie wewnÍtrznej pamiÍci EEPROM
dziÍki funkcjom read_eeprom i† wri-
te_eeprom .
Waøniejsze funkcje biblioteczne, zwi¹-
zane ze specyficzn¹ obs³ug¹ mikrokon-
trolera i†magistrali, pokazano w† tab. 2 .
Korzystaj¹c z†wbudowanych funkcji,
moøna szybko tworzyÊ w³asne aplika-
cje. Trzeba tu jednak pamiÍtaÊ, øe
z†przeniesieniem tak napisanych pro-
gramÛw na mikrokontrolery innych
producentÛw bÍd¹ tym wiÍksze trud-
noúci im wiÍcej korzystamy z†wbudo-
wanych, niestandardowych funkcji
kompilatora. Oczywiúcie, zawsze decyz-
ja naleøy do programisty: czy wyko-
rzysta np. funkcje obs³ugi magistrali
I 2 C, czy napisze sobie w³asne, ³atwo
przenoszone procedury.
Przedstawiony tutaj kompilator wyda-
je siÍ byÊ dobrym narzÍdziem dla wiÍk-
szoúci profesjonalnych i†oczywiúcie
amatorskich (ze wzglÍdu na atrakcyjn¹
cenÍ!) zastosowaÒ. Niew¹tpliwie na
Tab. 1. Porównanie różnych wersji kompilatorów oferowanych przez CCS.
Właściwości
PCB PCM PCH PCW PCWH
Command Line Compiler
Built−in Functions
Example Programs
Device Drivers
MPLAB Interface
Windows IDE
C Aware Editor
Wbudowany kreator projektu
Zaawansowana optymalizacja kodu wynikowego
Device Selector/Editor
Call Tree and Memory Map
Statystyki
Special Viewers
Narzędzia obsługi portu szeregowego
Obsługa rodzin 12−bitowych
Obsługa rodzin 14−bitowych
Obsługa mikrokontrolerów PIC18
66
Elektronika Praktyczna 3/2002
P R O G R A M Y
66
Elektronika Praktyczna 3/2002
32253566.003.png 32253566.004.png 32253566.005.png
P R O G R A M Y
uwagÍ zas³uguje rozbudowana bibliote-
ka procedur i†doúÊ dobra dokumentacja.
Nie bez znaczenia jest teø fakt, øe do-
stÍpne s¹ trzy, prawie nie rÛøni¹ce siÍ
w†obs³udze, kompilatory dla g³Ûwnych
rodzin mikrokontrolerÛw Microchip'a
w†doúÊ przystÍpnej cenie. Kaødy z†kom-
pilatorÛw moøna dostaÊ u†krajowego
dystrybutora za cenÍ zbliøon¹ do ceny
pakietu Bascom. Jak juø wspomnia³em,
jest to tylko sam kompilator, ale moøli-
woúÊ pe³nej wspÛ³pracy z†darmowym
MPLAB ca³kowicie tÍ niedogodnoúÊ eli-
minuje.
Wersja PCW jest juø zdecydowanie
droøsza, ale daje moøliwoúÊ korzystania
ze wszystkich trzech kompilatorÛw w†jed-
nolitym úrodowisku IDE. Wersja testowa
pakietu PCW rozprowadzana jest razem
z†pakietem MPLAB. Moøna j¹ teø úci¹g-
n¹Ê ze strony Microchipa, co teø jest
pewn¹ rekomendacj¹ produktÛw CCS.
Pewn¹ niedogodnoúci¹ kompilatorÛw CCS
jest brak moøliwoúci kompilowania i†lin-
kowania wiÍcej niø jednego pliku. Przy
rosn¹cych rozmiarach pamiÍci programu,
pliki ürÛd³owe mog¹ osi¹gaÊ duøe roz-
miary i†dzielenie ich na mniejsze czÍúci
znacznie u³atwiaj¹ pracÍ.
Na stronie www.ccsinfo.com moøna
znaleüÊ wiele interesuj¹cych, dodatko-
wych informacji dotycz¹cych kompilato-
ra. Godny polecenia jest ma³y test po-
rÛwnawczy kompilatorÛw CCS z†pro-
duktami innych firm, znajduj¹cy siÍ na
stronie www.ccsinfo.com/compare.html .
Tomasz Jab³oñski, AVT
tomasz.jablonski@ep.com.pl
Tab. 2. Zestawienie ważniejszych funkcji bibliotecznych.
RS232
I 2 C
SPI I/0
Parallel Slave
Getc()
I2C_start()
Setup_spi()
Setup_psp()
Putc()
I2C_stop()
Spi_read()
Psp_input_full()
Puts()
I2_read()
Spi_write()
Psp_output_full()
Printf()
I2C_write()
Spi_data_is_in() Psp_overflow()
Kbhit()
I2C_poll()
Ceny kompilatorów
Set_uart_speed()
Timers&delay
EEPROM
Procesor
Operacje bitowe
PCB dla 12 bit ......................................... 99USD
PCM dla 14 bit ........................................ 99USD
PCH dla PIC18 ........................................ 99USD
PCW dla 12 i 14 bit ............................... 350USD
Delay_us()
Read_eeprom()
Sleep()
Shift_right()
Delay_ms()
Write_eeprom()
Reset_cpu()
Shift_left()
Delay_cycles()
Read_calibration () Disable_interrupts() Rotate_right()
Setup_timer_x()
Enable_interrupts() Rotate_left()
Dodatkowe informacje
Set_timer_x()
Ext_int_edge()
Bit_clear()
Kompilatory firmy CCS udostêpni³a redakcji firma
Gamma, tel. (22) 663-83-76, www.gamma.pl.
Get_timer()
Bit_set()
Setup_counters()
Bit_test()
Setup_wdt()
Swap()
Dodatkowe informacje o ofercie firmy CCS mo¿na
znaleŸæ w Internecie pod adresem: www.ccsinfo.com.
Restart_wdt()
68
Elektronika Praktyczna 3/2002
P R O G R A M Y
68
Elektronika Praktyczna 3/2002
32253566.006.png
Zgłoś jeśli naruszono regulamin