Nagyteljesítményű mikrovezérlők 10b. RTOS gyakorlatok

Hasonló dokumentumok
Dr. Schuster György október 3.

Dr. Schuster György október 14.

ARM Cortex magú mikrovezérlők 10. RTOS alapok

Silabs STK3700, Simplicity Studio laborgyakorlat

ARM Cortex magú mikrovezérlők. mbed

ARM Cortex magú mikrovezérlők

Nagyteljesítményű mikrovezérlők 10. RTOS alapok

ARM (Advanced RISC Machine)

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Mutatók és mutató-aritmetika C-ben március 19.

Nagyteljesítményű mikrovezérlők

ARM Cortex magú mikrovezérlők

Programozás 5. Dr. Iványi Péter

Budapesti Műszaki- és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar MIT. Nagyteljesítményű mikrovezérlők tantárgy [vimim342]

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

ARM Cortex magú mikrovezérlők

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Programozás C és C++ -ban

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

Operációs rendszerek. Az NT folyamatok kezelése

ÉRZÉKELŐK ÉS BEAVATKOZÓK I. GY1.1 SENSACT0 PÉLDAPROGRAM

Labor 2 Mikrovezérlők

The modular mitmót system. DPY kijelző kártya C API

Programozás C++ -ban

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

ARM Cortex magú mikrovezérlők

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Pénzügyi algoritmusok

C programozási nyelv Pointerek, tömbök, pointer aritmetika

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Programozás 6. Dr. Iványi Péter

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Operációs rendszerek. Folyamatok kezelése a UNIX-ban

Konkurens TCP Szerver

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Operációs rendszerek. Az NT memóriakezelése

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

MSP430 programozás Energia környezetben. LED kijelzok második rész

Architektúra, megszakítási rendszerek

Clang Static Analyzer belülről

ARM Cortex magú mikrovezérlők

Beágyazott rendszerek fejlesztése laboratórium DSP fejlesztési technológiák

COMET webalkalmazás fejlesztés. Tóth Ádám Jasmin Media Group

TI TMDSEVM6472 rövid bemutatása

ARM Cortex magú mikrovezérlők

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

Programozás II. 4. Dr. Iványi Péter

Készítette: Oláh István mestertanár

OpenCL - The open standard for parallel programming of heterogeneous systems

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

10. gyakorlat. Pointerek Tárolási osztályok

Felhők teljesítményelemzése felhő alapokon

A netfilter csomagszűrő tűzfal

8. gyakorlat Pointerek, dinamikus memóriakezelés

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Vegyes témakörök. 11. Robotvezérlés WiFi kapcsolaton keresztül 2. rész. Hobbielektronika csoport 2018/2019. Debreceni Megtestesülés Plébánia

C string műveletek (string.h alkalmazása)

Programozás C++ -ban

7. fejezet: Mutatók és tömbök

Programozás II. 2. Dr. Iványi Péter

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Mintavételes szabályozás mikrovezérlő segítségével

Adatbázis és alkalmazás konszolidáció Oracle SPARC T4/5 alapon

Bevezetés a programozásba Előadás: Fordítási egység

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Az AVR programozás alapjai. Előadja: Both Tamás

Nagyteljesítményű mikrovezérlők

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Programozás C++ -ban 2007/7

Operációs rendszerek Folyamatok 1.1

Weblog elemzés Hadoopon 1/39

Magas szintű optimalizálás

RPC Remote Procedure Call Távoli eljárás hívás

Virtualizált környezetek teljesítménymérése és elemzése

Feladatok (task) kezelése multiprogramozott operációs rendszerekben

Előadás készítés. Szentesi Péter 2010

Bevezetés a számítástechnikába

Mechatronika és mikroszámítógépek. 2018/2019 I. félév. Külső megszakítások

6.2. TMS320C64x és TMS320C67xx DSP használata

Operációs rendszerek III.

OOP és UML Áttekintés

MSP430 programozás Energia környezetben. LED mátrix vezérlése MAX7219 IC-vel

The modular mitmót system. Mitmót fakultatív labor I.

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Rendszermodellezés: házi feladat bemutatás

IP alapú komunikáció. 2. Előadás - Switchek 2 Kovács Ákos

PromoCoder_7031/Lx3 rendszer használati utsítás v1.1

Autóipari beágyazott rendszerek CAN hardver

Programozas 1. Strukturak, mutatok

Készítette: Ruzsinszki Gábor webmaster442

loop() Referencia:

Számítógépek felépítése

Átírás:

Nagyteljesítményű mikrovezérlők 10b. RTOS gyakorlatok Scherer Balázs Budapest University of Technology and Economics Department of Measurement and Information Systems BME-MIT 2015

FreeRTOS BME-MIT 2015 2.

FreeRTOS forráskód elrendezés Nagyon egyszerű alap kernel o tasks.c, queue.c, list.c. File-ok az Source könyvtárban o Ezek a file-ok tartalmazzák az alap taszk létrehozást és szinkronizációt. BME-MIT 2015 3.

FreeRTOS portolás A port specifikus kód részek a portable directoryban Task váltás, Sys tick timer, Critical szekcióba lépés és elhagyás Toolchain szerint rendezve BME-MIT 2015 4.

GCC specifikus részek GCC specifikus részek Egy port file BME-MIT 2015 5.

GCC demó projectek Kártya és fordító specifikus részek Startup kód Kártya specifikus kód BME-MIT 2015 6.

A FreeRTOS könyvtárszerkezete áttekintés BME-MIT 2015 7.

FreeRTOS_Config.h FreeRTOS konfiguráció BME-MIT 2015 8.

2. program FreeRTOS beillesztése BME-MIT 2015 9.

FreeRTOS konfiguráció Kiindulási alap az 1. program BME-MIT 2015 10.

Hozzáadandó BME-MIT 2015 11.

Hozzáadandó BME-MIT 2015 12.

Hozzáadandó BME-MIT 2015 13.

Hozzáadandó BME-MIT 2015 14.

3 interupt vektor Interupt vektorok o Systick : oprendszer heartbeat timer o SVC: elindulásnál az első szál indítása o PendSVC: taszk váltás A portban meg vannak az implementációk o xportsystickhandler() o xportpendsvhandler() o vportsvchandler() CMSIS startup részében kell módosítani BME-MIT 2015 15.

Startup kód változtatás Hivatkozni a külső file-ban elérhető függvényekre o extern void xportsystickhandler(void); o extern void xportpendsvhandler(void); o extern void vportsvchandler(void); A megfelelő vektorokat feülírni BME-MIT 2015 16.

Szálak lehetséges állapotai BME-MIT 2015 17.

Szálak létrehozása, szálkezlés xtaskcreate() o Függvény pointer a task-ra o Task neve (a FreeRTOS nem használja) o Stack mérete szavakban o Task paraméterek o Priorítás o Task handle ami a létrejött taszkra mutat BME-MIT 2015 18.

. példa két párhuzamos szál TaskA, TaskB o Fix periódus Toljuk el a TaskA kezdését picit Melyiknek nagyobb a priorítása? o Próbáljuk ki a configuse_preemption konfiguráció opciót BME-MIT 2015 19.

Priorítás kezelés ütemező Több soros preemtív ütemező BME-MIT 2015 20.

2. példa két delay közötti különbség Használjuk a vtaskdelayuntil-t BME-MIT 2015 21.

3. Közös előforrás probléma megoldása Gyorsítsuk fel a szálakat 100ms-re RTOS Kernel Control-ból a taskenter_critical taskexit_critical Használata Mi a gond? o Hozzunk létre egy gyors nagy priorítású szálat 5 ms-est 2ms-el eltolva o Nyújtsuk meg a printf-et BME-MIT 2015 22.

4. Mutex használata Hozzunk létre egy mutex-et és vizsgáljuk meg a hatását BME-MIT 2015 23.

5. Mutex használata Legyen külön kiírató függvény (handler) BME-MIT 2015 24.

6. Queue használata Egy fogyasztó egy termelő megoldás o Termelés o Fogyasztás BME-MIT 2015 25.

7. Két termelő egy fogyasztó Két fogyasztó egy termelő megoldás o Tipikus megoldása a kijelző és más kommunikációs eszközök kezelésének BME-MIT 2015 26.

8. Szoftveres timer Oprendszer timer megoldások Callback függvény hívás Nem kötődnek közvetlenül a hardware-hez o Tetszőleges számú lehet o Valójában egy rendszer szál szolgálja ki a kéréseket o A heartbeat timerhez erősen kötődik Sok opció o Periódikus nem periódikus OS konfigurálás o #define configuse_timers 1 o #define configtimer_task_priority configmax_priorities - 1 o #define configtimer_queue_length 5 o #define configtimer_task_stack_depth 256 BME-MIT 2015 27.

FreeRTOS működés vizsgálat memória kezelés BME-MIT 2015 28.

Hogyan áll össze a memória Linker script ROM rész OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") /* Internal Memory Map*/ MEMORY { rom (rx) : ORIGIN = 0x08000000, LENGTH = 0x00040000 ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00010000 } _eram = 0x20000000 + 0x00010000; /* Section Definitions */ SECTIONS {.text : { KEEP(*(.isr_vector.isr_vector.*)) *(.text.text.*.gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) *(.rodata.rodata*.gnu.linkonce.r.*) } > rom BME-MIT 2015 29.

Hogyan áll össze a memória Linker script RAM rész.data : AT (_etext) { _sdata =.; *(.data.data.*). = ALIGN(4); _edata =. ; } > ram Inicializált adat.data /*.bss section which is used for uninitialized data */.bss(noload) : { _sbss =.; *(.bss.bss.*) *(COMMON). = ALIGN(4); _ebss =.; } > ram /* stack section */.co_stack (NOLOAD): {. = ALIGN(8); *(.co_stack.co_stack.*) } > ram Inicializálatlan adat.bss Main program stackje.co_stack #define STACK_SIZE 0x00000100 attribute ((section(".co_stack"))) unsigned long pulstack[stack_size]; BME-MIT 2015 30.

Syscalls.c Normál malloc használata o A RAM terület végére caddr_t _sbrk ( int incr ) { static unsigned char*heap = NULL; unsigned char*prev_heap; if(heap == NULL) { heap = (unsigned char *)&_end; } prev_heap = heap; heap += incr; return(caddr_t) prev_heap; } BME-MIT 2015 31.

FreeRTOS memória használata Memmang stílus kiválasztása, illetve o heap_1: csak foglalás nincs felszabadítás o heap_2: foglalás és felszabadítás o heap_3: gyakorlatilag malloc, free thread safe-en FreeRTOS_config.h o #defineconfigtotal_heap_size( ( size_t ) ( 30 * 1024 ) ) Kezelő függvények o pvportmalloc() o vportfree() BME-MIT 2015 32.

1. példa Queue használata memória foglalással Egy fogyasztó egy termelő megoldás o Termelés o Fogyasztás BME-MIT 2015 33.

2. példa Stack méret monitorozás Mit éri meg monitorozni és mit? Stack water mark felkonfigurálása FreeRTOS_config beállítások o #define INCLUDE_uxTaskGetStackHighWaterMark0 o uxtaskgetstackhighwatermark(null); Miért nem számít, hogy hova rakjuk? BME-MIT 2015 34.

3. példa Stack eater megírása Mikor látszik a hatása? Mi a hatása BME-MIT 2015 35.

4. példa Stack overflow jelzés Hogy működik? FreeRTOS_config beállítások o#define configcheck_for_stack_overflow 2 Implementálandó ovapplicationstackoverflowhook függvény létrehozása BME-MIT 2015 36.

FreeRTOS időzítési vizsgálatok BME-MIT 2015 37.

5. Run Time Stats Beépített műszerezés o Szükséges hozzá egy viszonylag nagy felbontású Timer Hardware-es megvalósítás kell Kész megvalósítás o timertest.c FreeRTOS konfiguráció #define configgenerate_run_time_stats 1 Megvalósítás extern unsigned long ulruntimestatsclock; #define portconfigure_timer_for_run_time_stats() ulruntimestatsclock = 0 #define portget_run_time_counter_value() ulruntimestatsclock BME-MIT 2015 38.

Trace hookok Gyakorlatilag minden fontosabb belső lépéshez tartozik BME-MIT 2015 39.

6. Feladat Az aktuális task kirajzolása egy scope segítségével DAC használat: PA4-es láb o dac.c, dac.h FreeRTOS config o #define configuse_application_task_tag 1 o extern void my_dac_set_voltage(unsigned char dac); o #define tracetask_switched_in() my_dac_set_voltage((( int ) pxcurrenttcb->pxtasktag)*100 ) BME-MIT 2015 40.