NXC4EV3

Rádi bychom vám představili software, který je od školního roku 2016/2017 vytvářen ve spolupráci s naší katedrou. Jedná se o nástroj pro spouštění programů napsaných v programovacím jazyce NXC na Lego Mindstorms EV3. Cílem projektu je použití shodných zdrojových kódů pro NXT a EV3.

Úvod

Některé funkcionality zatím chybí, autoři ale pracují na vývoji. Je tedy pravděpodobné, že se místy objeví chyby. Pokud byste tedy měli nějakou připomínku, můžete ji poslat na kontaktní adresu. Po odladění softwaru uvolníme celé zdrojové kódy pod otevřenou licencí.

Návod

Program bude velmi pravděpodobně fungovat také na jiných konfiguracích.

  • Operační systém: Windows XP Service Pack 3 nebo vyšší; Linux Ubuntu 16.04 nebo vyšší
  • Procesor: Windows verze - Intel Pentium Pro a novější, Linux verze - jakýkoli x86-64 procesor.
  • .NET Framework: ekvivalent verze 2.0

Instalace

  1. Stáhněte si v sekci Ke stažení archiv se spustitelnou verzí.
  2. Stažený soubor rozbalte na vhodné místo v počítači. Ve složce vybalené z archivu naleznete soubor nxc4ev3-gui.exe. Jedná se o okénkové rozhraní. Můžete jej spouštět přímo a nebo si na něj můžete vytvořit odkaz.

Použití

  1. Otevřete program NXC4EV3 GUI. Vyberte zdrojový soubor v jazyce NXC pomocí tlačítka vedle pole pro „NXC file“. „Resource dir“ se doplní automaticky. Pro editaci zdrojových kódů třeba používat např. původní Bricx Control Center, NXC4EV3 se stará pouze o kompatibilitu s EV3.
  2. Pro sestavení klepněte na „Compile“. Pokud překlad proběhl bez problémů, můžete pokračovat dále.
  3. Pro nahrátí na EV3 kostku klepněte na „Upload“. Kostka musí být k počítači připojena přes USB. Pokud nahrátí bylo úspěšné, program naleznete na kostce v adresáři, který se jmenuje dle vstupního NXC souboru.

Poznámka: při sestavení se vytváří dočasné soubory, které po nahrátí nejsou potřeba. Jedná se o koncovky .c, .dl, .elf a .rbf.

Technické detaily

Software pracuje na principu překladu z jazyka NXC do jazyka C a následné kompilaci do nativního kódu. Program starající se o překlad jsme nazvali NXC2CC a je napsán v C++11/C++14. Překlad probíhá v několika etapách. V první etapě je vstupní NXC soubor lexikálně analyzován pomocí upraveného slexu. Hned poté zpracován knihovnou Boost::Wave, která funguje jako preprocesor. Většina obslužného kódu je založena na příkladu cpp_tokens z téže knihovny. Druhá etapa je syntaktická a sémantická analýza. Pro tento účel je použit vlastní rekurzivně-sestupný parser napsaný podle přizpůsobené syntaxe C89. Jak parser prochází tokeny z předchozí etapy a sestavuje parsovací strom, průběžně vzniká také tabulky symbolů. Na tu je pak často ukazováno z parsovacího stromu. Třetí etapa provádí opak předchozích dvou, z parsovacího stromu přímo zapisuje odpovídající zdrojový kód v jazyce C. Tím končí práce programu NXC2CC. Výstupný soubor se nedá použít osamoceně, je k němu potřeba podpůrná knihovna NXClib (ta je součástí projektu).

NXClib sestává ze tří částí: z maker zjednodušující výstup z NXC2CC, z API hlaviček pro NXC2CC a z implementace API pro C kompilátor. Implementace API využívá už existujícího projektu C4EV3.

Ze stejného projektu je odvozeno i pokračování procesu. Pro kompilaci do nativního kódu je využito GCC z Sourcery G++ Lite 2009q1-203 (Win32, Linux, zdrojové kódy). Autor se domnívá, že stejný kompilátor byl použit i pro firmware EV3. Z kompilátoru se získává spustitelný soubor pro Linux na kostce.

Závěrečnou etapou je nahrátí na kostku. Využit je program ev3duder, také z C4EV3. Nejprve je jím třeba vytvořit soubor RBF, který je spustitelný v EV3 VM a na koste se zobrazí jako program. Pak jím zbývá nahrát oba soubory na EV3 kostku.

NXC4EV3 GUI je grafická nadstavba, která popsaný proces automatizuje a skrývá od běžného uživatele.

Kontakt

Jakub Vaněk
E-mail: lego-swatvankovi.net (lego-sw[at]vankovi[dot]net)