Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Podobné dokumenty
Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Algoritmizace a programování

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Základy programování (IZP)

Základy programování (IZP)

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Př. další použití pointerů

Základy programování (IZP)

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

ZÁPOČTOVÝ TEST. Zpracoval Vilém Závodný, #include "stdafx.h" #include "stdio.h"

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

Pointery II. Jan Hnilica Počítačové modelování 17

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

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

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

Lekce 19 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Mělká a hluboká kopie

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

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

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

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

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Funkční objekty v C++.

Dílčí příklady použití jazykových konstrukcí v projektu. Jazyk C Příklady. Pravidla překladu v gmake. Zadání

Funkce, intuitivní chápání složitosti

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

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

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í

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

PB161 Programování v jazyce C++ Přednáška 9

Abstraktní třídy, polymorfní struktury

Množina čísel int stl-set-int.cpp

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Více o konstruktorech a destruktorech

Základy programování (IZP)

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Úvod do programování. Lekce 5

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

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

Programování v jazyce C a C++

Struktury a dynamické proměnné

Spojová implementace lineárních datových struktur

PROGRAMOVÁNÍ V C++ CVIČENÍ. Michal Brabec

Úvod do programovacích jazyků (Java)

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

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

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

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

Základní datové struktury

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

Základy programování (IZP)

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

přetížení operátorů (o)

Ukazatele, dynamická alokace

8 Třídy, objekty, metody, předávání argumentů metod

Martin Flusser. December 15, 2016

IUJCE Přednáška č. 1. programování v C na vyšší úrovni základy objektově orientovaného programovaní v (C++, C#)

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

Objektově orientované programování

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

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

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Programování v jazyce C pro chemiky (C2160) 6. Funkce, struktury

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

Ukazatele #1, struktury

Úvod do programovacích jazyků (Java)

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

2 Datové typy v jazyce C

Programování MCU ve vyšších programovacích jazycích

Odvozené a strukturované typy dat

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

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

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Programovanie v jazyku C - struktury a polia

Lineární spojový seznam (úvod do dynamických datových struktur)

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Základy C++ I. Jan Hnilica Počítačové modelování 18

Úvod do programování - Java. Cvičení č.4

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

6 Příkazy řízení toku

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

ADT/ADS = abstraktní datové typy / struktury

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

68. ročník Matematické olympiády 2018/2019

PŘETĚŽOVÁNÍ OPERÁTORŮ

1. Téma 03 - Rozhodování

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

přetížení operátorů (o)

Struktura programu v době běhu

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Transkript:

Aplikace Embedded systémů v Mechatronice Michal Bastl A2/713a

Aplikace Embedded systémů v Mechatronice Obsah přednášky: Opakování Pointery v C pole a řetězce předání funkci referencí Vlastní datové typy typedef Struktury Ukázka Hardware poznámky Michal Bastl A2/713a

Opakování Postup při vytvoření vlastní funkce? Postup při vytvoření knihoven? Co patří do hlavičkového souboru? Michal Bastl A2/713a

Pointery/ukazatele Ukazatele v jazyce C slouží k přístupu do paměti a manipulaci s adresou. Celá věc v C funguje tak, že existují speciální proměnné, které uchovávají adresu v paměti. V C můžete pointer vytvořit příkazem typ* proměnná právě znak * určuje, že se bude jednat o ukazatel na příslušný datový typ pokud chci získat adresu proměnné používám referenční operátor & dereferenční operátor * slouží k získání hodnoty uložené na adrese ADD VAL 0x00 10 0xff 0x00 Michal Bastl A2/713a

Pointery/ukazatele int main() { int c; int* p_c; operátor reference &c vrací adresu paměti operátor dereference *p_c vrací hodnotu uloženou na adrese symbol *p_c slouží současně pro deklaraci pointeru c = 10; p_c = &c; printf("na adrese 0x%p je hodnota%d\n",p_c,*p_c); >>Na adrese 0x0060FF08 je hodnota 10 Michal Bastl A2/713a

Pointery-předání funkci void prohod(int* a, int* b); int main(){ int jedna; int dva; operátor reference &c vrací adresu paměti operátor dereference *p_c vrací hodnotu uloženou na adrese symbol *p_c slouží současně pro deklaraci pointeru jedna = 1; dva = 2; prohod(&jedna, &dva); printf("jedna = %d; dva = %d\n", jedna, dva); void prohod(int* a, int* b){ int tmp = *a; *a = *b; *b = tmp; void prohod(int a, int b){ int tmp = a; a = b; b = tmp; NEFUNGUJE!! >>jedna = 2; dva = 1

Pointery vs. pole void uloz_do_pole(int pole[], int index, int cislo); int main() { int cisla[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9; int main() { Pole a pointery spolu v C souvisí. Pokud předám funkci pole, provádím to vždy referencí. Proto změny, které ve funkci provedu, v poli zůstanou zachovány. Toto předání referencí proběhne a nemusíme se o to snažit. printf("%d\n", cisla[7]); uloz_do_pole(cisla, 7, 3); printf("%d\n", cisla[7]); void uloz_do_pole(int pole[], int index, int cislo){ pole[index] = cislo; char abc[] = "Pointery jsou fajn!"; char* p_abc = abc; while(*p_abc!= '\0'){ printf("%c", *p_abc); p_abc++; Pole v C je ukazatel na místo v paměti, kde pole začíná. Proto: cisla[1] a *cisla + 1 vrací stejný výsledek >>7 >>3

Aritmetika pointerů #include <stdint.h> int main() { int16_t pole[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10; int16_t *p_prvni, *p_posledni; p_prvni = pole; p_posledni = pole + 9; if(p_posledni > p_prvni){ printf("adresa %d \n", p_prvni); printf("adresa %d \n", p_posledni); printf("prvni %d \n", *p_prvni); printf("posledni %d \n", *p_posledni); printf("vysledek %d \n", p_posledni - p_prvni); S pointery jde počítat. Lze k nim přičítat celá čísla. Lze je mezi sebou porovnávat a také přičítat a odčítat mezi sebou. Smysluplné výsledky dostaneme například pokud máme dva ukazatele v jednom bloku paměti. Je třeba mít na paměti, že dochází ke srovnávání adres a tedy porovnání v příkladu p_posledn > p_prvni říká, že p_posledni je dále v bloku paměti. Rozdíl v příkladu je devět bloků příslušného datového typu. Tedy dle adres 18 bajtů. Kód p_prvni++ tedy posune ukazatel o dva bajty. Hodnotu do které se ukládá int16. >>Adresa 6356724 >>Adresa 6356742 >>Prvni 1 >>Posledni 10 >>Vysledek 9

typedef uživatelské datové typy V jazyce C je možné vytvořit uživatelský datový typ používá se klíčového slova typedef Příklad samozřejmě nemá valný smysl, tato možnost se s výhodou používá např. právě při tvorbě struktur v C int main() { typedef int mujint; mujint a, b; a = 10; b = 20; mujint c = a + b; printf("%d", c);

Struktury Struktura je zjednodušeně datový typ, do které uzavřeme další datové typy, které s tímto typem nějak abstraktně souvisí. Například každý uživatel má jméno, věk atd. Struktura může uchovávat různé datové typy a pole. Strukturu lze vytvořit různým zápisem, ale vřele doporučujeme držet se tohoto zápisu a vytvořit strukturu jako nový datový typ. V příkladu je umístěna do globálního prostoru. #include <string.h> typedef struct{ char jmeno[25]; int vek; int vyska; clovek; int main() { clovek Petr = {"Petr Novak", 25, 178; clovek Michal; Michal.vek = 16; Michal.vyska = 193; strcpy(michal.jmeno, "Michal Novak"); printf("petr ma %d let\n", Petr.vek); printf("michal se jmenuje %s", Michal.jmeno); >>Petr ma 25 let >>Michal se jmenuje Michal Novak

Struktury #include <string.h> #include "types.h" int main() { if (LIMIT > 9){ clovek Petr = {"Petr Novak", 25, 178; clovek Michal; Michal.vek = 16; Michal.vyska = 193; #ifndef TYPES_H_INCLUDED #define TYPES_H_INCLUDED #define LIMIT 10 typedef struct{ char jmeno[25]; int vek; int vyska; clovek; #endif // TYPES_H_INCLUDED strcpy(michal.jmeno,"michal Novak"); printf("petr ma %d let\n", Petr.vek); printf("michal se jmenuje %s", Michal.jmeno);

Zadání domácí úlohy Vytvořte textovou kalkulačku Textový vstup z terminálu v MCU zpracujete a vrátíte požadovaný výsledek uvažujte operátory +; -; *; /; pracujte s celými čísli (int) 0..99 Ukázka: >>10+25 >>výsledek: 35 >>10/5 >>výsledek: 2

Hardware