
En dag fik jeg en skør idé om at samle . Jeg brugte meget tid på det, og det blev spektakulært og nytteløst, men jeg nød det. For et halvt år siden fik jeg en anden skør idé. Denne gang var den slet ikke spektakulær, men meget mere nyttig. Jeg brugte også meget tid på den. I denne artikel præsenterer jeg beta-versionen af min anden skøre idé.
Jeg kaldte projektet Nanonyam (Nanonjam) og designede endda et logo til det (jeg tegnede i hele 5 minutter).

For dem, der tænker i Arduino-termer, kan man sige, at Nanonyam er et virtuelt Arduino-shield til at styre Windows.
Med andre ord er Nanonyam en virtuel maskine, hvor firmware til AVR-mikrocontrolleren (anbefales ATMEGA2560) bruges som bytekode. Inde i denne virtuelle maskine findes der en simulator af AVR-kernen, men i stedet for perifere enheder, der er placeret ved adresserne SRAM fra 0x0060 til 0x01FF, er der en særlig grænseflade til virtuelle funktioner (herunder Windows API-funktioner). Og det er meget vigtigt straks at forstå: koden til Nanonyam må ikke have nogen henvendelser til det angivne hukommelsesområde, for at undgå at aktivere, for eksempel, funktionen til at slette filer eller formatere disken. Det øvrige hukommelsesområde SRAM fra 0x0200 til 0xFFFF (det er mere end i en rigtig mikrocontroller) er tilgængeligt for brugeren til enhver formål. Jeg vil straks nævne, at der er en særlig beskyttelse mod utilsigtet aktivering af firmware fra en rigtig mikrocontroller (eller firmware fra en anden arkitektur): før man aktiverer
For at skabe programmer til Nanonyam skal du bruge de særlige biblioteker, hvor alle tilgængelige virtuelle funktioner i øjeblikket er implementeret. Du kan downloade den virtuelle maskine Nanonyam og bibliotekerne til den Men en . Og ja, min hjemmeside er meget primitiv og ikke tilpasset til mobile enheder.
Programmet Nanonyam er gratis til hjemme- og kommerciel brug. Programmet Nanonyam leveres på "som det er"-vilkår. Kildekoden gives ikke.
Projekter er i øjeblikket i testfase. Omkring 200 virtuelle funktioner er implementeret, hvilket gør det muligt at skabe simple programmer til Windows.
Det er tydeligt, at det ikke er muligt at skabe noget komplekst i en sådan virtuel maskine, da der kun er 256 kB hukommelse til koden. Data kan gemmes i separate filer, og bufferen til den grafiske del er implementeret eksternt. Alle funktioner er forenklet og tilpasset til 8-bit arkitektur.
Hvad kan man så lave i Nanonyam? Jeg har fundet på nogle opgaver.
Udvikling af programblokke
En gang havde jeg brug for at udvikle en kompleks menu til en grafisk skærm på 128×64 pixels. Jeg ønskede ikke konstant at skulle opdatere firmwaren på den reale mikrokontroller for at se, hvordan pixels ser ud. Sådan opstod ideen til Nanonyam. På billedet nedenfor ses et billede fra en virkelig OLED-skærm af en af punkterne i den menu. Nu kan jeg arbejde med det uden den reale enhed.

Nanonyam (i sin endelige vision) er et godt værktøj til udvikling af programblokke til mikrokontrollere, da der er funktioner til at arbejde med grafik (man kan efterligne skærme og indikatorer), med filer (man kan lave logger, læse testdata), med tastatur (man kan læse op til 10 knapper samtidigt), med COM-porte (her er et separat punkt).
Oprettelse af hurtige programmer
For eksempel, du skal hurtigt bearbejde 100500 tekstfiler. Hver fil skal åbnes, ændres lidt i henhold til en simpel algoritme, gemmes og lukkes. Hvis du er en Python-mester, så tillykke, du har alt. Men hvis du er en erfaren Arduino-bruger (og der er mange af dem), så vil Nanonyam hjælpe dig med at løse denne opgave. Netop dette er mit andet mål med Nanonyam: at tilføje mange nyttige funktioner som tekstbehandling, oprettelse af screenshots eller efterligning af tastetryk i systemet (disse funktioner er allerede tilgængelige), samt mange andre funktioner til løsning af rutineopgaver.
Test af hardware via COM-port
Nanonyam kan fungere som en terminal, der arbejder efter din algoritme. Du kan tegne en lille menu til at styre enheden og vise data, der modtages fra porten. Det er muligt at gemme og læse data fra filer til analyse. Et praktisk værktøj til simpel fejlfinding og kalibrering af hardware samt til at oprette enkle virtuelle kontrolpaneler for apparatet. For studerende og unge forskere kan dette projekt være meget nyttigt.
Læring i programmering
Som med hele Arduino-projektet ligger den primære fordel ved Nanonyam i enkeltheden af funktionerne, grænsefladen og bootloaderen. Derfor bør dette projekt være interessant for nybegyndere inden for programmering og dem, der er tilfredse med Arduino-niveauet. For resten har jeg stadig ikke dykket dybt ind i Arduino, da jeg altid har brugt WinAVR eller AVR Studio og begyndte med assembler. Så eksemplet nedenfor vil være lidt forkert, men det fungerer.
Hej, Habr!
Det er tid til at udforske nogle funktioner i Nanonyam og skrive et simpelt program. Vi vil skrive i Arduino, men ikke som sædvanligt; vi vil gøre det, som jeg nu kan (jeg har tidligere nævnt, at jeg ikke har helt styr på dette miljø endnu). Først opretter vi et nyt sketch og vælger board Mega2560.

Vi gemmer sketchen i en fil og kopierer ved siden af . Det ville være korrekt at inkludere headerne for bibliotekerne, men jeg ved ikke, hvordan man skriver kompilering af separate filer i Arduino, så vi inkluderer bare bibliotekerne direkte (og alle på én gang):
#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"Det ville være endnu bedre at lave en specialmodul "Nanonyam for Arduino", som man kan installere direkte fra Arduino. Når jeg forstår dette, vil jeg gøre det, men indtil videre viser jeg blot essensen af arbejdet med den virtuelle maskine. Vi skriver sådan en kode:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}Sketch med dette program . Detaljeret beskrivelse af funktioner . Jeg håber, kommentarerne i denne kode er tilstrækkelige til at forstå essensen. Her spiller funktionen sys_Nanonyam() rollen som "kodeord" for den virtuelle maskine, som fjerner begrænsningerne på de virtuelle funktioner. Uden denne funktion vil programmet lukke efter 3 sekunders drift.
Tryk på knappen "Tjek" og der bør ikke være nogen fejl.

Nu skal vi få binærfilen (firmwaren). Vælg menuen "Sketch>>Eksportér binærfil (CTRL+ALT+S)«.

Når dette gøres, vil to HEX-filer blive kopieret til mappen med sketchen. Vi tager kun filen uden præfikset «with_bootloader.mega».
Der er flere måder at angive HEX-filen til den virtuelle maskine Nanonyam, alle er beskrevet . Jeg foreslår at oprette en fil ved siden af Nanonyam.exe fil Nanonyam.path, hvor den fulde sti til vores HEX-fil skrives. Derefter kan man starte Nanonyam.exe. Vi får et vindue med vores tekst.

På samme måde kan man oprette programmer i andre miljøer, såsom AVR Studio eller WinAVR.
Vi stopper her for nu med introduktionen til Nanonyam. Den grundlæggende idé bør være klar. . Hvis der er tilstrækkeligt mange interesserede i at bruge dette projekt, vil jeg lave flere eksempler og fortsætte med at «fylde» bibliotekerne med virtuelle funktioner. Konkret idéer til udviklingen af projektet og rapporter om fejl, bugs og misforståelser modtages gerne. Det er ønskeligt at sende dem via kontaktoplysningerne, . Diskussioner er velkomne i kommentarerne.
Tak for opmærksomheden og god programmering!
Kilde: habr.com
