MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY Stručný úvod do programování v jazyce C 1.díl České vysoké učení technické Fakulta elektrotechnická A1B14MIS Mikroprocesory pro výkonové systémy 06 Ver.1.10 J. Zděnek, 20171
Programovací jazyk C C je nejpoužívanější programovací jazyk pro programování Embedded systémů. Co je Embedded systém? Je to zařízení které nevypadá jako běžný počítač ale počítač obsahuje typicky naprogramovaný pro specifickou funkci (řídící jednotka motoru auta, automatická pračka, kamera atp.) C je kompilovaný programovací jazyk. Co to znamená? Zdrojový kód napsaný programátorem je po zpracování převeden do strojového (spustitelného) tvaru. Po zavedení do počítače je přímo spustitelný bez dalšího zpracování on-line (na rozdíl třeba od programovacího jazyka Java) Pozn. V některých platformách (např. Windows), kdy je strojový kód zaváděný do různých částí paměti (tam kde je paměť právě volná) dochází ještě při zavádění k přepočtu adres (relokaci). Typický Embedded systém má strojový kód nastavený do danéčásti paměti napevno a relokace není třeba. A1B14MIS Mikroprocesory pro výkonové systémy 06 2
Zpracování zdrojového kódu jazyka C Zdrojový kód jazyka C je zpracován na strojový (spustitelný) kód v několika krocích. Krok 1: Preprocesor odstraní komentáře a vykoná příkazy začínající symbolem # (příkazy preprocesoru) Krok 2: Kompilátor (Compiler) zkontroluje syntaxi (dodržení jazykových pravidel C ) zdrojového kódu v C a vytvoří zdrojový kód v assembleru. Krok 3: Translator assembleru přeloží zdrojový kód v assembleru do strojového kódu a ponechá vzájemné odkazy (adresy) volání nevyřešené. Krok 4: Linker (spojovací program) vypočítá vzájemné odkazy (adresy) tak, aby program byl umístěn do paměti podle pokynů Linker skriptu (ten připraví programátor nebo se použije připravený Linker skript od výrobce software. V tomto kroku lze připojit i moduly napsané přímo v assembleru a přeložené do strojového kódu. Dále lze připojit knihovní (library) moduly od výrobce sw. Uvedené kroky probíhají na PC a výsledný spustitelný program (executable program) se uloží na pevný disk. Po zavedení (naprogramování) spustitelného kódu do paměti mikrokontroleru (typicky do jeho FLASH paměti) je program připravený ke spuštění. A1B14MIS Mikroprocesory pro výkonové systémy 06 3
Zpracování zdrojového kódu jazyka C soubor2.h soubor1.c Header soubor3.c Source code Source code 1) Preprocessor Zdroj.kód C Zdroj.kód ASM 2) Compiler Assembly code 3) Assembler Object code soubor4.asm Source code soubor5.lib Libraries Knihovny 4) Linker Spustitelný kód Executable code A1B14MIS Mikroprocesory pro výkonové systémy 06 4
IDE Integrated Development Environment Zdrojový kód v jazyce C lze napsat v libovolném textovém editoru a jednotlivé kroky zpracování spustit z příkazového řádku. Mnohem jednodušší je použít IDE určené pro daný mikrokontroler IDE obsahuje: Textový editor IDE provede automaticky všechny nutné kroky pro výrobu spustitelného kódu (tj. zavolá preprocesor linker). Linkeru předá informace o požadované pozici programu v paměti (získané z Linker skriptu) IDE obsahuje navíc simulátor tj. program, který běží na PC a umí interpretovat vytvořený spustitelný kód a umožňuje předladit program bez skutečného hadware. IDE obsahuje napojení na programátor pro zavedení programu do paměti mikrokontoleru. IDE obsahuje napojení na emulátor tj přístroj, který umožní ladit program přímo v mikrokontorleru V laboratoři budeme používat IDE od fy. Microchip jménem MPLAB. A1B14MIS Mikroprocesory pro výkonové systémy 06 5
Oživení IDE MPLAB IDE MPLAB pracuje s projekty. Projekt registruje typ mikrokontroleru, použité prostředky pro vytvoření spustitelného kódu, použitý linker skript, stav uživatelovy plochy (rozmístění oken), soubory se zdrojovým kódem a další informace. Založení projektu (viz též následující snímky): Project (horní nástojová lišta) Project wizard (pomocník pro založení projektu) Vložit typ mikrokontoleru (PIC18F87J11 pro naše lab) Potvrdit nástroje (C18,MPASM,MPLINK,MPLIB) Zvolit název projektu Připojení zdrojového souboru teď přeskočit (nic není otevřeno) Dokončit A1B14MIS Mikroprocesory pro výkonové systémy 06 6
Oživení IDE MPLAB Založení souboru zdrojového textu (viz též následující snímky): File (horní nástojová lišta) New File Save as Zvolit jméno souboru s rozšířením *.c Připojit Linker skript : Okno File, symbol adresáře Linker skript, pravá myš Add files Na disku najít adresář lkr s tam najít soubor 18F87J11.lkr Otevřít (jméno souboru se zobrazí u adresáře Linker skript Připojit do projektu zdrojový soubor: Okno File, symbol adresáře Source files, pravá myš Add files Na disku najit soubor *.c, který jsme založili v nabídce File Otevřít (jméno souboru se zobrazí u adresáře Source files A1B14MIS Mikroprocesory pro výkonové systémy 06 7
Oživení IDE MPLAB Na obrazovce IDE MPLAB nyní vidíme 3 okna (File, okno textového editoru, Output). Okno textového editoru je prázdné, ještě jsme nevložili žádný zdrojový text. Do okna textového editoru vložit text (zdrojový kód): int x; void main(void){ while(1){ x = x + 1; } } Ověření správného nastavení IDE: Project (horní nástojová lišta) Build all V okně Output se zobrazí postup překladu a na závěr text BUILD SUCCEDED. IDE je připraveno k práci. Pokud se zobrazí text BUILD FAILED některý krok nebyl správný. A1B14MIS Mikroprocesory pro výkonové systémy 06 8
Oživení IDE MPLAB založení projektu A1B14MIS Mikroprocesory pro výkonové systémy 06 9
Oživení IDE MPLAB založení projektu A1B14MIS Mikroprocesory pro výkonové systémy 06 10
Oživení IDE MPLAB založení projektu A1B14MIS Mikroprocesory pro výkonové systémy 06 11
Oživení IDE MPLAB založení projektu A1B14MIS Mikroprocesory pro výkonové systémy 06 12
Oživení IDE MPLAB založení projektu A1B14MIS Mikroprocesory pro výkonové systémy 06 13
Oživení IDE MPLAB založení projektu A1B14MIS Mikroprocesory pro výkonové systémy 06 14
Oživení IDE MPLAB založení zdrojového souboru A1B14MIS Mikroprocesory pro výkonové systémy 06 15
Oživení IDE MPLAB založení zdrojového souboru File New Save as A1B14MIS Mikroprocesory pro výkonové systémy 06 16
Oživení IDE MPLAB volba Linker skriptu Okno Files Linker skript Add files A1B14MIS Mikroprocesory pro výkonové systémy 06 17
Oživení IDE MPLAB volba Linker skriptu A1B14MIS Mikroprocesory pro výkonové systémy 06 18
Oživení IDE MPLAB připojení zdrojového souboru do projektu Okno Files Source files Add files A1B14MIS Mikroprocesory pro výkonové systémy 06 19
Oživení IDE MPLAB připojení zdrojového souboru do projektu A1B14MIS Mikroprocesory pro výkonové systémy 06 20
Oživení IDE MPLAB zápis testovacího programu A1B14MIS Mikroprocesory pro výkonové systémy 06 21
Oživení IDE MPLAB sestavení spustitelného programu Projects Build all A1B14MIS Mikroprocesory pro výkonové systémy 06 22
Oživení IDE MPLAB vložení headeru pro zvolený mikrokontroler Aby bylo možné ve zdrojovém kódu v C používat přímo názvy řídicích registrů zvoleného mikrokontroléru je nutné do C dodefinovat určité proměnné. To je v tomto případě učiněno v tzv. hlavičkovém souboru (header), který je vložen (zatahován) do zdrojového kódu jedním z příkazů preprocesoru. Tento příkaz se jmenuje include, příkazy preprocesoru začínají vždy znakem # (dvojitý křížek). Hlavičkové soubory mají rozšíření *.h V případě mikrokontroléru používaného v laboratoři (PIC18F87J11) je název hlavičkového souboru P18F87J11.h Hlavičkový souboru je připraven výrobcem IDE MPLAB a je umístěn v adresáři h v instalovaném software MPLAB Způsob připojení hlavičkového souboru P18F87J11.h do projektu je na následujících třech snímcích. Zápis ve zdrojovém kódu má tvar #include <P18F87J11.h> A1B14MIS Mikroprocesory pro výkonové systémy 06 23
Oživení IDE MPLAB vložení headeru pro zvolený mikrokontroler Okno Files Header files Add files A1B14MIS Mikroprocesory pro výkonové systémy 06 24
Oživení IDE MPLAB vložení headeru pro zvolený mikrokontroler Okno Files Header files Add files A1B14MIS Mikroprocesory pro výkonové systémy 06 25
Oživení IDE MPLAB vložení headeru pro zvolený mikrokontroler A1B14MIS Mikroprocesory pro výkonové systémy 06 26
Oživení IDE MPLAB připojení simulátoru do projektu IDE MPLAB obsahuje výkonný simulátor Simulátor je software běžící na PC, který umí interpretovat spustitelný kód mikrokontroleru (zobrazuje se zdrojový kód v C ) Umožňuje programátorovi předladit program bez připojení reálného hardware Simulátor se připojí do projektu takto: Debugger (horní nástrojová lišta) Select tool MPLAB SIM Po připojení simulátoru se v nabídce Debugger (horní nástrojová lišta) objeví řada ladicích příkazů. Před použitím příkazu Run je nutné do zdrojového kódu vložit breakpoint (bod zastavení programu) V simulátoru lze vložit větší množství breakpointů Breakpoint se vloži (odstraní) poklepání dvojitou myší na šedivý pruh vlevo od zdrojového kódu. A1B14MIS Mikroprocesory pro výkonové systémy 06 27
Programovací jazyk C je blokový jazyk C je blokový jazyk Blok se v C nazývá funkce Funkce se v C navzájem volají a vytvářejí logiku programu Veškeré výkonné příkazy v C musí být uvnitř nějaké funkce Mimo funkce mohou být pouze deklarace některých proměnných Funkce se skládá z: Hlavičky funkce Těla funkce Hlavička funkce se skládá z: Typu návratové hodnoty (může být void tj. fce nevrací nic) Jména funkce (jedna funkce povinně main ostatní volí programátor) Formálních parametrů (mohou být void tj. žádné) Tělo funkce: Je vymezeno složenými závorkami Obsahuje vlastní zdrojový kód programu A1B14MIS Mikroprocesory pro výkonové systémy 06 28
Programovací jazyk C funkce Funkce v C mohou být umístěny: V jednom souboru na disku Ve více souborech na disku Jméno souboru na disku volí programátor Jméno souboru na disku musí mít rozšíření *.c Každý soubor na disku s funkcemi daného programu musí být registrován v projektu (okno Files, adresář Source Files ) Jména funkcí musí být jedinečná (nemohou být dvě funkce se shodným jménem). V C se rozlišují velká a malá písmena (vypocti je jiné jméno proti Vypocti) Jména funkcí volte s počátečním písmenem malým a každá další mnemotechnická část jména s velkým písmenem (jako v Javě) tedy: vypoctiobsahkruhu (a nikoliv Vypoctiobsahkruhu atp.) A1B14MIS Mikroprocesory pro výkonové systémy 06 29
Programovací jazyk C funkce Breakpoint Program je nyní zastaven zde Funkce main (povinne jmeno jedne funkce Dalsi funkce (jmeno voli programátor) A1B14MIS Mikroprocesory pro výkonové systémy 06 30
Programovací jazyk C funkce Volání funkce Funkce main (povinne jmeno jedne funkce Hlavička funkce Telo fukce. Vymezeno slozenymi zavorkami A1B14MIS Mikroprocesory pro výkonové systémy 06 31
Programovací jazyk C funkce Volání funkce Typ navratove hodnoty Skutecny parametr (obsahuje hodnotu se kterou funkce pracuje) Navratova hodnota Formalni parametr (vstupni parametr) A1B14MIS Mikroprocesory pro výkonové systémy 06 32
Programovací jazyk C funkce a procedury Druh funkce se rozlišuje podle návratové hodnoty: Funkce s návratovou hodnotou je typu Funkce Funkce bez návratové hodnoty (void) je typu Procedura Pravidla pro formální parametry (popis vstupů funkce v kulatých závorkách) jsou shodná pro funkce i procedury Formálních parametrů může být uvedeno více, oddělují se čárkou Jméno formálních parametrů je určeno pro popis činnosti funkce a nesouvisí se jménem skutečných parametrů Před použitím funkcí se uvádí tzv. prototyp funkce aby překladač mohl zkontrolovat zda jsou skutečné parametry při volání funkce platné. Prototyp funkce je pouze hlavička funkce bez těla. A1B14MIS Mikroprocesory pro výkonové systémy 06 33
Programovací jazyk C funkce a procedury Prototypy funkci Volání funkce a procedury jménem Funkce typu funkce (má návratovou hodnotu) Typ navratove hodnoty Procedura (nemá návratovou hodnotu) A1B14MIS Mikroprocesory pro výkonové systémy 06 34
Programovací jazyk C řídící struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: 1. posloupnost, předepisující postupné provedení dílčích příkazů shora dolů, tak jak jsou zapsané ve zdrojovém kódu 2. větvení, předepisující provedení dílčích příkazů v závislosti na splnění určité podmínky 3. cyklus, předepisující opakované provedení dílčích příkazů v závislosti na splnění určité podmínky 1. Budeme používat následující složené příkazy: 1. složený příkaz nebo blok pro posloupnost Složený příkaz: { <posloupnost příkazů> } Blok: { <posloupnost deklarací a příkazů>} 2. příkaz if nebo if else pro větvení (podmíněný příkaz) 3. Programový přepínač switch pro větvení do více směrů 4. příkazy while, do while nebo for pro cyklus A1B14MIS Mikroprocesory pro výkonové systémy 06 35
Programovací jazyk C řídící struktury podmíněný příkaz if if else + + - - A1B14MIS Mikroprocesory pro výkonové systémy 06 36
Programovací jazyk C řídící struktury podmíněný příkaz if + - Složený příkaz A1B14MIS Mikroprocesory pro výkonové systémy 06 37
Programovací jazyk C řídící struktury podmíněný příkaz if else + - Blok (je zde i deklarace int u) u je známé jen uvnitř bloku A1B14MIS Mikroprocesory pro výkonové systémy 06 38
Programovací jazyk C řídící struktury programový přepínač switch A1B14MIS Mikroprocesory pro výkonové systémy 06 39
Programovací jazyk C řídící struktury programový přepínač switch Pokud se nenajde shoda mezi testovanou proměnnou (zde x) a case, celý switch se přeskočí Testovaná proměnná musí být celočíselná Za case musí být konstanta (přímá nebo symbolická) A1B14MIS Mikroprocesory pro výkonové systémy 06 40
Programovací jazyk C řídící struktury cyklus while nebo for - + A1B14MIS Mikroprocesory pro výkonové systémy 06 41
Programovací jazyk C řídící struktury cyklus while - + A1B14MIS Mikroprocesory pro výkonové systémy 06 42
Programovací jazyk C řídící struktury cyklus while + - Musí být v tomto pořadí, aby se konstanta TRUE = 1 Nekonečný cyklus ( C nezná logickou proměnnou, ale 1 = true, jiná hodnota = false) A1B14MIS Mikroprocesory pro výkonové systémy 06 43
Programovací jazyk C řídící struktury cyklus for - + A1B14MIS Mikroprocesory pro výkonové systémy 06 44
Programovací jazyk C řídící struktury cyklus for - + Nekonečný cyklus A1B14MIS Mikroprocesory pro výkonové systémy 06 45
Programovací jazyk C řídící struktury cyklus do while - + A1B14MIS Mikroprocesory pro výkonové systémy 06 46
Programovací jazyk C řídící struktury cyklus do while - + Pozor: cyklus do-while se provede vždy alespoň jednou, neboť test je až na konci bloku A1B14MIS Mikroprocesory pro výkonové systémy 06 47
Programovací jazyk C řídící struktury cyklus do while - Musí být v tomto pořadí, aby se konstanta TRUE = 1 + Nekonečný cyklus ( C nezná logickou proměnnou, ale 1 = true, jiná hodnota = false) A1B14MIS Mikroprocesory pro výkonové systémy 06 48
MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY Stručný úvod do programování v jazyce C 1.díl KONEC České vysoké učení technické Fakulta elektrotechnická A1B14MIS Mikroprocesory pro výkonové systémy 06 49