
Egyszer egy bolond ötlet jutott eszembe, hogy összegyűjtök . Sok időt eltöltöttem vele, és megcsináltam. Látványos és haszontalan lett, de tetszett. Fél éve jött egy újabb bolond ötlet. Ezúttal nem volt olyan látványos, de sokkal hasznosabb. Erre is sok időt fordítottam. Ebben a cikkben bemutatom a második bolond ötletem béta verzióját.
A projektet Nanonyam-nak (Nanonjam) neveztem el, és még egy logót is kitaláltam hozzá (egészen 5 percet rajzoltam vele).

Aki az Arduino kifejezéseiben gondolkodik, elmondhatja, hogy a Nanonyam egy virtuális Arduino shield Windows kezelésére.
Más szavakkal, a Nanonyam egy virtuális gép, ahol a bájt-kódhoz AVR mikrokontroller firmware-t használunk (ajánlott az ATMEGA2560). Ezen a virtuális gépen belül egy AVR mag szimulátora található, de a perifériák, amelyek SRAM címeken 0x0060-tól 0x01FF-ig helyezkednek el, speciális interfészt tartalmaznak a virtuális funkciókhoz (többek között a Windows API funkciókhoz). Itt fontos megérteni, hogy a Nanonyam kódja nem érheti el a megadott memóriaintervallumot, hogy véletlenül ne hívjon meg például fájl törlési vagy lemezformázási funkciókat. A SRAM többi memóriaterülete 0x0200-tól 0xFFFF-ig (ez több, mint a valódi mikrokontrollerben) felhasználó számára bármilyen célra elérhető. Azonnal megjegyzem, hogy van egy különleges védelem a valódi mikrokontroller firmware (vagy más architektúrájú firmware) véletlen aktiválásáról: mielőtt „veszélyes” funkciókat aktiválunk, egy speciális ügyes virtuális funkciót kell hívni. Van néhány más védelmi elem is.
A Nanonyam programok készítéséhez speciális könyvtárakat kell használni, amelyek jelenleg elérhető virtuális funkciókat valósítanak meg. A Nanonyam virtuális gép és a hozzá tartozó könyvtárak letöltése De a . Igen, a weboldalam nagyon primitív és nem mobilbarát.
A Nanonyam program ingyenes otthoni és kereskedelmi használatra. A Nanonyam program „ahogy van” feltételekkel kerül átadásra. A forráskód nem elérhető.
Jelenleg a program tesztelési fázisban van. Körülbelül 200 virtuális funkciót valósítottunk meg, amelyek lehetővé teszik egyszerű programok létrehozását Windows-ra.
Nyilvánvaló, hogy egy ilyen virtuális gépen valami bonyolultat létrehozni nem fog sikerülni, mivel a kód számára mindössze 256 kB memória áll rendelkezésre. Az adatokat külön fájlokban lehet tárolni, a grafikai részhez szükséges puffert külsőleg valósították meg. Minden funkciót leegyszerűsítettek és 8 bites architektúrára adaptáltak.
Mit lehet csinálni a Nanonyam-mal? Kitaláltam néhány feladatot.
Programblokkok kidolgozása
Egyszer szükségem volt egy bonyolult menü kifejlesztésére egy 128×64 pixel felbontású grafikus kijelzőhöz. Nagyon nem akartam folyamatosan a firmware-t betölteni a valós mikrokontrollerbe, hogy láthassam, hogyan néznek ki a pixelek. Így született meg a Nanonyam ötlete. Az alábbi ábrán egy valós OLED kijelző képe látható az említett menü egyik eleméről. Most már nélküli jelzésem is kidolgozhatom.

A Nanonyam (végső elképzelése szerint) egy jó eszköz a mikrokontrollerek programblokkjainak kidolgozására, mivel vannak grafikai funkciói (kijelzők és kijelzők szimulálása), fájlokkal való munkára (naplózás, tesztadatok olvasása), billentyűzet kezelése (akár 10 gomb egyidejű olvasása), valamint COM-portokkal (itt külön pont van).
Gyors programok létrehozása
Például gyorsan 100500 szöveges fájlt kellene feldolgoznia. Mindegyiket meg kell nyitnia, kissé meg kell változtatnia valamilyen egyszerű algoritmus szerint, majd menteni és bezárni. Ha mestere vagy a Python-nak, akkor gratulálok, minden a tiéd. De ha elkötelezett Arduino felhasználó vagy (ami sokak esetében így van), a Nanonyam segít megoldani ezt a feladatot. Ez a második célom a Nanonyam-mal: számos hasznos funkciót hozzáadni, mint például a szövegfeldolgozás, screenshot készítése vagy a rendszerben gombnyomások szimulálása (mindez már elérhető), valamint sok más funkció a rutinfeladatok megoldásához.
Hardverek tesztelése COM-porton keresztül
A Nanonyam szerepet tölthet be, mint egy terminál, amely az Ön algoritmusán működik. Készíthetünk egy egyszerű menüt az eszköz vezérlésére és az adatportból kapott adatok megjelenítésére. Adatokat tárolhatunk és olvashatunk be fájlokból elemzés céljából. Hasznos eszköz egyszerű hibakereséshez és hardverkalibráláshoz, valamint egyszerű virtuális műszerfalak létrehozásához. Ez a projekt különösen hasznos lehet diákok és fiatal kutatók számára.
Programozás tanulás
Mint az Arduino projektben mindennél, a Nanonyam fő előnye a funkciók, a felület és a betöltő egyszerűségében rejlik. Ezért ez a projekt érdekes lehet a kezdő programozók számára, valamint azoknak, akik elégedettek az Arduino szintjével. Egyébként én magam sem tanulmányoztam az Arduinót részletesen, mivel mindig WinAVR-t vagy AVR Stúdiót használtam, és assemblerrel kezdtem. Ezért az alábbi példa kód kissé helytelen lesz, de teljes mértékben működő.
Helló, Habr!
Itt az ideje, hogy megismerjük a Nanonyam néhány funkcióját és írjunk egy egyszerű programot. Az Arduinóban fogunk írni, de nem úgy, ahogyan azt szokás, hanem így, ahogy most tudok (már említettem, hogy még nem nagyon értem ezt a környezetet). Először is, hozzunk létre egy új sketch-et és válasszuk a Mega2560 táblát.

Mentjük el a sketch-et fájlba, és másoljuk mellé Helyesebb lenne a könyvtárak fejléceit belefoglalni, de nem tudom, hogyan lehet az Arduinóban külön fájlok fordítását megadni, ezért egyelőre csak közvetlenül (és egyszerre mind) be fogjuk vonni a könyvtárakat.
#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"Még helyesebb lenne létrehozni egy “Nanonyam for Arduino” speciális modult, amelyet közvetlenül az Arduinóból lehet telepíteni. Amint rájövök erre, megcsinálom, de addig is csak az virtuális géppel való munka lényegét mutatom meg. Egy ilyen kódot írunk:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}A sketch ezzel a programmal A funkciók részletes leírását Remélem, a kódban elegendő kommentár található ahhoz, hogy megértsük a lényegét. Itt a sys_Nanonyam() funkció játszik szerepet, mint a virtuális gép "jelszava", amely eltávolítja a virtuális funkciók korlátozásait. E funkció nélkül a program 3 másodperc után leáll.
Megnyomjuk a "Ellenőrzés" gombot, és nem kellene, hogy hiba legyen.

Most meg kell szereznünk a bináris fájlt (firmware). Válasszuk a "Sketch>>Bináris fájl exportálása (CTRL+ALT+S)«.

Ezen a ponton két HEX fájl másolódik a sketch mappájába. Csak a fájlt vesszük, a «with_bootloader.mega» előtag nélkül.
Több mód van a HEX fájl megadására a Nanonyam virtuális gépnek, ezek mind le vannak írva . Javaslom, hogy hozz létre egy fájlt a mellett Nanonyam.exe fájl Nanonyam.path, amelyben megadod a teljes elérési utat a HEX fájlhoz. Ezt követően elindíthatod Nanonyam.exe. Megkapod az ablakot a feliratunkkal.

Hasonlóképpen más környezetekben is létrehozhatsz programokat, például AVR Studio vagy WinAVR.
Ezzel egyelőre be is fejezzük a Nanonyam megismerését. Az alapötletnek érthetőnek kell lennie. . Ha elegen szeretnék használni ezt a projektet, akkor több példát készítek, és folytatom a virtuális funkciók könyvtárának «feltöltését». Konkrét ötleteket fogadok a projekt fejlesztésére, valamint hibák, bugok és elgépelések jelentését. Kérlek, ezeket az elérhetőségeken küldjétek el, . A beszélgetés a megjegyzésekben üdvözlendő.
Mindenkinek köszönöm a figyelmet és jó programozást!
Forrás: habr.com
