Cílem tohoto několikadílného seriálu je seznámit čtenáře s možnostmi vývoje reálných aplikací s procesorovými moduly SQM4. V minulé části jsme si představili základní hardwarové a softwarové komponenty pro aplikaci PWM generátoru. V dnešním pokračování si popíšeme architekturu aplikace, jednotlivé softwarové moduly a grafické rozhraní.
Rozveďme úvodem hierarchii softwarových komponent (obr. 1). Jádrem celé aplikace je real-time operační systém Freescale MQX. Ten umožňuje plánování jednotlivých úloh v závislosti na jejich prioritách a poskytuje pro ně synchronizační a komunikační prostředky (semafory, eventy, zprávy). MQX navíc nabízí podporu pro TCP/IP protokol, souborové systémy v NAND paměti, USB disku či SD kartě a dostupná je i celá řada hardwarových ovladačů (např. komunikace po sběrnicích I2C, SPI či CAN). MQX je využitelný i s multicore procesory, ale o tom až v příštích dílech seriálu.
Možnosti operačního systému rozšiřujeme knihovnami ESL a eGUI. Zatímco MQX poskytuje interface pro obsluhu hardware, ESL nabízí již okamžitě využitelné konfigurovatelné moduly. Vysvětleme si to např. na obsluze datového USB zařízení. MQX poskytuje funkce pro detekci přítomnosti zařízení, pro připojení a odpojení jeho souborového systému atd. ESL tuto MQX funkcionalitu využívá a zapouzdřuje ji do softwarového modulu, který nezávisle na aplikaci detekuje přítomnost USB MSD (Mass Storage Device) zařízení a podle toho také zpřístupňuje jeho souborový systém pro aplikaci. Obdobné moduly jsou implementovány např. pro SD kartu či Wi-Fi rozhraní.
Pro návrh grafického uživatelského rozhraní využijeme knihovnu eGUI. Ta poskytuje ovladače pro řadu LCD displejů či pro obsluhu touch screenu. Zároveň nabízí ucelený framework pro návrh vlastních uživatelských obrazovek využitím celé řady dostupných widgetů. Knihovnu je možné používat s operačním systémem MQX, ale i nezávisle.
Celý program sestává ze softwarových modulů tří typů – ESL, eGUI a vlastních aplikačních. Z knihovny ESL využijeme následující:
Možnosti knihovny eGUI rozšíříme návrhem vlastních specializovaných widgetů:
Využitím standardních i nově definovaných widgetů následně navrhneme vlastní uživatelské obrazovky:
Z vlastních aplikačních modulů je potřeba implementovat následující:
Inicializace aplikace (diagram na obr. 2) je v režii úlohy appctrl, která je zároveň jedinou aplikační úlohou spouštěnou operačním systémem MQX automaticky. Ostatní úlohy jsou vytvářeny a inicializovány v následujícím pořadí:
Každá z výše uvedených úloh po své inicializaci zasílá signál zpět úloze appctrl a přechází do blokovaného stavu. Teprve v okamžiku, kdy jsou všechny úlohy inicializovány, provede appctrl jejich odblokování a tím celá aplikace přejde do režimu standardního běhu.
Poté, co je celý program inicializován, přecházejí úlohy appctrl a startup do blokovaného stavu. Kontroly se ujímá úloha lcd (obr. 3), která:
Popišme si nyní grafické uživatelské rozhraní aplikace PWM generátoru. Na obr. 4a je screenshot obrazovky pro nastavování PWM kanálů. To je realizováno pomocí sliderů, které uživatel může ovládat přes touchscreen či hardwarovou klávesnicí. Pro přesné nastavení hodnot lze případně aktivovat obrazovku klávesnice (obr. 4b), která je aktivována podržením prstu na zvoleném slideru.
Aktuální nastavení všech čtyř PWM kanálů lze ukládat do EEPROM a později znovu načítat (obr. 4c), přičemž uživatel má k dispozici 4 přepisovatelné konfigurace a 1 konfiguraci defaultní, ve které jsou všechny výstupy vypnuty. V rámci nastavení může uživatel také resetovat zařízení do továrního stavu, kalibrovat touch screen a kopírovat logy na datové USB zařízení (obr. 4d).
V příští části seriálu se budeme věnovat modulu SQM4-ZY7 s procesorem Zynq, který kombinuje výhody dvoujádrového procesoru a FPGA pole.