Burkhard Mann
C
PRO
MIKROKONTROLÉRY ANSI-C, kompilátory C, spojovací programy linkery, práce s ATMEL AVR a MSC-51, pøíklady programování v jazyce C, nástroje pro programování, tipy a triky, ...
µC & praxe Praha 2003
Kniha je pøekladem nìmeckého originálu Burkhard Mann: C für Mikrocontroller ANSI-C, C-Compiler/Linker,
Echtzeitbetriebssysteme, C-Programmierbeispiele, Tools für die Programmierung, Tipps und Tricks
ISBN 3-7723-4154-3, vydaného nakladatelstvím Franzis Verlag.
Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die meisten Produktbezeichnungen von Hard- und Sofware sowie Firmennamen und Firmenlogos, die in diesem Werk genannt werden, sind in der Regel gleichzeitig auch eingetragene Warenzeichen und sollten als solche betrachtet werden. Der Verlag folgt bei den Produktbezeichnungen im wesentlichen den Schreibweisen der Hersteller.
Franzis Verlag GmbH, 85586 Poing, Germany Burkhard Mann
C PRO MIKROKONTROLÉRY ANSI-C, kompilátory C, spojovací programy linkery, práce s ATMEL AVR a MSC-51, pøíklady programování v jazyce C, nástroje pro programování, tipy a triky, ... µC & praxe Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmnoována jakoukoli formou (tisk, fotokopie, mikrofilm nebo jiný postup), zadána do informaèního systému nebo pøenáena v jiné formì èi jinými prostøedky. Autor a nakladatelství nepøejímají záruku za správnost titìných materiálù. Pøedkládaná zapojení a informace jsou zveøejnìny bez ohledu na pøípadné patenty tøetích osob. Nároky na odkodnìní na základì zmìn, chyb nebo vynechání jsou zásadnì vylouèeny. Recenze èeského vydání Václav Vacek
Vekerá práva vyhrazena. © Burkhard Mann, 20002002 © Franzis Verlag GmbH, 2000 © BEN technická literatura, 2003 Translation © Václav Losík, 2003 BEN technická literatura, Vìínova 5, 100 00 Praha 10 Burkhard Mann: C PRO MIKROKONTROLÉRY ANSI-C, kompilátory C, spojovací programy linkery, práce s ATMEL AVR a MSC-51, pøíklady programování v jazyce C, nástroje pro programování, tipy a triky, ... BEN technická literatura, Praha 2003 1. èeské vydání
ISBN 80-7300-077-6
Orig.: ISBN 3-7723-4154-3 (Franzis 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
Konstrukce a struktura programu v jazyce C .............................. 12
1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7
Promìnné, datové typy, rozsahy platnosti a hodnot .................. 16 Základní typy: int, char, float, double ................................................ 17 Konstanty a výètové typy: #define, enum ......................................... 22 Zmìna typu: automaticky, pomocí cast ............................................ 31 Pamìová tøída static, extern, register, auto a atribut const, volatile .............................................................. 33 Struktury a uniony: struct, union ....................................................... 37 Pole (arrays), znakové øetìzce a bitová pole ................................... 41 Vlastní datové typy: typedef ............................................................. 44
1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7
Operátory ........................................................................................ 46 Pøiøazení a aritmetické operátory: =, *, /, %, +, -, ++, - - ................... 46 Porovnávací a logické operátory: ==, !=, <=, =>, <, >, !, &&, êê ....... 48 Bitové operátory: &, ê, <<, >>, Ù, ~ .................................................. 50 Funkce jazyka C ............................................................................... 52 Podmínìný výraz ?: .......................................................................... 60 Speciální operátory: sizeof ............................................................... 61 Precedence a asociativita operátorù ................................................ 61
1.4
Pointery, ukazatele a promìnné-adresy: &, *, ., ->, [] .................. 63
1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7
Øízení programu: if, else, while, switch, case, for ...................... 69 Pøíkazy jazyka C ............................................................................... 69 Blok { } .............................................................................................. 69 Pøíkaz if-else ..................................................................................... 70 Smyèky while .................................................................................... 71 Pøíkaz switch-case ........................................................................... 71 Pøíkaz for .......................................................................................... 72 Nepodmínìné vìtvení programu: break, continue, goto .................. 73
1.6
Definice, deklarace ......................................................................... 73
1.7 1.7.1 1.7.2
Direktivy preprocesoru .................................................................. 75 Zahrnutí souboru : #include .............................................................. 77 Pøepínaèe kompilátoru: #define name, #if, #ifdef, #elif .................... 77
A
B. MANN:
C
PRO MIKROKONTROLÉRY
3
1.7.3 1.7.4 1.7.5
Makro: #define jméno text_makra .................................................... 78 Konstanta: #define jméno hodnota .................................................. 79 Direktiva #pragma ............................................................................ 79
1.8
Zdrojové soubory (source files) a soubory include .................... 80
1.9 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 1.9.10 1.9.11
Knihovna ANSI (ANSI Library) ...................................................... 81 Vstup/výstup <stdio.h> ..................................................................... 82 Funkce pro testování znakù
............................................ 84 Funkce pro znakové øetìzce <string.h> ........................................... 84 Matematické funkce <math.h> ......................................................... 86 Pomocné funkce <stdlib.h> .............................................................. 87 Hledání chyb .................................................................. 88 Seznamy promìnných argumentù <stdarg.h> ................................. 88 Globální skoky <setjmp.h> ............................................................... 88 Signály <signal.h> ............................................................................ 88 Datum a èas ...................................................................... 89 Mezní hodnoty ................................................................... 89
2
KOMPILÁTOR C PRO MIKROKONTROLÉRY ........ 91
2.1
Jazyk C a architektury MCU: von Neumann, Harward, RISC, CISC, CISP ............................................................................ 97
2.2
Poadavky jazyka C na architekturu MCU ................................... 99
2.3 2.3.1 2.3.2
8bitové architektury MCU od firmy Atmel .................................. 101 Rozíøené 8bitové mikrokontroléry RISC rodiny AVR .................... 101 MCS-51 .......................................................................................... 109
2.4 2.4.1 2.4.1.1 2.4.1.2 2.4.1.3 2.4.2 2.4.3 2.4.3.1 2.4.3.2 2.4.3.3 2.4.3.4 2.4.4 2.4.5 2.4.5.1 2.4.5.2 2.4.5.3 2.4.5.4
IAR Embedded Workbench ......................................................... 116 Zaloení jednoduchého projektu .................................................... 118 Editor .............................................................................................. 120 Nastavení projektu ......................................................................... 121 Kompilace a spojování ................................................................... 127 Ladicí program C-Spy .................................................................... 128 Kompilátor C firmy IAR Systems pro mikrokontroléry AVR ............ 132 Rozíøení jazyka ............................................................................. 133 Pragma direktivy a pøeddefinované symboly ................................. 137 Vlastní funkce (intrinsic), AVR-LIB a makra ................................... 139 Startup kód: cstartup.s90 ............................................................... 141 Spojovací program XLINK pro AVR ............................................... 145 Efektivní kód C pro mikrokontroléry AVR ....................................... 150 Pouívání ukazatelù ....................................................................... 151 Registry sfrb a pøístupy vstupu/výstupu ......................................... 153 Bitové promìnné ............................................................................ 155 Pøístup na EEPROM ...................................................................... 160
4
B. MANN:
C
PRO MIKROKONTROLÉRY
A
2.4.5.5 2.4.5.6 2.4.5.7 2.4.6
Definice promìnných ...................................................................... 165 Iterace, smyèky .............................................................................. 166 Kód jazyka C a kód assembleru ..................................................... 169 Kompilátor C pro mikrokontrolér 8051 od firmy IAR ...................... 171
2.5
Ladicí program (debugger) AVR Studio ..................................... 177
2.6
EC++ pro mikrokontroléry ........................................................... 178
3
PØÍKLADY PROGRAMÙ V JAZYCE C PRO AVR ....................................... 183
3.1
Øízení pøeruení UART ................................................................ 183
3.2
Indikace na displeji LCD .............................................................. 194
3.3
Èasovaè (Timer) ............................................................................ 198
4
TIPY A TRIKY V JAZYCE C ............................... 201
4.1
Efektivní C: velikost kódu, pamìové místo, typy promìnných .......................................................................... 201
4.2
Pozor na pasti: Jak se vyhnout typickým chybám v C ............. 208
5
SYSTÉMY PRACUJÍCÍ V REÁLNÉM ÈASE ......... 213
5.1
Veobecný popis funkce ............................................................. 214
5.2
Vysvìtlení pojmù: task, multitasking, preempting, RoundRobin .................................................................................. 215
5.3
Plánovaè (scheduler) ................................................................... 217
5.4
Komunikace mezi tasky ............................................................... 218
6
DOBRÝ PROGRAMOVACÍ STYL V JAZYCE C .... 221
6.1
Návrh/design programu ............................................................... 221
6.2
Soubory, funkce, konvence pro volbu jmen .............................. 224
6.3
Softwarová rozhraní ..................................................................... 226
6.4
Defenzivní programování ............................................................ 228
7
NÁSTROJE PRO PROGRAMOVÁNÍ V JAZYCE C ....................................................... 229
8
DODATKY ........................................................... 233
8.1
Formátovaný výstup (printf conversions) ................................. 233
8.2
Formátovaný vstup (scanf conversions) ................................... 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ènìte programovat i v C ................................... 241
9.2
Vývojový kit s procesorem T89c51RD2 ..................................... 242
9.3
Popis konektorù a pøípojných míst ............................................ 244
9.4 9.4.1 9.4.2 9.4.3
RD2-Flasher .................................................................................. 249 Práce s programem FLASHER ...................................................... 250 Tipy, triky, praxe .............................................................................. 251 Atmel FLIP ...................................................................................... 252
9.5
Úvod do programování v Keil C51 a SDCC ............................... 253
9.6
Popis prostøedí µVision2 IDE ...................................................... 256
9.7
SDCC Small Device C Compiler ............................................... 258
9.8 9.8.1 9.8.2 9.8.3 9.8.4 9.8.5 9.8.6 9.8.7 9.8.8 9.8.9 9.8.10 9.8.11 9.8.12
40 øeených pøíkladù v jazyce C pro Keil i SDCC ..................... 261 Sériový kanál .................................................................................. 263 LCD displej 2 × 16 znakù v 4bitovém reimu komunikace ............ 264 Maticová klávesnice 4 × 3 tlaèítka .................................................. 266 Systém pøeruení ........................................................................... 266 Èasovaè Watchdog ........................................................................ 267 Èítaèem podporované programovatelné pole PCA, èasovaè T2 ... 268 Pamì programu FLASH ................................................................ 270 Pamì EEPROM ............................................................................ 271 Vnìjí pamì dat XRAM ................................................................. 271 Speciální funkce procesoru ............................................................ 271 Diagnostika RD2 Kitu ..................................................................... 272 Pokroèilé pouití vývojových nástrojù ............................................ 273
10
LITERATURA ..................................................... 275 Prezentace firmy HW server .............................. 276 Prezentace firmy HT Eurep ................................ 277 Knihy nakladatelství BEN technická literatura ................................. 278 Kontaktní adresy na firmu BEN technická literatura ................................. 280
6
B. MANN:
C
PRO MIKROKONTROLÉRY
A
O KNIZE Dnes ji sotva existuje technický obor z bìného ivota, a ji je to oblast multimédií, komunikací, automobilové techniky nebo prùmyslu, v ní nejdùleitìjí øídicí funkce nepøevzaly mikrokontroléry. Nové, stále výkonnìjí výrobky, jako jsou satelitní pøijímaèe, set-top-boxy, internetové boxy, DVD pøehrávaèe, navigaèní systémy GPS a mobilní telefony, kladou stále rostoucí poadavky jak na mikrokontroléry, tak na software, který je pro nì nutno vyvinout. Mezi mikrokontroléry nazývanými té struènì MCU (MicroController Unit), rozdìlenými podle íøky registrù a datové sbìrnice na 8, 16 a 32bitové typy, jsou doposud nejrozíøenìjí 8bitové a 16bitové mikrokontroléry, které pøedstavují 80 % vech pøípadù aplikací. Podíl 32bitových typù v embeded systems roste pøedevím ve vysoce integrovaných èipech, jako jsou dekodéry MPEG nebo pøípravky GPS, u nich jen jedna komponenta je 32bitová CPU. Pro mnoho aplikací vak 8bitová MCU zùstává z hlediska pomìru cena/výkon tím nejlepím øeením. Výzkumy dokládají, e poptávka po 8bitových mikrokontrolérech bude znaèná jetì po dlouhou dobu i v 21. století. Není tedy divu, e trh mikrokontrolérù existující ji více ne 20 let je oivován novými rodinami a architekturami. V posledních letech se objevily mj. nové 8bitové rodiny mikrokontrolérù PIC, AVR a 16bitové rodiny jako H8S, XA, C167, M16C. A jistì budou následovat dalí. To, co se v poslední dobì výraznì zmìnilo, je zpùsob programování mikrokontrolérù. Klíèové slovo Time-to Market znamená kratí doby vývoje softwaru pøi rostoucí sloitosti aplikací a zachování nebo zvýení kvality. Dále jsou to z toho plynoucí poadavky na opakovatelnou pouitelnost, prùhlednost, pøenosnost, udrovatelnost softwarových modulù, které vyadují pouití vyích programovacích jazykù a speciálních vývojových nástrojù. Jazyk ANSI-C v posledních letech dokázal, e je pro poadavky oboru mikrokontrolérù velmi vhodný. C je v souèasné dobì nejèastìji pouívaný programovací jazyk, a to nejen pøi programování mikrokontrolérù. Jeho blízkost hardwaru a efektivní a pruná práce s pamìtmi a pøídavnými zaøízeními uspokojuje zejména poadavky »embedded systems« (uzavøených, zapouzdøených systémù). Mnohým pøipadá pøechod z assembleru na jazyk C obtíný. Pochybnosti týkající se velikosti kódu a rychlosti zpracování vak ji u moderních mikrokontrolérù a kompilátorù C nejsou na místì. Firmy Atmel a IAR Systems dávají skvìlý pøíklad v podobì úspìné rodiny mikrokontrolérù AVR. Výe uvedené poadavky moderního softwarového inenýrství jsou do jazyka C podstatnì snáze pøenositelné. Proto vznikla i tato kniha, která ve struèném úvodu omezujícím se na podstatné vìci vysvìtluje základy ANSI-C relevantní pro mikrokontroléry. V popøedí stojí tvorba efektivního programového kódu. Podrobnìji jsou napøíklad uvádìny zvlátnosti jazyka C pro rodiny mikrokontrolérù AVR, MCS-51. Na doprovodném CD jsou vedle vech 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èeny pro rodiny AVR a 8051 AT89 firmy Atmel, take vechny pøíklady je mono zpùsobem blízkým praxi napodobit v simulátoru. Je také ukázáno, jak je mono si vývojovou práci zjednoduit v rámci vývojového systému Embedded Workbench pomocí nástrojù editor, make, kompilátor (pøekladaè), spojovací program (linker, sestavovací program), ladicí program (debugger). A pøirozenì také mnoho tipù a trikù, které mají zaèáteèníkùm v C usnadnit zaèátky a zkueným poskytnout podnìty k zamylení. Mysleli jsme vak i na rychlé vyhledávání informací. Proto jsou v knize pouívány tøi symboly pro zapamatovat si, promyslet si a napodobit. Pomocí tohoto piktogramu je mono rychle vyhledávat základní vìdomosti nebo dùleitá shrnutí, která jsou èasto pouívána. Má smysl si je zapamatovat a etøit tak èasem. Abyste pochopili pozadí, je dùleité si promyslet souvislosti. Proto je v knize pouíván tento piktogram, který oznaèuje pøíklady, porovnání, podnìty, pouití nástrojù nebo také zpùsoby nastavení. Vechny pøíklady oznaèené tímto zpùsobem je mono zpracovávat a napodobovat pomocí pøiloené demoverze Embedded WorkbenchTM od firmy IAR Systems. Souèástí tohoto vývojového prostøedí (workbench) je ladicí program (debugger) C-Spy jako simulátor MCU na stolním poèítaèi, pomocí nìho je mono testovat a analyzovat kód C. Za podporu pøi pøípravì této knihy dìkuji na tomto místì firmì Kathrein Werke KG v Rosenheimu, panu Hartmannovi a jeho pomocníkùm ve firmì IAR Systems AG a firmì Atmel. V neposlední øadì dìkuji i své rodinì, bez její pomoci by takový projekt nebylo mono zvládnout. Kolbermoor, leden 2000, Burkhardt Mann
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 knize. Naleznete zde vechny informace potøebné pro snadnou práci s knihou. Tyto informace lze rozdìlit do logických celkù, které se nacházejí v oddìlených adresáøích: n
adresáø _DATA je pracovní adresáø funkce AUTORUNu,
n
adresáø _UTIL obsahuje instalaèní soubory programù Adobe Acrobat Reader,
n
adresáø ATMEL je zèásti tvoøen pùvodním obsahem nìmeckého doprovodného CD a zèásti aktuálními daty pøevzatými z jejich webových stránek. _nove (aktuální verze programu AVR Studio, programátor ISP, katalogové listy mikrokontrolérù ATMEL,
) Acrobat (katalogové listy z pùvodního CD), images (pracovní adresáø z pùvodního CD), PDF (dokumentace z pùvodního CD), Software (vývojové prostøedí z pùvodního CD).
n
adresáø BEN.WWW obsahuje off-line verzi www stránek nakladatelství BEN technická literatura (aktualizováno k poèátku bøezna 2003), jejich souèástí je poèítaèová verze titìného katalogu Edièního plánu jaro/léto 2003,
n
adresáø CZ je vlastní náplò CD, tj. jedná se o dokumenty HTML. Èást z nich byla pøeloena ze zdrojového adresáøe DE do èetiny a dále graficky upravena. Èást byla aktualizována, doplnìna a dále rozíøena. Ve v èetinì nebo angliètinì.
n
adresáø DE je pøeváná èást CD, které bylo souèástí pùvodního nìmeckého originálu knihy. Ve v nìmèinì.
n
adresáø IAR je zèásti tvoøen pùvodním obsahem nìmeckého doprovodného CD a zèásti pøevzatými daty z demonstraèního CD firmy IAR. ApplicationNotes (Aplikaèní poznámky k pùvodním datùm), Datasheets (katalogové listy k pùvodním datùm), Files (nová doprovodná dokumentace), Demos (nové demoverze programù), Workbench_8051 (blií popis této starí verze programu zde v knize), Workbench_AVR (blií popis této starí verze programu zde v knize), XML (systémové soubory prezentace IAR).
n
adresáø PRIKLADY jsou zdrojové texty k pøíkladùm ke kapitolám 1, 2 a 3.
n
adresáø SW_TOOLS je software a programovací nástroje pøevzaté z pùvodního nìmeckého vydání.
A
B. MANN:
C
PRO MIKROKONTROLÉRY
9
PÁR SLOV K ÈESKÉMU VYDÁNÍ Na knize jsme zaèali pracovat poèátkem roku 2002, kdy jsme podepsali a zaplatili licenci udìlenou nìmeckým vydavatelem. Nìjakou dobu ji zpracovával pøekladatel, poté jsme ji po nìkolika mìsících práce v závìru roku 2002 dokonèili u nás v redakci nakladatelství BEN technická literatura. Vezmeme-li v úvahu, e autor knihu dokonèil a rukopis odevzdal v lednu 2000, ubìhla od sestavení pùvodních informací, tvoøících jádro knihy, ji pomìrnì dlouhá doba. Z tìchto dùvodù jsme se snaili poèátkem roku aktualizovat alespoò obsah doprovodného CD ROM, abyste jako ètenáøi dostali do ruky opravdu hodnotný kus díla. Pokud bychom toti chtìli náplò knihy neustále aktualizovat, dostávali bychom se do zaèarovaného kruhu, nebo ne bychom staèili zpracovat nové verze programù, tak by byla k mání nová verze AVR Studia nebo programu Emdedded Workbench. Není vak úèelem této knihy popisovat konkrétní verze programù, ale dodat ètenáøùm jisté know-how, aby byli schopni se zmiòovanými programy pracovat sami. Poèátkem roku jsme od firmy IAR obdreli jejich CD s demoverzemi programù (vydané na pøelomu 2002/2003), z nich jsme jejich hlavní produkty umístili na doprovodném CD. Zároveò i firma Atmel aktualizovala výraznì vzhled svých www stránek, který je zároveò pøehlednìjí. Jak sami zjistíte, prùmìrnì zabírají instalace Emdedded Workbench kolem 20 MB datového prostoru (pro kadý jednotlivý mikrokontrolér) a pro mikrokontroléry øady Atmel AVR je to dokonce cca 42 MB. Ne kadý má monost pøipojení rychlého Internetu, co byl hlavní dùvod radìji jsme poèkali na zaslání CD z firmy IAR, ne abychom vydali knihu s doprovodným CD, které bude mít zastaralý obsah. Take pøesto, e vychází kniha oproti pùvodním pøedpokladùm s mírným zpodìním, v koneèném dùsledku nám to vlastnì pomohlo výraznì aktualizovat obsah doprovodného CD ROM. Libor Kubica [email protected]
Doporuèujeme (na doprovodném CD): IAR Emdedded Workbench Evaluation version for Atmel AVR v2.27B \IAR\Demos\EWAVR\ewavr-ev.exe AVR Studio 4.06 for Windows 9x/NT/2000 \ATMEL\_nove\avr_4.0\AvrStudio4RC1.exe
10
B. MANN:
C
PRO MIKROKONTROLÉRY
A