
Jednou mě napadla šílená myšlenka shromáždit . Strávil jsem tím hodně času a podařilo se mi to. Vypadalo to skvěle a bylo to k ničemu, ale líbilo se mi to. Před půl rokem mě napadla další šílená myšlenka. Tentokrát nebyla zdaleka tak okázalá, ale byla mnohem užitečnější. Opět jsem na to strávil hodně času. A v tomto článku představím beta verzi své druhé šílené myšlenky.
Projekt jsem nazval Nanonyam a dokonce jsem mu vymyslel logo (kreslil jsem celých 5 minut).

Pro ty, kteří myslí v termínech Arduino, lze říci, že Nanonyam je virtuální Arduino shield pro ovládání Windows.
Jinými slovy, Nanonyam je virtuální stroj, ve kterém se jako bajtkód používá firmware pro mikrořadič AVR (doporučuje se ATMEGA2560). Uvnitř tohoto virtuálního stroje je simulátor jádra AVR, ale místo periferních zařízení, která se nacházejí v adresním rozsahu SRAM od 0x0060 do 0x01FF, je zde speciální rozhraní pro virtuální funkce (včetně funkcí Windows API). A tady je velmi důležité hned na začátku pochopit: kód pro Nanonyam by neměl mít žádné odkazy na uvedený rozsah paměti, aby náhodou nezavolal třeba funkci pro smazání souborů nebo formátování disku. Zbytek rozsahu paměti SRAM od 0x0200 do 0xFFFF (to je více, než má skutečný mikrořadič) je uživateli k dispozici pro jakékoli účely. Hned upozorňuji, že existuje speciální ochrana proti náhodnému spuštění firmwaru skutečného mikrořadiče (nebo firmwaru z jiné architektury): než aktivujete „nebezpečné“ funkce, je třeba zavolat speciální chytrou virtuální funkci. Existují také další prvky ochrany.
Pro vytváření programů pro Nanonyam je třeba používat speciální knihovny, ve kterých jsou realizovány všechny dostupné virtuální funkce. Stáhněte si virtuální stroj Nanonyam a knihovny k němu . A nyní . A ano, moje stránka je velmi primitivní a není přizpůsobena pro mobilní zařízení.
Program Nanonyam je bezplatný pro domácí a komerční použití. Program Nanonyam se poskytuje na základě „jak je“. Zdrojový kód není poskytován.
Program je momentálně v testovací fázi. Bylo implementováno asi 200 virtuálních funkcí, které umožňují vytvářet jednoduché programy pro Windows.
Je zřejmé, že v takové virtuální mašině není možné vytvářet něco složitého, protože paměť pro kód činí pouze 256 kB. Data lze ukládat do samostatných souborů, buffer pro grafickou část je realizován externě. Všechny funkce jsou zjednodušené a přizpůsobené pro 8-bitovou architekturu.
Co všechno lze v Nanonyam udělat? Přišel jsem na několik úkolů.
Cvičení programových bloků
Jednou jsem potřeboval vyvinout složité menu pro grafický displej o rozměrech 128×64 bodů. Opravu jsem nechtěl neustále nahrávat firmware do skutečného mikrořadiče, abych viděl, jak vypadají pixely. Tak se zrodil nápad Nanonyam. Na obrázku níže je zobrazení z reálného OLED displeje jednoho z bodů toho menu. Nyní mohu pracovat na jeho vývoji bez skutečného zařízení.

Nanonyam (ve své konečné podobě) je dobrý nástroj pro procvičování programových bloků pro mikrořadiče, protože obsahuje funkce pro práci s grafikou (lze simulovat displeje a indikátory), se soubory (lze vytvářet logy, načítat testovací data), s klávesnicí (lze současně číst až 10 tlačítek) a s COM porty (toto je samostatná sekce).
Vytváření rychlých programů
Například potřebujete rychle zpracovat 100500 textových souborů. Každý je třeba otevřít, trochu změnit podle nějakého jednoduššího algoritmu, uložit a zavřít. Pokud jste mistr Pythonu, gratuluji, máte všechno, co potřebujete. Ale pokud jste zapálený Arduino programátor (a takových je dost), Nanonyam vám pomůže vyřešit tento úkol. To je druhý cíl Nanonyam: přidat spoustu užitečných funkcí, jako je zpracování textu, vytváření snímků obrazovky nebo simulace stisknutí kláves v systému (to vše je mimochodem již k dispozici), a také mnoho dalších funkcí pro řešení rutinních úloh.
Testování zařízení přes COM port
Nanonyam může fungovat jako terminál, který pracuje podle vašeho algoritmu. Můžete vytvořit malé menu pro ovládání zařízení a zobrazovat data získaná z portu. Je možné ukládat a číst data z souborů pro analýzu. Je to užitečný nástroj pro jednoduché ladění a kalibraci zařízení, stejně jako pro vytváření jednoduchých virtuálních ovládacích panelů. Pro studenty a mladé vědce může být tento projekt velmi užitečný.
Výuka programování
Nicméně, jako ve všech projektech Arduino, hlavní užitečnost Nanonyam spočívá v jednoduchosti funkcí, rozhraní a nahrávače. Proto by tento projekt měl být zajímavý pro začínající programátory a ty, kteří se spokojí s úrovní Arduina. Mimochodem, sám jsem dosud detailně nezkoumal Arduina, protože jsem vždy používal WinAVR nebo AVR Studio, a začínal jsem s assemblerem. Proto bude příklad programu níže trochu nesprávný, ale zcela funkční.
Ahoj, Habr!
Nastal čas se seznámit s některými funkcemi Nanonyam a napsat jednoduchý program. Budeme psát v Arduinu, ale ne tak, jak je obvyklé, ale tak, jak to teď umím (už jsem říkal, že jsem zatím ještě úplně nepochopil toto prostředí). Nejdříve vytvoříme nový sketč a vybereme desku Mega2560.

Uložíme sketč do souboru a vedle zkopírujeme . Bylo by správné zahrnout hlavičky knihoven, ale nevím, jak v Arduinu nastavovat kompilaci jednotlivých souborů, takže prozatím zahrneme knihovny přímo (a všechny najednou):
#include <stdio.h>
#include "NanonyamnN_System_lib.c"
#include "NanonyamnN_Keyboard_lib.c"
#include "NanonyamnN_File_lib.c"
#include "NanonyamnN_Math_lib.c"
#include "NanonyamnN_Text_lib.c"
#include "NanonyamnN_Graphics_lib.c"
#include "NanonyamnN_RS232_lib.c"Ještě správnější by bylo vytvořit speciální modul “Nanonyam pro Arduino”, který by se dal nainstalovat přímo z Arduina. Jakmile se s tím vyznám, udělám to, a zatím ukazuji podstatu práce s virtuálním strojem. Napíšeme takový kód:
//Сразу после запуска рисуем текст в окне
void setup() {
sys_Nanonyam();//Подтверждаем код виртуальной машины
g_SetScreenSize(400,200);//Задаём размер дисплея 400х200 точек
sys_WindowSetText("Example");//Заголовок окна
g_ConfigExternalFont(0,60,1,0,0,0,"Arial");//Задаём шрифт Windows в ячейке шрифтов 0
g_SetExternalFont(0);//Выбираем ячейку шрифтов 0 для рисования текста
g_SetBackRGB(0,0,255);//Цвет фона синий
g_SetTextRGB(255,255,0);//Цвет текста жёлтый
g_ClearAll();//Очищаем экран (заливка цветом фона)
g_DrawTextCenterX(0,400,70,"Hello, Habr!");//Рисуем надпись
g_Update();//Выводим графический буфер на экран
}
//Просто ждём закрытия программы
void loop() {
sys_Delay(100);//Задержка и разгрузка процессора
}Sketč s tímto programem . Podrobné popisy funkcí . Doufám, že v tomto kódu je dost poznámek na pochopení podstaty. Tady funkce sys_Nanonyam() hrají roli „hesla“ pro virtuální stroj, které odstraňuje omezení virtuálních funkcí. Bez této funkce se program uzavře po 3 sekundách provozu.
Stiskneme tlačítko „Ověřit“ a žádné chyby by neměly být.

Nyní je potřeba získat binární soubor (firmware). Vyberte nabídku „Sketč>>Exportovat binární soubor (CTRL+ALT+S)«.

Přitom budou do složky se sketchem zkopírovány dva HEX-soubory. Bereme pouze soubor bez předpony „with_bootloader.mega“.
Existuje několik způsobů, jak specifikovat HEX soubor virtuálnímu stroji Nanonyam, všechny jsou popsány . Navrhuji vytvořit vedle souboru Nanonyam.exe soubor Nanonyam.path, ve kterém uvedeme úplnou cestu k našemu HEX souboru. Poté můžeme spustit Nanonyam.exe. Obdržíme okno s naším nápisem.

Podobně lze vytvářet programy v jiných prostředích, například v AVR Studio nebo WinAVR.
Na tom zatím skončíme seznámení s Nanonyam. Hlavní myšlenka by měla být jasná. . Pokud bude dostatek zájemců o využívání tohoto projektu, vytvořím více příkladů a budu pokračovat v „naplňování“ knihoven virtuálních funkcí. Přijímáme konkrétní nápady na rozvoj projektu a zprávy o chybách, bugu a přehlédnutí. Je žádoucí je směřovat na kontakty . A diskuse je vítána v komentářích.
Všem děkuji za pozornost a příjemné programování!
Zdroj: habr.com
