Časný termín | 22.04.2019 23:59 PDT |
---|---|
Termín odevzdání | 29.04.2019 23:59 PDT |
Finální termín | 3.05.2019 23:59 PDT |
Povinné zadání | 2b |
Volitelné zadání | není |
Bonusové zadání | není |
Počet uploadů | bez omezení |
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í.
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.
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í:
%3s
je on nebo off podle stavu LED,
%c
je poslední vyslaný znak (' ' po startu'), další
%c
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 Nucleo desky 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'.
Nucleo program:
mbed.org
lze opět využít objekt Ticker pro peridické volání callback funkce předané objektu metodou attach
. V tomto případě je však nutné ještě reportovat blikání nadřazenému počítači zasíláním znaků 'x' a 'o'. Z důvodu doporučovaného rychlého kódu v callback funkci lze zasílání realizovat v hlavní smyčce, do které je nutné vhodným způsobem reportovat změnu stavu LED.
Jednobytový komunikační protokol:
main()
funkce stdin
, např. neblokovaným přístup s pollingem podobně jako čtení ze sériového portu.
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 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í.
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 |