Burkhard Ma C PRO MIKROKONTROLÉRY ANSI-C, kompilátory C, spojovací programy likery, práce s ATMEL AVR a MSC-51, pøíklady programováí v jazyce C, ástroje pro programováí, tipy a triky, µc & praxe Praha 2003
Kiha je pøekladem ìmeckého origiálu Burkhard Ma: C für Mikrocotroller ANSI-C, C-Compiler/Liker, Echtzeitbetriebssysteme, C-Programmierbeispiele, Tools für die Programmierug, Tipps ud Tricks ISBN 3-7723-4154-3, vydaého akladatelstvím Frazis Verlag Alle Rechte vorbehalte, auch die der fotomechaische Wiedergabe ud der Speicherug i elektroische Medie Die meiste Produktbezeichuge vo Hard- ud Sofware sowie Firmeame ud Firmelogos, die i diesem Werk geat werde, sid i der Regel gleichzeitig auch eigetragee Warezeiche ud sollte als solche betrachtet werde Der Verlag folgt bei de Produktbezeichuge im wesetliche de Schreibweise der Hersteller Frazis Verlag GmbH, 85586 Poig, Germay Burkhard Ma C PRO MIKROKONTROLÉRY ANSI-C, kompilátory C, spojovací programy likery, práce s ATMEL AVR a MSC-51, pøíklady programováí v jazyce C, ástroje pro programováí, tipy a triky, µc & praxe Bez pøedchozího písemého svoleí akladatelství esmí být kterákoli èást kopírováa ebo rozmožováa jakoukoli formou (tisk, fotokopie, mikrofilm ebo jiý postup), zadáa do iformaèího systému ebo pøeášea v jié formì èi jiými prostøedky Autor a akladatelství epøejímají záruku za správost tištìých materiálù Pøedkládaá zapojeí a iformace jsou zveøejìy bez ohledu a pøípadé patety tøetích osob Nároky a odškodìí a základì zmì, chyb ebo vyecháí jsou zásadì vylouèey Receze èeského vydáí Václav Vacek Veškerá práva vyhrazea Burkhard Ma, 2000 2002 Frazis Verlag GmbH, 2000 BEN techická literatura, 2003 Traslatio Václav Losík, 2003 BEN techická literatura, Vìšíova 5, 100 00 Praha 10 Burkhard Ma: C PRO MIKROKONTROLÉRY ANSI-C, kompilátory C, spojovací programy likery, práce s ATMEL AVR a MSC-51, pøíklady programováí v jazyce C, ástroje pro programováí, tipy a triky, BEN techická literatura, Praha 2003 1 èeské vydáí ISBN 80-7300-077-6 Orig : ISBN 3-7723-4154-3 (Frazis Verlag GmbH)
OBSAH O KNIZE 7 CO NAJDETE NA DOPROVODNÉM CD 9 PÁR SLOV K ÈESKÉMU VYDÁNÍ 10 1 STRUÈNÝ ÚVOD DO JAZYKA ANSI-C PRO MIKROKONTROLÉRY 11 1 1 Kostrukce a struktura programu v jazyce C 12 1 2 Promìé, datové typy, rozsahy platosti a hodot 16 1 2 1 Základí typy: it, char, float, double 17 1 2 2 Kostaty a výètové typy: #defie, eum 22 1 2 3 Zmìa typu: automaticky, pomocí cast 31 1 2 4 Pamì ová tøída static, exter, register, auto a atribut cost, volatile 33 1 2 5 Struktury a uioy: struct, uio 37 1 2 6 Pole (arrays), zakové øetìzce a bitová pole 41 1 2 7 Vlastí datové typy: typedef 44 1 3 Operátory 46 1 3 1 Pøiøazeí a aritmetické operátory: =, *, /, %, +, -, ++, - - 46 1 3 2 Porovávací a logické operátory: ==,!=, <=, =>, <, >,!, &&, êê 48 1 3 3 Bitové operátory: &, ê, <<, >>, Ù, ~ 50 1 3 4 Fukce jazyka C 52 1 3 5 Podmíìý výraz?: 60 1 3 6 Speciálí operátory: sizeof 61 1 3 7 Precedece a asociativita operátorù 61 1 4 Poitery, ukazatele a promìé-adresy: &, *,, ->, [] 63 1 5 Øízeí programu: if, else, while, switch, case, for 69 1 5 1 Pøíkazy jazyka C 69 1 5 2 Blok { } 69 1 5 3 Pøíkaz if-else 70 1 5 4 Smyèky while 71 1 5 5 Pøíkaz switch-case 71 1 5 6 Pøíkaz for 72 1 5 7 Nepodmíìé vìtveí programu: break, cotiue, goto 73 1 6 Defiice, deklarace 73 1 7 Direktivy preprocesoru 75 1 7 1 Zahrutí souboru : #iclude 77 1 7 2 Pøepíaèe kompilátoru: #defie ame, #if, #ifdef, #elif 77 A B MANN: C PRO MIKROKONTROLÉRY 3
1 7 3 Makro: #defie jméo text_makra 78 1 7 4 Kostata: #defie jméo hodota 79 1 7 5 Direktiva #pragma 79 1 8 Zdrojové soubory (source files) a soubory iclude 80 1 9 Kihova ANSI (ANSI Library) 81 1 9 1 Vstup/výstup <stdio h> 82 1 9 2 Fukce pro testováí zakù <ctype h> 84 1 9 3 Fukce pro zakové øetìzce <strig h> 84 1 9 4 Matematické fukce <math h> 86 1 9 5 Pomocé fukce <stdlib h> 87 1 9 6 Hledáí chyb <assert h> 88 1 9 7 Sezamy promìých argumetù <stdarg h> 88 1 9 8 Globálí skoky <setjmp h> 88 1 9 9 Sigály <sigal h> 88 1 9 10 Datum a èas <time h> 89 1 9 11 Mezí hodoty <limit h> 89 2 KOMPILÁTOR C PRO MIKROKONTROLÉRY 91 2 1 Jazyk C a architektury MCU: vo Neuma, Harward, RISC, CISC, CISP 97 2 2 Požadavky jazyka C a architekturu MCU 99 2 3 8bitové architektury MCU od firmy Atmel 101 2 3 1 Rozšíøeé 8bitové mikrokotroléry RISC rodiy AVR 101 2 3 2 MCS-51 109 2 4 IAR Embedded Workbech 116 2 4 1 Založeí jedoduchého projektu 118 2 4 1 1 Editor 120 2 4 1 2 Nastaveí projektu 121 2 4 1 3 Kompilace a spojováí 127 2 4 2 Ladicí program C-Spy 128 2 4 3 Kompilátor C firmy IAR Systems pro mikrokotroléry AVR 132 2 4 3 1 Rozšíøeí jazyka 133 2 4 3 2 Pragma direktivy a pøeddefiovaé symboly 137 2 4 3 3 Vlastí fukce (itrisic), AVR-LIB a makra 139 2 4 3 4 Startup kód: cstartup s90 141 2 4 4 Spojovací program XLINK pro AVR 145 2 4 5 Efektiví kód C pro mikrokotroléry AVR 150 2 4 5 1 Používáí ukazatelù 151 2 4 5 2 Registry sfrb a pøístupy vstupu/výstupu 153 2 4 5 3 Bitové promìé 155 2 4 5 4 Pøístup a EEPROM 160 4 B MANN: C PRO MIKROKONTROLÉRY A
2 4 5 5 Defiice promìých 165 2 4 5 6 Iterace, smyèky 166 2 4 5 7 Kód jazyka C a kód assembleru 169 2 4 6 Kompilátor C pro mikrokotrolér 8051 od firmy IAR 171 2 5 Ladicí program (debugger) AVR Studio 177 2 6 EC++ pro mikrokotroléry 178 3 PØÍKLADY PROGRAMÙ V JAZYCE C PRO AVR 183 3 1 Øízeí pøerušeí UART 183 3 2 Idikace a displeji LCD 194 3 3 Èasovaè (Timer) 198 4 TIPY A TRIKY V JAZYCE C 201 4 1 Efektiví C: velikost kódu, pamì ové místo, typy promìých 201 4 2 Pozor a pasti: Jak se vyhout typickým chybám v C 208 5 SYSTÉMY PRACUJÍCÍ V REÁLNÉM ÈASE 213 5 1 Všeobecý popis fukce 214 5 2 Vysvìtleí pojmù: task, multitaskig, preemptig, RoudRobi 215 5 3 Pláovaè (scheduler) 217 5 4 Komuikace mezi tasky 218 6 DOBRÝ PROGRAMOVACÍ STYL V JAZYCE C 221 6 1 Návrh/desig programu 221 6 2 Soubory, fukce, kovece pro volbu jme 224 6 3 Softwarová rozhraí 226 6 4 Defeziví programováí 228 7 NÁSTROJE PRO PROGRAMOVÁNÍ V JAZYCE C 229 8 DODATKY 233 8 1 Formátovaý výstup (pritf coversios) 233 8 2 Formátovaý vstup (scaf coversios) 234 8 3 Tabulka ASCII 236 A B MANN: C PRO MIKROKONTROLÉRY 5
9 RD2 KIT C PROGRAMMING 241 9 1 Umíte ASM zaèìte programovat i v C 241 9 2 Vývojový kit s procesorem T89c51RD2 242 9 3 Popis koektorù a pøípojých míst 244 9 4 RD2-Flasher 249 9 4 1 Práce s programem FLASHER 250 9 4 2 Tipy, triky, praxe 251 9 4 3 Atmel FLIP 252 9 5 Úvod do programováí v Keil C51 a SDCC 253 9 6 Popis prostøedí µvisio2 IDE 256 9 7 SDCC Small Device C Compiler 258 9 8 40 øešeých pøíkladù v jazyce C pro Keil i SDCC 261 9 8 1 Sériový kaál 263 9 8 2 LCD displej 2 16 zakù v 4bitovém režimu komuikace 264 9 8 3 Maticová klávesice 4 3 tlaèítka 266 9 8 4 Systém pøerušeí 266 9 8 5 Èasovaè Watchdog 267 9 8 6 Èítaèem podporovaé programovatelé pole PCA, èasovaè T2 268 9 8 7 Pamì programu FLASH 270 9 8 8 Pamì EEPROM 271 9 8 9 Vìjší pamì dat XRAM 271 9 8 10 Speciálí fukce procesoru 271 9 8 11 Diagostika RD2 Kitu 272 9 8 12 Pokroèilé použití vývojových ástrojù 273 10 LITERATURA 275 Prezetace firmy HW server 276 Prezetace firmy HT Eurep 277 Kihy akladatelství BEN techická literatura 278 Kotaktí adresy a firmu BEN techická literatura 280 6 B MANN: C PRO MIKROKONTROLÉRY A
O KNIZE Des již sotva existuje techický obor z bìžého života, a již je to oblast multimédií, komuikací, automobilové techiky ebo prùmyslu, v íž ejdùležitìjší øídicí fukce epøevzaly mikrokotroléry Nové, stále výkoìjší výrobky, jako jsou satelití pøijímaèe, set-top-boxy, iteretové boxy, DVD pøehrávaèe, avigaèí systémy GPS a mobilí telefoy, kladou stále rostoucí požadavky jak a mikrokotroléry, tak a software, který je pro ì uto vyviout Mezi mikrokotroléry azývaými též struèì MCU (MicroCotroller Uit), rozdìleými podle šíøky registrù a datové sbìrice a 8, 16 a 32bitové typy, jsou doposud ejrozšíøeìjší 8bitové a 16bitové mikrokotroléry, které pøedstavují 80 % všech pøípadù aplikací Podíl 32bitových typù v embeded systems roste pøedevším ve vysoce itegrovaých èipech, jako jsou dekodéry MPEG ebo pøípravky GPS, u ichž je jeda kompoeta je 32bitová CPU Pro moho aplikací však 8bitová MCU zùstává z hlediska pomìru cea/výko tím ejlepším øešeím Výzkumy dokládají, že poptávka po 8bitových mikrokotrolérech bude zaèá ještì po dlouhou dobu i v 21 století Neí tedy divu, že trh mikrokotrolérù existující již více ež 20 let je oživová ovými rodiami a architekturami V posledích letech se objevily mj ové 8bitové rodiy mikrokotrolérù PIC, AVR a 16bitové rodiy jako H8S, XA, C167, M16C A jistì budou ásledovat další To, co se v posledí dobì výrazì zmìilo, je zpùsob programováí mikrokotrolérù Klíèové slovo Time-to Market zameá kratší doby vývoje softwaru pøi rostoucí složitosti aplikací a zachováí ebo zvýšeí kvality Dále jsou to z toho plyoucí požadavky a opakovatelou použitelost, prùhledost, pøeosost, udržovatelost softwarových modulù, které vyžadují použití vyšších programovacích jazykù a speciálích vývojových ástrojù Jazyk ANSI-C v posledích letech dokázal, že je pro požadavky oboru mikrokotrolérù velmi vhodý C je v souèasé dobì ejèastìji používaý programovací jazyk, a to eje pøi programováí mikrokotrolérù Jeho blízkost hardwaru a efektiví a pružá práce s pamìtmi a pøídavými zaøízeími uspokojuje zejméa požadavky»embedded systems«(uzavøeých, zapouzdøeých systémù) Mohým pøipadá pøechod z assembleru a jazyk C obtížý Pochybosti týkající se velikosti kódu a rychlosti zpracováí však již u moderích mikrokotrolérù a kompilátorù C ejsou a místì Firmy Atmel a IAR Systems dávají skvìlý pøíklad v podobì úspìšé rodiy mikrokotrolérù AVR Výše uvedeé požadavky moderího softwarového ižeýrství jsou do jazyka C podstatì sáze pøeositelé Proto vzikla i tato kiha, která ve struèém úvodu omezujícím se a podstaté vìci vysvìtluje základy ANSI-C relevatí pro mikrokotroléry V popøedí stojí tvorba efektivího programového kódu Podrobìji jsou apøíklad uvádìy zvláštosti jazyka C pro rodiy mikrokotrolérù AVR, MCS-51 Na doprovodém CD jsou vedle všech pøíkladù a tabulek jazyka C k dispozici také kompilátor pro jazyk C A B MANN: C PRO MIKROKONTROLÉRY 7
a simulátory MCU od firmy IAR Systems, které jsou urèey pro rodiy AVR a 8051 AT89 firmy Atmel, takže všechy pøíklady je možo zpùsobem blízkým praxi apodobit v simulátoru Je také ukázáo, jak je možo si vývojovou práci zjedodušit v rámci vývojového systému Embedded Workbech pomocí ástrojù editor, make, kompilátor (pøekladaè), spojovací program (liker, sestavovací program), ladicí program (debugger) A pøirozeì také moho tipù a trikù, které mají zaèáteèíkùm v C usadit zaèátky a zkušeým poskytout podìty k zamyšleí Mysleli jsme však i a rychlé vyhledáváí iformací Proto jsou v kize používáy tøi symboly pro zapamatovat si, promyslet si a apodobit Pomocí tohoto piktogramu je možo rychle vyhledávat základí vìdomosti ebo dùležitá shrutí, která jsou èasto používáa Má smysl si je zapamatovat a šetøit tak èasem Abyste pochopili pozadí, je dùležité si promyslet souvislosti Proto je v kize používá teto piktogram, který ozaèuje pøíklady, porováí, podìty, použití ástrojù ebo také zpùsoby astaveí Všechy pøíklady ozaèeé tímto zpùsobem je možo zpracovávat a apodobovat pomocí pøiložeé demoverze Embedded Workbech TM od firmy IAR Systems Souèástí tohoto vývojového prostøedí (workbech) je ladicí program (debugger) C-Spy jako simulátor MCU a stolím poèítaèi, pomocí ìhož je možo testovat a aalyzovat kód C Za podporu pøi pøípravì této kihy dìkuji a tomto místì firmì Kathrei Werke KG v Roseheimu, pau Hartmaovi a jeho pomocíkùm ve firmì IAR Systems AG a firmì Atmel V eposledí øadì dìkuji i své rodiì, bez jejíž pomoci by takový projekt ebylo možo zvládout Kolbermoor, lede 2000, Burkhardt Ma 8 B MANN: C PRO MIKROKONTROLÉRY A
CO NAJDETE NA DOPROVODNÉM CD-ROM CD obsahuje související programy a pøedevším zdrojové pøíklady ke kize Nalezete zde všechy iformace potøebé pro sadou práci s kihou Tyto iformace lze rozdìlit do logických celkù, které se acházejí v oddìleých adresáøích: adresáø _DATA je pracoví adresáø fukce AUTORUNu, adresáø _UTIL obsahuje istalaèí soubory programù Adobe Acrobat Reader, adresáø ATMEL je zèásti tvoøe pùvodím obsahem ìmeckého doprovodého CD a zèásti aktuálími daty pøevzatými z jejich webových stráek _ove (aktuálí verze programu AVR Studio, programátor ISP, katalogové listy mikrokotrolérù ATMEL, ) Acrobat (katalogové listy z pùvodího CD), images (pracoví adresáø z pùvodího CD), PDF (dokumetace z pùvodího CD), Software (vývojové prostøedí z pùvodího CD) adresáø BEN WWW obsahuje off-lie verzi www stráek akladatelství BEN techická literatura (aktualizováo k poèátku bøeza 2003), jejichž souèástí je poèítaèová verze tištìého katalogu Edièího pláu jaro/léto 2003, adresáø CZ je vlastí áplò CD, tj jedá se o dokumety HTML Èást z ich byla pøeložea ze zdrojového adresáøe DE do èeštiy a dále graficky upravea Èást byla aktualizováa, doplìa a dále rozšíøea Vše v èeštiì ebo agliètiì adresáø DE je pøevážá èást CD, které bylo souèástí pùvodího ìmeckého origiálu kihy Vše v ìmèiì adresáø IAR je zèásti tvoøe pùvodím obsahem ìmeckého doprovodého CD a zèásti pøevzatými daty z demostraèího CD firmy IAR ApplicatioNotes (Aplikaèí pozámky k pùvodím datùm), Datasheets (katalogové listy k pùvodím datùm), Files (ová doprovodá dokumetace), Demos (ové demoverze programù), Workbech_8051 (bližší popis této starší verze programu zde v kize), Workbech_AVR (bližší popis této starší verze programu zde v kize), XML (systémové soubory prezetace IAR) adresáø PRIKLADY jsou zdrojové texty k pøíkladùm ke kapitolám 1, 2 a 3 adresáø SW_TOOLS je software a programovací ástroje pøevzaté z pùvodího ìmeckého vydáí A B MANN: C PRO MIKROKONTROLÉRY 9
PÁR SLOV K ÈESKÉMU VYDÁNÍ Na kize jsme zaèali pracovat poèátkem roku 2002, kdy jsme podepsali a zaplatili liceci udìleou ìmeckým vydavatelem Nìjakou dobu ji zpracovával pøekladatel, poté jsme ji po ìkolika mìsících práce v závìru roku 2002 dokoèili u ás v redakci akladatelství BEN techická literatura Vezmeme-li v úvahu, že autor kihu dokoèil a rukopis odevzdal v ledu 2000, ubìhla od sestaveí pùvodích iformací, tvoøících jádro kihy, již pomìrì dlouhá doba Z tìchto dùvodù jsme se sažili poèátkem roku aktualizovat alespoò obsah doprovodého CD ROM, abyste jako èteáøi dostali do ruky opravdu hodotý kus díla Pokud bychom totiž chtìli áplò kihy eustále aktualizovat, dostávali bychom se do zaèarovaého kruhu, ebo ež bychom staèili zpracovat ové verze programù, tak by byla k máí ová verze AVR Studia ebo programu Emdedded Workbech Neí však úèelem této kihy popisovat kokrétí verze programù, ale dodat èteáøùm jisté kow-how, aby byli schopi se zmiòovaými programy pracovat sami Poèátkem roku jsme od firmy IAR obdrželi jejich CD s demoverzemi programù (vydaé a pøelomu 2002/2003), z ichž jsme jejich hlaví produkty umístili a doprovodém CD Zároveò i firma Atmel aktualizovala výrazì vzhled svých www stráek, který je zároveò pøehledìjší Jak sami zjistíte, prùmìrì zabírají istalace Emdedded Workbech kolem 20 MB datového prostoru (pro každý jedotlivý mikrokotrolér) a pro mikrokotroléry øady Atmel AVR je to dokoce cca 42 MB Ne každý má možost pøipojeí rychlého Iteretu, což byl hlaví dùvod radìji jsme poèkali a zasláí CD z firmy IAR, ež abychom vydali kihu s doprovodým CD, které bude mít zastaralý obsah Takže pøesto, že vychází kiha oproti pùvodím pøedpokladùm s mírým zpoždìím, v koeèém dùsledku ám to vlastì pomohlo výrazì aktualizovat obsah doprovodého CD ROM Libor Kubica redakce@be cz Doporuèujeme (a doprovodém CD): IAR Emdedded Workbech Evaluatio versio for Atmel AVR v2 27B \IAR\Demos\EWAVR\ewavr-ev exe AVR Studio 4 06 for Widows 9x/NT/2000 \ATMEL\_ove\avr_4 0\AvrStudio4RC1 exe 10 B MANN: C PRO MIKROKONTROLÉRY A