Table of Contents

HW 09 (Nucleo) - Jednobajtová komunikace

Termín odevzdání 28.04.04.05.2018 23:59 PDT
Povinné zadání 2b
Volitelné zadání není
Bonusové zadání není
Počet uploadů 5

Cílem úlohy je získat zkušenost s využitím sériového portu pro komunikaci aplikace v počítači s programem na desce Nucleo a práci s více vlákny pro zpracování více zdrojů událostí.

Program vychází z předchozích programů pro seriovou komunikaci s Nucleo a více-vláknové aplikace. Výsledné programy představují dílčí kroky pro snažší implementaci HW 10 a následně semestrální práci.

Binární obraz funkční aplikace pro Nucleo pro testování a funkce pro čtení ze sériového portu s timeoutem (prg_serial_nonblock) prg-hw09.zip

Pro korektní ukončení programu (po stisku klávesy 'q') je nutné ukončit načítání znaku ze seriového portu, proto realizujte načítání v tzv. non-bloking režimu s využitím poll funkce, implementace můžete založit na modulu prg_serial_nonblocking, např. viz serial_nonblock.

Povinné zadaní

Realizujte programy pro desku Nucleo STM32F446RE a program pro ovládací počítač, kterým bude řízeno blikání LED na desce Nucleo seriovou komunikací (115200 bps, 8 bitů, bez parity). Úloha se tak skládá ze dvou částí: 1) programu pro Nucleo a 2) programu pro ovládací počítač.

Ovládací program:

“\rLED %3s send: '%c' received: '%c', T = %4d ms, ticker = %4d”

kde jednotlivé řidící znaky formátování znamenají:

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'.

Program lze založit na kombinaci výsledných programů cvičení 8 a cvičení 9. 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í ze seriového portu; 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. seriový port a textový výstup na stdout. Benefitem takto organizovaného programu je snadné rozšíření. Jednodušší variantou je dedikovat zápis do sériového portu 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).

Nucleo program:

Jednobytový komunikační protokol:

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

Program pro Nucleo je možné založit na výsledném programu z 8. cvičení důležitou změnou je organizace programu tak, aby k vysílání bytů docházelo pokud možno mimo obsluhu přerušení časovače a LED tak pravidelně blikala i za cenu zpožděného odesílání.

Odevzdání a hodnocení

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í.

Program můžete implementovat jak v prostředí mbed tak přímo s křížovou kompilací. V případě mbed pojmenujte soubor hw09-mbed.cpp a v případě křížové kompilace pak hw09-cross.c. V případě ovládacího programu pojmenujte hlavní soubor s main() funkcí hw09-main.c
Povinné zadání
Název v BRUTE HW09
Odevzdávané soubory hw09-main.c a hw09-mbed.cpp nebo hw09-cross.c
Argumenty při spuštění žádné
Procvičované oblasti programování pro Nucleo