1. Úvod do předmětu, seznámení s vývojovými prostředky

Podobné dokumenty
1. Úvod, návrhový systém MPLAB, úvod do programování v C

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Opakování programování

Programování v C++ 1, 1. cvičení

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Úvod do programovacích jazyků (Java)

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

5. Čtení/zápis sektorů z/do USB paměťového média I

Metody připojování periferií

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Návod na práci s přípravkem a programem uscope na cvičeních

Programátor AVRProg USB v3 MK II Eco Manuál

Návod na práci s přípravkem a programy uscope a FLIP na cvičeních

První kroky s METEL IEC IDE

PicoBlaze lekce 1: assembler, C překladač a simulační prostředí Jiří Svozil, Leoš Kafka, Jiří Kadlec svozil@utia.cas.cz

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Algoritmizace a programování

Odvozené a strukturované typy dat

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Motorola MC35 stručný návod k použití

PŘÍLOHY. PRESTO USB programátor

P D S - 5 P. Psychologický diagnostický systém. Instalační manuál. Popis instalace a odinstalace programu Popis instalace USB driverů

PVKpro vývojový kit s programátorem pro mikrokontrolér PIC16F84 Připojení k PC: paralelní port Uživatelská příručka

Programování PICAXE18M2 v Assembleru

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

- jak udělat konstantu long int: L long velka = 78L;

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Operační systémy. Cvičení 3: Programování v C pod Unixem

Programovací jazyk C++ Hodina 1

Základy programování (IZP)

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Metody připojování periferií BI-MPP Přednáška 2

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Úvod do programování. Lekce 1

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Vestavné systémy. BI-VES Přednáška 9. Ing. Miroslav Skrbek, Ph.D.

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Struktura a architektura počítačů (BI-SAP) 7

Firmware USBasp pro modul AVRUSB. Milan Horkel. Parametr Hodnota Poznámka. Rozhraní USB Low Speed. Procesor ATmega8 ATmega88 Varianty překladu

Maticová klávesnice. Projekt do předmětu Subsystémy PC. Brno, Tomáš Kreuzwieser, Ondřej Kožín

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Uživatelská příručka. FULL HD Policejní kamera

Popis programu: Popis přípon důležitých souborů: *.qpf projektový soubor Quartusu

IUJCE 07/08 Přednáška č. 1

Architektury počítačů

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

setup() { I = 0; } loop() { I = I + 1; }

Obslužný software. PAP ISO 9001

11. Implementace ovladače ve Windows

Základy programování (IZP)

Číslicový zobrazovač CZ 5.7

PRESTO. USB programátor. Uživatelská příručka

Program "Světla" pro mikropočítač PMI-80

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

PCKIT LPT MODUL SBĚRNICE IOBUS PRO PC LPT. Příručka uživatele. Střešovická 49, Praha 6, s o f c o s o f c o n.

5 Přehled operátorů, příkazy, přetypování

EduKit84. Výuková deska s programátorem pro mikrokontroléry PIC16F84A firmy Microchip. Uživatelská příručka

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Metody připojování periferií

Minix NEO Z64 Windows 8.1

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

MPASM a IDE pro vývoj aplikací MCU (Microchip)

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Nápověda k aplikaci EA Script Engine

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

PROGRAMOVÁNÍ V C++ CVIČENÍ

Princip funkce počítače

Základy programování (IZP)

Návod k aktualizaci firmwaru pro Web Server OZW a OZW772...

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Tužka s kamerou EKONOMY, 720x480px

TomTom ecoplus. Update Tool

Strojový kód. Instrukce počítače

Interface LPG / CNG Bluetooth. Instrukce k instalaci a konfiguraci zařízení v1.0 cz. U rozhraní bluetooth není instalace ovladače potřebná.

Programování mikropočítačů platforma Arduino

Formátové specifikace formátovací řetězce

Datacard. Instrukce k aktualizaci firmware tiskáren. Aktualizační aplikace pro operační systémy Windows

Příloha č. I: Schéma zapojení vývojové desky PVK-PRO

Metody připojování periferií

NASTEVNÍ FOTOPASTÍ LTL. ACORN 5210, 5310, 6210 S GSM BRÁNOU. Pro nastavení fotopastí s GSM bránou je potřeba SIM karta a počítač

POZOR!!! INSTALACE POD WINDOWS 200 / XP / VISTA PROBÍHÁ VE DVOU ETAPÁCH A JE NUTNÉ DOKON

Instalační manuál pixel-fox

Špionážní pero s kamerou, 720x480px

Použití programu uscope k simulaci výukového přípravku pro předmět PMP

1 Balení. Instalační příručka. Monitor LCD se správou barev. Důležité upozornění

Klimatizace. Třída: 4.C. Střední Průmyslová Škola Elektrotechnická Havířov Protokol do MIT. Skupina: 3. Zpráva číslo: 3

Skrytá kamera v peru TCT-SH03

Power banka s kamerou a detecí pohybu

Obsah: Bezpečnost Vybavení Vlastnosti Popis a funkce Pracovní postupy Nastavení Záznam teploty...

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

ZÁKLADNÍ UŽIVATELSKÝ MANUÁL PRO SÍŤOVÉ FAXOVÁNÍ

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

ALGORITMIZACE A PROGRAMOVÁNÍ

Metody připojování periferií

Jazyk C++, některá rozšíření oproti C

Transkript:

BI-MPP Cvičení 1 - Úvod, Miroslav Skrbek (C)2010,2011 1 z 8 1. Úvod do předmětu, seznámení s vývojovými prostředky Náplň cvičení Toto je úvodní cvičení předmětu. Zde budete seznámeni s podmínkami předmětu a požadavky k zápočtu. Dále se seznámíte s vývojovým přípravkem MPLAB Starter Kit for PIC24F a vývojovým prostředím MPLAB. Náplní cvičení je výklad dostupných knihoven pro přípravek a vytvoříte si jednoduchou aplikaci. Úkoly Napište program, který bude blikat LED diodami s využitím knihovny libmpp.a. Literatura 1. MPLAB Starter Kit for PIC24F User s Guide, Technická dokumentace, Microchip Technology Incorporated, 2008. (http://www.microchip.com) Obsah 1. Úvod do předmětu, seznámení s vývojovými prostředky Náplň cvičení Úkoly Literatura Programové vybavení předmětu Technické vybavení předmětu Návod Připojení přípravku k počítači Vytvoření projektu v návrhovém systému MPLAB Spuštení programu v přípravku Použití knihovních funkcí Úkoly Programování v jazyce C Jednoduché datové typy (MPLAB C30) Přiřazení a aritmetické výrazy Přetypování jednoduchých datových typů Bitové operace Přiřazení z/do speciálního funkčního registru Struktury (struct) Obsluha přerušení 2. 3. MPLAB IDE User s Guide with MPLAB Editor and MPLAB SIM Simulator. Technická dokumentace, Microchip Technology Incorporated, 2009. (http://www.microchip.com) MPLAB C30 C COMPILER USER S GUIDE. Technická dokumentace Microchip Technology Incorporated, 2005. (http://www.microchip.com)

BI-MPP Cvičení 1 - Úvod, Miroslav Skrbek (C)2010,2011 2 z 8 4. 5. PIC24F Family Reference Manual, section 27, USB On-The-Go (OTG). Technická dokumentace Microchip Technology Incorporated. 2010 (http://www.microchip.com) PIC24FJ256GB110 Family Data Sheet. Technická dokumentace Microchip Technology Incorporated. 2009. (http://www.microchip.com) Programové vybavení předmětu MPLAB IDE download www.microchip.com (úplně dole na stránce MPLAB IDE v8.63) MPLAB C30 Compiler download www.microchip.com (úplně dole na stránce MPLAB C Compiler for PIC24 and dspic v3.25 in LITE mode) Windows Driver Kit Netbeans 7 & MinGW (Windows) Netbeans 7 & GCC (Linux) Operační systémy Windows a Linux Knihovna libmpp (courseware) Technické vybavení předmětu MPLAB Starter Kit for PIC24F MPLAB Starter Kit for PIC24F - Uživatelská příručka Aplikační část přípravku (vpravo od bílé dělící čáry) obsahuje mikrokontrolér PIC24F256GB106 (1), ke kterému je připojen displej (3), kapacitní dotyková klávesnice (7), tříbarevná RGB LED dioda (11), potenciometr (6), USB konektor typ A: host, On-The-Go (4) a USB konektor B - device (5). Mikrokontrolér (1) je programován programátorem, který se nachází vlevo od bílé dělící čáry. Programátor obsahuje mikrokontrolér (8) s USB rozhraním a s počítačem komunikuje přes konektor (2). Mikrokotrolér (1) běží na hodinovém kmitočtu 12MHz, který získává z programátoru přes externí hodninový vstup. Krystal 32768Hz (10) je určen pro realizaci hodin reálného času a je napojen na mikrokontrolér (1). Návod Připojení přípravku k počítači Mini konektor USB kabelu připojte do konektoru (2) a druhý konec s USB konektorem A zasuňte do PC. Tím je přípravek připraven k použití. Přípravek je napájen přes USB kabel, nepotřebuje proto žádné externí napájení.

BI-MPP Cvičení 1 - Úvod, Miroslav Skrbek (C)2010,2011 3 z 8 Vytvoření projektu v návrhovém systému MPLAB 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Stiskněte Hlavní menu Project Project Wizard Další. Na panelu vybrat označení mikrokontroléru PIC24F256GB106. Stiskněte Další. Ve výběru Active Toolsuite vybrat Microchip C30 Toolsuite. Zkontrolovat položky v Toolsuite Contents. Pokud jsou na levé straně červené křížky, nemáte nainstalován balíček překladače C30. Stiskněte Další. V položce Create New Project File vyplňte cestu a jméno projektového souboru. Doporučuji si předem vytvořit projektový adresář a do něho uložit projektový soubor. Stiskněte Další. Na formuláři Step four nic nevyplňujte, stiskněte tlačítko Další a na dalším formuláři stiskněte Dokončit. Nyní vytvořte nový zdrojový soubor Hlavní menu New a uložte jej funkcí File Save a nezapomeňte vyplnit cestu do projektového adresáře a jméno souboru s příponou *.c. Zařaďte zdrojový soubor do projektu kliknutím pravým tlačítkem myši na Source Files v projektovém okně a výběrem položky Add Files v pop-up menu. Zařaďte linker script do projektu. Klikněte pravým tlačítkem myši na Linker Script v projektovém okně a výběrem položky Add Files v pop-up menu. Linker script pro PIC24FJ256GB106 najdete v adresáři c:\program Files\Microchip\mplabc30\v3.25\support \PIC24F\gld\p24FJ256GB106.gld. Program přeložte Hlavní menu Project Build All. Spuštení programu v přípravku HlavníMenu Programmer Select Tool Starter kits HlavníMenu Programmer Program Použití knihovních funkcí Pro vytváření vašich programů využijte funkce v knihovně libmpp.a. K této knihovně si stahněte také odpovídající hlavičkové soubory (součástí mpp_lib.zip) a rozbalte do projektového adresáře. // // Povinná část v každém programu // #include "cpu.h" cpu_init(); Pro ovládání led diod použijte funkce led_on, led_off. #include "cpu.h" #include "led.h" cpu_init(); led_init();

BI-MPP Cvičení 1 - Úvod, Miroslav Skrbek (C)2010,2011 4 z 8 // rozsvítí červenou LED led_on(led_r); // jednorázové rozsvícení led, proto skončíme v nekonečné smyčce while (1); Použití funkce delay_loop_ms. #include "cpu.h" #include "led.h" cpu_init(); led_init(); // rozsvítí červenou LED led_on(led_r); delay_loop_ms(500); led_off(led_r) // jednorázové rozsvícení led s následným zhasnutím po 0.5s, proto skončíme // v nekonečné smyčce. while (1); Úkoly Napište program, který bliká červenou LED Napište program, který realizuje semafor Programování v jazyce C Compiler C30 tools (GCC) Manual c30userguide.pdf Jednoduché datové typy (MPLAB C30) datový typ unsigned char počet bitů typ znaménko rozsah 8 I ne 0/255 (0x00/0xFF) char 8 I ano -128/127 (0x80/0x7F) poznámka unsigned int 16 I ne 0/65535 (0x0000/0xFFFF)! na x86 32 bitů int 16 I ano -32768/32767 (0x8000/0x7FFF) unsigned short 16 I ne 0/65535 (0x0000/0xFFFF) short 16 I ano -32768/32767 (0x8000/0x7FFF)! na x86 32 bitů

BI-MPP Cvičení 1 - Úvod, Miroslav Skrbek (C)2010,2011 5 z 8 unsigned long 32 I ne 0x00000000/0xFFFFFFFF long 32 I ano 0x80000000/0x7FFFFFFF float 32 FP ano double 32 FP ano! na x86 64 bitů void* 16! na x86 32 bitů obecně jakýkoliv ukazatel Při portování existujících programů (např. algoritmů pro kryptografii) z PC je třeba dát pozor na kratší int. Přiřazení a aritmetické výrazy int a,b,c; a = 1; b = 2; c = a + b; Přetypování jednoduchých datových typů INT char c = 0x80; int a; a = c; // v a bude 0xFF80 (znaménkové rozšíření) // Protože char je datový typ se znaménkem, dojde při konverzi do širší // typu se znaménkem k znaménkovému rozšíření. Proto bude v a hodnota 0 unsigned char c = 0x80; int a; a = c; // v a bude 0x0080, unsigned char je datový typ bez znaménka (hodnota v // proto horní bity zůstávají nulové. char c = 0x80; unsigned int a; a = c; // v a bude 0xFF80, nejprve dojde ke znaménkovému rozšíření na defaultn // do proměnné unsigned int. FLOAT (DOUBLE) float c = 1.8; int a = c; // desetinná část datového typu float se ořízne, v a je tedy 1 (ne float c = 1.8; int a = c + 0.5; // převod na int se zaokrouhlením Bitové operace

BI-MPP Cvičení 1 - Úvod, Miroslav Skrbek (C)2010,2011 6 z 8 // ~ - bitová negace // - bitový or // & - bitový and // ^ - birový xor // = - bitový or (read-modify-write) a = 5; je totéž co a = a 5; // &= - bitový and (read-modify-write) a &= 5; je totéž co a = a & 5; // ^= - bitový xor (read-modify-write) a ^= 5; je totéž co a = a ^ 5; unsigned int a = 0xFF00; a = 0x0001; nastavení bitu 0 na jedničku v a a &= ~0x0100; nastavení bitu 8 na nulu v a a ^= 0x0001; negace bitu 0 v a Pozor!!! není totéž co, & není totéž co &&. Např. 5 & 8 je 0x00, kdežto 5 && 8 je 0x01 (5 a 8 jsou považovány za true, proto je výsledek true, tj. 1) Přiřazení z/do speciálního funkčního registru #include <p24fxxxx.h> TRISB = 0x000F; // hexadecimální hodnota LATB = 0b0001000100001111; // binární hodnota LATC = 128; // dekadicky unsigned int b = PORTB; unsigned short c = PORTC; TRISB, LATB, LATC, PORTB a PORTC jsou názvy speciálních funkčních registrů. Tyto registry jsou deklarovány v p24fxxxx.h a navazujících hlavičkových souborech. p24fxxxx.h je univerzální hlavičkový soubor pro všechny typy mikrokontrolérů řady PIC24F. Výběr konkrétního typu se provádí automaticky na základě mikropočítače uvedeného v projektu. Tím je zajištěna určitá portabilita zdrojového kódu. Struktury (struct) Zde se seznámíme s problémem, se kterým se můžete setkat i na systémech x86 a který vede na poměrně zákeřné chyby v programu. Tento problém se vyskytuje u všech architektur vyšších než osmibitových a pramení z nestejné efektivity přístupu do paměti a snahy překladačů generovat co nejoptimálnější kód. U 32 bitových procesorů x86 je možné provést jakékoliv čtení nebo zápis v délce 1, 2 nebo 4 byty, a to na jakékoliv adrese. Ale ne všechny se provedou stejně efektivně. Například 32 bitové čtení z adresy 1 bude rozloženo do dvou čtecích cyklů, protože paměť je organizovaná po 32 bitech a z adresy 0 se jedním čtením přečtou data z adres 1,2,3 a z adresy 4 se přečte nejnižší byte. Podobně bude vypadat 32 bitové čtení z adres 2 a 3 a šestnáctibitové čtení z adresy 3. U PIC24F, který má šestnáctibitovou architekturu, budou činit potíže 16 bitová čtení z lichých adres. Na rozdíl od x86, PIC24F v rámci jednoduchosti hardwaru taková čtení přímo zakazuje a pokus o takovéto čtení končí výjimkou. Proto tam, kde se nelze takovému čtení vyhnout, musí překladač generovat bytové instrukce i pro 16 bitové zápisové a čtecí operace. Mějme následující strukturu v programu pro PIC24F struct { char a; int b;

BI-MPP Cvičení 1 - Úvod, Miroslav Skrbek (C)2010,2011 7 z 8 char c; s; Logicky předpokládáme, že když proměnná s bude ležet na adrese řekněme 0x100, pak a bude na adrese 0x100, b bude na adrese 0x101 a c bude na adrese 0x103 a sizeof(s) bude vracet hodnotu 4. Schválně si to vyzkoušejte a uvidíte, že tomu tak není. a bude ležet na 0x100, b bude na adrese 0x102 a c bude na 0x104 a sizeof(s) bude vracet hodnotu 6. Byty na adresách 0x101 a 0x105 nebudou přístupné a nebudou tedy využity. Pak proměnnou b bude možno číst a zapisovat šestnáctibitovou operací, protože leží na sudé adrese 0x102. Pokud struktury používáte v rámci programu, pak nevznikne žádný problém a vše bude fungovat dobře. Problém nastane v okamžiku, kdy nějaká data načtete z vnějšku (například po sériové lince, síti, z SD karty, USB apod.) do pole a pak pole přetypujete na strukturu. Příklad Předpokládejme, že po sériové lince přijdou data, která budou mít hlavičku ve formátu 1. byte adresát, 2. a 3. byte délka, 4. byte příkaz. V programu budeme chtít zjistit, zda zpráva patří nám (porovnáme pole adresát). Pokud ano, vykonáme příkaz a parametry příkazu budou následovat za hlavičkou v délce, kterou udávají byty 2(LSB) a 3(MSB). Pro hlavičku si vytvoříme následující strukturu: typedef struct { unsigned char adresat; // 1B unsigned int delka; // 2B unsigned char prikaz; // 1B hlavicka_t; Pak napíšeme následující program... // deklarujeme buffer o délce 255 bytů #define BUF_SIZE 255 unsigned char buffer[buf_size]; // zavoláme funkci pro přečtení dat ze sériové linky, která // naplní buffer daty a vrátí délku prectenych dat int len = serial_read(buffer, BUF_SIZE); // Nyní přetypujeme buffer na ukazatel na hlavicku hlavicka_t* hlavicka = (hlavicka_t*)buffer; // Ted můme vyčíst jednotlivé položky unsigned char a = hlavicka->adresat; unsigned int l = hlavicka->delka; unsigned char p = hlavicka->prikaz;... Z pohledu jazyka C je to korektní program a při jeho prohlížení neshledáme žádnou chybu. Přesto pro následující hodnoty v poli buffer: 0x01, 0x02, 0x00, 0x0F, 0xAA, 0x55 (adresát 1, délka 2, příkaz 15 (0x0F)) přečteme do proměnných a = 0x01 (OK), l = 0x0F00 (Chyba), p = 0xAA (Chyba). Řešení tohoto problému Musíme použít atribut packed. Atributy můžeme chápat jako jistá upřesňující doporučení pro překladač, aby překládal určitým nestandardním způsobem. S tímto atributem bude deklarace hlavičky vypadat takto:

BI-MPP Cvičení 1 - Úvod, Miroslav Skrbek (C)2010,2011 8 z 8 typedef struct attribute ((packed)) { unsigned char adresat; // 1B unsigned int delka; // 2B unsigned char prikaz; // 1B hlavicka_t; Atribut packed můžeme také aplikovat na jednotlivé položky, alternativní deklarace vypadá takto: typedef struct { unsigned char adresat; // 1B unsigned int delka attribute ((packed)); unsigned char prikaz; // 1B hlavicka_t; // 2B Obsluha přerušení PIC24 obsahuje tabulku vektorů přerušení, kam se ukládají adresy podprogramů (funkcí v C), které jednotlivá přerušení obsluhují. Implicitně linker tabulku vyplní tak, že vektory přerušení směřují na implicitní obslužný podprogram, který provede reset mikropočítače. Pokud chceme nainstalovat pro některé přerušení vlastní obslužný podprogram (funkci v C), pak musíme následovat tato pravidla: funkce má přesně dané jméno, které koresponduje s typem přerušení, např. _T1Interrupt. Seznam dostupných jmen nalezneme v c30userguide.pdf tabulka 7-1, návratový typ funkce je void a parametry jsou také void, deklarace funkce musí obsahovat atributy interrupt a auto_psv. void attribute ((interrupt, auto_psv)) _T1Interrupt(void) { Atribut interrupt zajistí transparentnost funkce, tj. všechny registry modifikované funkcí obsluhy přerušení, případně funkcemi z ní volané. Na kód uvnitř funkce nejsou kladena z pohledu jazyka žádná omezení. Platí zásada, že program obsluhy přerušení musí být mikrokontrolérem vykonán v kratším čase než je perioda vzniku žádostí o toto přerušení. Proto v obsluze nepoužívejte složité funkce, jako je například zobrazování na displeji, kód obsahující dlouhá čekání např. prodleva několik milisekund, čekání na stisk klávesy, apod.