Hlavní navigace

Naprogramujte si satelit

3. 5. 2012 21:11 zboj

Nedávno jsem se dostal k vývoji softwaru pro satelitní přijímače. Protože mi používané řešení přijde poměrně zajímavé a ne zrovna všeobecně známé, rozhodl jsem se napsat o něm pár poznatků.

K experimentům jsem použil Clarktech ET9000. Ten má procesor MIPS (na 400 MHz), 128MB úložiště na desce (flash) a 512MB operační paměti (a ještě 8 MB pro bootloader). Operačním systémem je upravený Linux a nad ním Enigma.

Samotný systém (aspoň ten, co tam byl původně) není příliš stabilní. Po několika počátečních experimentech se přijímač zaseknul a po restartu už nenabootoval. Po rutinním flashnutí nového bootloaderu (přes USB) taky nenabootoval, tak nezbylo než flashnout celý nový image. Takto jsem poněkud nedobrovolně updatoval na nejnovější verzi Enigmy a mohl začít s vývojem.

Enigma je napsaná v C++ a původně se v něm psaly i pluginy. Jenže kompilovat pro MIPS je neskutečný vopruz, a tak se vývojáři rozhodli (ve verzi Enigma2) poskytnout pro pluginy jen nativní rozhraní a psát jen v nějakém (interpretovaném) jazyce na vyšší úrovni. Volba padla na Python.

O Pythonu jsem do té doby nevěděl téměř nic. Naštěstí je snadný na naučení a navíc dost dobře navržený. Jedná se o dynamický jazyk výrazně inspirovaný Smalltalkem, ovšem s několika vychytávkami navíc. Předně má něco na způsob doesNotUnderstand, takže v něm snadno napíšete proxy. Má generátory (yield), iterátory a „správu kontextů“ (tím je myšleno něco na způsob using a IDisposable v C# pro korektní správu nepaměťových zdrojů). Python, ač primárně objektově orientovaný, podporuje také funkcionální styl programování. A v neposlední řadě moderní překladače podporují JIT.

Zajímavě je řešena správa paměti. Používá se čítač referencí a navíc klasický mark-and-sweep GC pro cykly referencí. Pokud jste dobří a referenčním cyklům se umíte vyhnout, můžete GC vypnout. Toto chování bylo důležité pro volbu Pythonu jako jazyka pro pluginy v Enigmě, protože tehdy byla operační paměť v běžných přístrojích opravdu malá a latence byla znát.

Celé řešení tak trochu připomíná Windows Phone 7 posazený na prastarém Windows Mobile. Aplikace sice píšete ve verzi Silverlightu, ale ten jen obaluje staré dobré (nebo špatné?) COM objekty. V Enigmě máte jádro v C++ a nad ním Python. Vzhledem k tomu, že typický plugin tak nanejvýš zobrazí seznam programů, umožní vám přidat časovač pro nahrávání, případně zobrazí obraz v obraze, není nic výkonnějšího potřeba. Navíc pro Python existuje množství knihoven, takže nic vám nebrání v pár řádcích načíst data, např. předpověď počasí, z nějaké webové služby a zobrazit je na obrazovce přes právě běžící program.

Sdílet