Warning
This page is located in archive. Go to the latest version of this course pages.

HW 8 - Interaktivní aplikace s meziprocesovou komunikací

Časný termín 24.04.2021 23:59 PDT
Termín odevzdání 01.05.2021 23:59 PDT
Povinné zadání 5b kontrola Coding stylu
Volitelné zadání není
Bonusové zadání není
Počet uploadů bez omezení
Podpora bab36prga-hw08.zip

Cílem úlohy je získat zkušenost s využitím pojmenované roury pro komunikaci aplikace v počítači s poskytnutým Modulem a práci s více vlákny pro zpracování více zdrojů událostí.

Program vychází ze cvičeních 7, 8, 9 s pojmenovanou rourou a více-vláknové aplikace. Výsledné programy představují dílčí kroky pro snažší implementaci následně HW9.

Povinné zadání

Realizujte program, kterým bude řízeno blikání LED v Modulu.
Program musí obsahovat následující funcionality:

  • Čte klávesy (bez nutnosti stisku klávesy enter) a reaguje na stisk kláves se znaky 's', 'e', 'h', 'b', a '1'-'5', které přeposílá Modulu.
  • Při stisku klávesy 'q' ukončuje program svou činnost (koretně zastaví všechna vlákna).
  • Průběžně zobrazuje stav LED, poslední odeslaný a přijatý příkaz, peridou blikání a počet přijatých informací o počtu rozsvěcení LED ve tvaru: \rLED %3s send: '%c' received: '%c', T = %4d ms, ticker = %4d, kde jednotlivé řidící znaky formátování znamenají:
    • %3s je on nebo off podle stavu LED,
    • %c je poslední vyslaný znak (' ' po startu'),
    • další %c je posledně přijatý znak ('?' v případě nové zprávy zatím bez odpovědi),
    • %4d je perioda rozsvěcení/zhasínání LED (uvažujeme doba kdy LED svítí a kdy je zhasnutá je identická, tj. PWM se střídou 1:1) odhadnutá na základě přijatých zpráv od Modulu za časový interval 5 sekund (výpis hodnoty periody je zarovnaný na 4 pozice),
    • poslední %4d je počet přijatý znaků 'x' indikující změnu stavu LED při blikání.

Pro výpis využijte přepisování řádku znakem '\r'. Po odeslaní znaku 's' a 'e' je stav LED (on nebo off) nastaven až po přijeti potvrzovacího znaku 'a'.

Důležitou částí je organizace kódu a dedikování jednotlivých vláken pro 1) čtení z klávesnice; 2) překreslování řádku, 3) čtení z roury; 4) měření periody blikání LED jednou za 5 sekund; případně další hlavní vlákno v boss/worker modelu.
Implementačně (na počet řádků) náročnější variantou je realizovat v program frontu zpráv a řešit logiku programu v rámci hlavního vlákna, které přijímá zprávy od ostatních vláken a realizuje příslušné výstupy (tj. pojmenovaná roura a textový výstup na stdout. Benefitem takto organizovaného programu je snadné rozšíření. Jednodušší variantou je dedikovat zápis do roury vláknu pro čtení vstupu z klávesnice a notifikace překreslování z jednolivých vláken na základě přijaté události (tak jako v programu na cvičení 9).
Komunikace mezi aplikací a Modulem
  • 'i' - init - může vyslat Modul po startu, žádná reakce není očekávána
  • 's' - start - vysílá PC, Modul reaguje rozsvícením LED a odpovědí 'a'
  • '1' - set 1 - vysílá PC, Modul reaguje nastavením periody blikání LED na 50 ms (tj. 50 ms LED svítí a 50 ms je zhasnuta) a odpovědí 'a'
  • '2' - set 2 - vysílá PC, Modul reaguje nastavením periody blikání LED na 100 ms a odpovědí 'a'
  • '3' - set 3 - vysílá PC, Modul reaguje nastavením periody blikání LED na 200 ms a odpovědí 'a'
  • '4' - set 4 - vysílá PC, Modul reaguje nastavením periody blikání LED na 500 ms a odpovědí 'a'
  • '5' - set 5 - vysílá PC, Modul reaguje nastavením periody blikání LED na 1000 ms a odpovědí 'a'
  • 'e' - end - vysílá PC, Modul reaguje zhasnutím LED a odpovědí 'a'
  • 'h' - hello - vysílá PC, Modul reaguje zasláním 'h'
  • 'b' - bye - vysílá PC, Modul odpovídá 'b' a reaguje opuštěním main() funkce a ovládací program následně po přijetí 'b' ukončuje svou činnost. Aby bylo možné ukončit program po přijetí znaku 'b', je nutné ukončit načítání znaku ze stdin, např. neblokovaným přístup s pollingem podobně jako čtení z roury.

Dále Modul v případě, že periodicky bliká LED, vysílá znak 'x' při rozsvícení LED a znak 'o' při zhasnutí LED.

Odevzdání a hodnocení

Veřejné příklady + Makefile: bab36prga-hw08.zip

Jan Faigl 2020/05/02 22:42 Update: Přídání binárek pro OS X a arch64

Program pokud možno realizujte na cvičení, nahrajte do odevzdávacího systému. Funkčnost programu ověří učitel na cvičení nebo na dalším cvičení.

Povinné zadání
Název v BRUTE HW08
Odevzdávané soubory prga-hw08-main.c
Argumenty při spuštění žádné
Procvičované oblasti vlákna, pojmenovaná roura
courses/bab36prga/hw/hw08.txt · Last modified: 2021/02/09 15:57 by deckejin