Česká letecká servisní a. s. 1/20 Česká letecká servisní a. s. Your integrator of the avionics Česká letecká servisní a. s.
Česká letecká servisní a. s. 2/20 Úvod do problematiky synchronizace tasků O co se jedná Při návrhu aplikací velmi často řešíme problém spuštění jedné úlohy v závislosti na stavu jiné (jiných) úloh. Obdobný problém je řešen v případě, že je jedna úloha závislá na datech, se kterými pracuje jiná úloha.
Česká letecká servisní a. s. 3/20 Typické úlohy Úlohy, kde lze využít synchronizace Význam rámce vyhodnocujeme až poté, kdy je přijat celý rámec. V případě, že rámec není v daném čase přijmut celý, provedeme předepsané operace (odezva, žádost o znovuzaslání dat, vyčištění paměti). Viz ISO/OSI model. Konverzi/úpravu dat provádíme až tehdy, jsou-li data přijata a jsou-li např. "spojitá". Do paměti zapisujeme až poté, proběhne-li test paměti.
Česká letecká servisní a. s. 4/20 Důsledky synchronizace tasků Pro Problematika je rozdělena na menší kompaktní celky. Lépe využíváme systémové prostředky. Vysoká modularita výsledného kódu. Proti Vyšší složitost systému. Vyšší nároky na návrh. Vyšší nároky na testování systému.
Česká letecká servisní a. s. 5/20 Synchronizace pomocí semaforů Úkol 1 Zopakovat funkci semaforů. 2 Navrhnout využití semaforů pro synchronizaci tasků.
Česká letecká servisní a. s. 6/20 Synchronizace pomocí semaforů Princip činnosti Task můžeme synchronizovat s jiným taskem nebo s ISR s využitím semaforů. Synchronizace nesmí vyžadovat přenos dat. Pro přehlednost výkladu uvažujme binární semafor. Semafor je inicializován na hodnotu 0. Např. task inicializuje zpracování I/O a čeká na semafor (je ve waiting listu). Když je dokončena obsluha I/O (taskem nebo ISR) je semafor uvolněn a je spuštěn task z waiting listu. Tento mechanizmus je nazýván unilateral randezvous.
Česká letecká servisní a. s. 7/20 Synchronizace pomocí semaforů Ukázka pseudokódu synchronizace pomocí semaforů INIT { semaphor_sync_init; /* semaphor is set to zero */... }... ISR { IOdriver; POST; }... TASk1 { while (1 == 1) { PEND;.../* data processing */ } }...
Česká letecká servisní a. s. 8/20 Synchronizace pomocí semaforů Nasazení synchronizace pomocí semaforů Tato metoda má velké uplatnění u úloh typu: "po ukončení ISR spust task, který zpracuje data přijatá v ISR". Synchronizace mezi dvěma tasky bez přenosu dat je méně častá (vzájemná synchronizace mezi dvěmi tasky využívající dvou semaforů se nazývá bilateral randezvous).
Česká letecká servisní a. s. 9/20 Event flags Princip činnosti Používají se v případě, kdy je nutné synchronizovat task s více událostmi. Princip je velmi podobný synchronizaci pomocí binárních semaforů. Jediný rozdíl spočívá v tom, že stav není indikován jednobitově, ale pomocí skupiny příznaků (events group). Ta může být 8, 16 nebo 32 bitová. Opět se využívají metody POST a PEND. Metoda POST nastavuje/nuluje eventy, metoda PEND zajišt uje čekání na event (a to bud ve významu ALL nebo ANY).
Česká letecká servisní a. s. 10/20 Meziprocesorová komunikace Popis problematiky Při řešení problémů souvisejících s RTOS je nutné disponovat mechanismem, který zajistí výměnu dat mezi tasky nebo mezi taskem a ISR. Výměnu informací je možné zajistit dvěma způsoby: pomocí globálních proměnných, využitím zpráv. Problematika globálních proměnných byla řešena na předchozí přednášce. Využití zpráv je "vzdáleně podobné volání funkce s parametrem".
Česká letecká servisní a. s. 11/20 Meziprocesorová komunikace Popis problematiky Pro výklad další látky je nezbytně nutné pochopit princip semaforů. Meziprocesová komunikace je založena na stejném principu!!!
Česká letecká servisní a. s. 12/20 Message Mailbox (Message Exchange) Úvod Jedná se o metodu, která umožní předat data (ukazatel na data) z jednoho tasku (ISR) do jiného tasku. Mailboxy je nutné před použitím iniciovat. Pro předání se opět používá kombinace metod PEND a POST. Předávání dat bývá doplněno o time-out. Čekající tasky jsou zpracovány ve speciální struktuře waiting listu.
Česká letecká servisní a. s. 13/20 Ukázka kódu Ukázka kódu využívající Message Mailbox OS_EVENT *mailbox1; OS_EVENT *mailbox2; OS_EVENT *mailbox3;... while (1 == 1) { mbox1_contents = (INT32U *)OSMboxPend(mailbox1, 0, &return_code); alt_ucosii_check_return_code(return_code); printf("task1 received the message: %lu in mailbox 1\n", (*mbox1_contents)++); printf("task1 incremented the message and placed it into mailbox 2\n\n"); return_code = OSMboxPost(mailbox2, (void *)mbox1_contents); /*Post to Mailbox2*/ alt_ucosii_check_return_code(return_code); }... while(1 == 1) { mbox2_contents = (INT32U *)OSMboxPend(mailbox2, 0, &return_code); alt_ucosii_check_return_code(return_code); printf("task2 received the message: %lu in mailbox 2\n", (*mbox2_contents)++); printf("task2 incremented the message and placed it into mailbox 3\n\n"); return_code = OSMboxPost(mailbox3, (void *)mbox2_contents); /*Post to Mailbox3*/ alt_ucosii_check_return_code(return_code); }
Česká letecká servisní a. s. 14/20 Message Queues Úvod Message Queues slouží k zaslání jedné nebo více zpráv. Jedná se o rozšíření Mailbox Messages o možnost přenést "pole dat (mailboxů)". Opět se využívají metody POST a PEND. Systém je zcela shodný s Message Mailbox.
Česká letecká servisní a. s. 15/20 Obsluha a zpracování sériové linky Úkol 1 Zpracujte data přicházející po sériové lince. 2 Data jsou rozdělena do čtyř osmibitových bloků, z nichž první obsahuje synchronizační znak a poslední kontrolní součet. 3 Data zpracujte pomocí jednoho ISR a dvou tasků.
Česká letecká servisní a. s. 16/20 Postřehy z realizace úlohy Realizace/Formulace/Prezentace 1 Většinou jste se pokusili vytvořit popis problému přímo v pseudokódu. Porozumění pseudokódu, ale vyžaduje jistou znalost cílové platformy a způsobu zápisu, tak aby mu bylo rozumět (pseudokódy jednotlivých řešitelů se výrazně lišily). 2 Řešení byla někde "na půl cesty". Ani program, ani obecný popis. Představovala zápis myšlenek programátora zjednodušenou formou. Zkušenost je taková, že již za týden by těmto zápisům velmi obtížně rozuměl i autor. 3 Je problém s jasným vyjádřením myšlenek a s prezentací výsledků. Prezentace je minimálně 50% úspěchu!!!
Česká letecká servisní a. s. 17/20 Obecný doporučený způsob realizace pro RTOS Formulace problému 1 Nejprve je nutné problém uchopit a pochopit. Nebojte se vyjádřit zadání vlastními slovy, požádat o upřesnění nebo doplnění. 2 Následně slovně popište, jak bude pracovat Váš program. 3 Tužka a papír jsou velice silné nástroje!!! Zde je pro ně to pravé místo. Např. Příchod dat bude zpracován v ISR. ISR bude komunikovat s TASK1 a to tak, že mu zašle získaná data. K tomu využije mailbox. TASK1 bude sbírat data zaslaná z ISR, hledat synchronizační znak a kontrolovat kontrolní součet. V okamžiku, kdy získá a validuje 4 znaky zašle tyto znaky TASK2 k dalšímu zpracování. K tomu využije queues.
Česká letecká servisní a. s. 18/20 Obecný doporučený způsob realizace pro RTOS Požadavky 1 Pokud je problém složitější je vhodné písemnou formou zpracovat všechny požadavky na systém. Tento krok může být včleněn bud v tomto místě nebo následuje bezprostředně po získání zadání. Tvorba požadavků přesahuje rámec přednášek a většina firem má zpracovaná přesná pravidla jejich tvorby. Je nutné vědět, že pokud jste dostali úkol bez písemných požadavků je více než vhodné, abyste si je vypracovali a projednali se zadavatelem, případně si je nechali schválit. 2 Tvorba požadavků je náročná a lze ji celkově zvládnout až po nabytí praxe.
Česká letecká servisní a. s. 19/20 Obecný doporučený způsob realizace pro RTOS Zpracování algoritmu 1 Před zpracováním algoritmu (tj. jak bude náš systém pracovat) musíme znát požadavky a musíme mít promyšleno a slovně popsáno řešení. 2 V této fázi je nutné řešení zpracovat tak, aby bylo možné vytvořit kód v požadovaném programovacím jazyce. Řešení je více, např: 1 pseudokód, 2 vývojový diagram, 3 UML. 3 Doporučuji používat UML (nejlépe Real-time UML). Pseudokód je značně nepřesný a to hlavně z toho důvodu, že není dostatečně zažitá jednotná syntaxe. Vývojové diagramy velmi špatně vystihují real-time problematiku.
Česká letecká servisní a. s. 20/20 Obecný doporučený způsob realizace pro RTOS Tvorba kódu Teprve nyní je vhodné tvořit kód. Poznámka Uvedený postup představuje jakousi "minimální sadu" kroků, které je vhodné absolvovat při každém řešení problémů z oblasti real-time. Konkrétní postup je většinou dán zvyklostmi firmy, jejím systémem jakosti a způsobem řízení projektů. Vždy platí: "Dvakrát měř a jednou řež." Vynechání analytických kroků má dopad např. na: kvalitu systému, rychlost realizace, ladění chyb, testování, práci v týmu...