
En gang fikk jeg en sprø idé om å samle . Jeg brukte mye tid på å gjøre det. Resultatet ble spektakulært og unyttig, men jeg likte det. For seks måneder siden fikk jeg en annen sprø idé. Denne gangen var det ikke så spektakulært, men mye mer nyttig. Jeg brukte også mye tid på det. I denne artikkelen presenterer jeg betaversjonen av min andre sprø idé.
Jeg har kalt prosjektet Nanonyam og til og med laget en logo (jeg tegnet i hele 5 minutter).

For de som tenker i Arduino-termer, kan man si at Nanonyam er et virtuelt Arduino-shield for å styre Windows.
Med andre ord er Nanonyam en virtuell maskin der fastvaren for mikrocontrolleren AVR (anbefalt ATMEGA2560) brukes som byte-kode. Inni denne virtuelle maskinen finnes en simulator av AVR-kjernen, men i stedet for periferienheter som ligger på SRAM-adresser fra 0x0060 til 0x01FF, er det et spesielt grensesnitt for virtuelle funksjoner (inkludert Windows API-funksjoner). Og det er veldig viktig å forstå med en gang: koden for Nanonyam må ikke ha noen referanser til det angitte minneområdet for ikke ved et uhell å kunne kalle funksjoner som for eksempel sletter filer eller formaterer disken. Det øvrige minneområdet SRAM fra 0x0200 til 0xFFFF (det er mer enn på en virkelig mikrocontroller) er tilgjengelig for brukeren til ethvert formål. Jeg vil straks påpeke at det er spesielle beskyttelsestiltak mot utilsiktet aktivering av fastvaren til en virkelig mikrocontroller (eller fastvare fra en annen arkitektur): før det kan aktiveres "farlige" funksjoner, må man kalle en spesiell smart virtuell funksjon. Det er også noen andre beskyttelseselementer.
For å lage programmer for Nanonyam må man bruke spesielle biblioteker, hvor alle tilgjengelige virtuelle funksjoner er implementert så langt. Du kan laste ned den virtuelle maskinen Nanonyam og bibliotekene til den . Men en . Ja, og ja, nettstedet mitt er veldig primitivt og ikke tilpasset mobile enheter.
Programvaren Nanonyam er gratis for hjemme- og kommercielt bruk. Programvaren Nanonyam leveres "som den er". Kildekoden er ikke tilgjengelig.
Programmet er for øyeblikket i testfase. Omtrent 200 virtuelle funksjoner er implementert, som gjør det mulig å lage enkle programmer for Windows.
Det er åpenbart at det ikke lar seg gjøre å lage noe komplekst i en slik virtuell maskin, ettersom det kun er 256 kB minne tilgjengelig for koden. Data kan lagres i separate filer, og bufferen for grafikkdelen er implementert eksternt. Alle funksjoner er forenklet og tilpasset til 8-bits arkitektur.
Hva kan man gjøre med Nanonyam? Jeg har kommet opp med flere oppgaver.
Utvikle programblokkene
En gang måtte jeg utvikle et komplekst meny for en grafisk skjerm med 128×64 punkter. Jeg ønsket ikke å måtte laste opp fastvaren til den virkelige mikrocontrolleren hele tiden for å se hvordan pikslene så ut. Så ideen om Nanonyam ble født. Nedenfor er et bilde fra den virkelige OLED-skjermen med ett av punktene i menyen. Nå kan jeg utvikle det uten den virkelige enheten.

Nanonyam (i sin endelige konsept) er et godt verktøy for å utvikle programblokker for mikrocontrollere, da det er funksjoner for grafikk (man kan simulere skjermer og indikatorer), filer (man kan lage logger, lese testdata), tastatur (man kan registrere opptil 10 knapper samtidig), COM-porter (her er det et eget punkt).
Lage raske programmer
For eksempel, hvis du raskt trenger å behandle 100500 tekstfiler. Hver må åpnes, endres litt etter en enkel algoritme, lagres og lukkes. Hvis du er en Python-mester, gratulerer jeg deg, du har alt du trenger. Men hvis du er en hardbarket Arduino-bruker (og det er mange av dem), vil Nanonyam hjelpe deg med å løse denne oppgaven. Dette er faktisk mitt andre mål med Nanonyam: å legge til mange nyttige funksjoner som tekstbehandling, ta skjermbilder eller simulere tastetrykk i systemet (alt dette er allerede tilgjengelig), samt mange andre funksjoner for å løse rutineoppgaver.
Testing av maskiner gjennom COM-port
Nanonyam kan fungera som en terminal som arbetar enligt din algoritm. Du kan rita en liten meny för att styra enheten och visa data som tas emot från porten. Du kan spara och läsa data från filer för analys. Ett bekvämt verktyg för enkel avlusning och kalibrering av hårdvara, samt för att skapa enkla virtuella kontrollpaneler för enheten. För studenter och unga vetenskapsmän kan detta projekt vara mycket användbart.
Utbildning i programmering
Som med hela Arduino-projektet ligger Nanonyams huvudsakliga nytta i enkelheten hos funktionerna, gränssnittet och bootloadern. Därför bör detta projekt vara intressant för nybörjarprogrammerare och de som är nöjda med Arduino-nivån. För övrigt har jag själv inte studerat Arduino i detalj, eftersom jag alltid har använt WinAVR eller AVR Studio och började med assembler. Så exemplet nedan kommer att vara något felaktigt, men fullt fungerande.
Hej, Habr!
Det är dags att bekanta sig med några av funktionerna i Nanonyam och skriva ett enkelt program. Vi kommer att skriva i Arduino, men inte på det sätt som är vanligt, utan så som jag kan just nu (jag har redan sagt att jag fortfarande inte är så bra på den här miljön). Först skapar vi en ny skiss och väljer kortet Mega2560.

Spara skissen i en fil och kopiera den bredvid . Det skulle vara korrekt att inkludera biblioteksrubriker, men jag vet inte hur man skriver kompilering av separata filer i Arduino, så vi inkluderar biblioteken direkt (och alla på en gång):
#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 skulle också vara mer korrekt att skapa en speciell modul "Nanonyam för Arduino" som kan installeras direkt från Arduino. Så snart jag förstår detta, så ska jag göra det, men tills dess visar jag bara hur man arbetar med den virtuella maskinen. Vi skriver en sådan kod:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}Skissen med det här programmet . En detaljerad beskrivning av funktionerna . Jag hoppas att kommentarerna i den här koden är tillräckliga för att förstå kärnan. Här spelar funktionen sys_Nanonyam() rollen som "lösenord" för den virtuella maskinen, vilket tar bort begränsningarna för de virtuella funktionerna. Utan denna funktion kommer programmet att stängas av efter 3 sekunders drift.
Tryck på knappen "Verifiera" och det ska inte finnas några fel.

Nu behöver vi få en binär fil (firmware). Välj menyn "Skiss>>Exportera binärfil (CTRL+ALT+S)«.

Två HEX-filer kommer att kopieras till mappen med skissen. Vi tar bare filen uten prefikset «with_bootloader.mega».
Det finnes flere måter å spesifisere HEX-filen for den virtuelle maskinen Nanonyam på, alle beskrevet . Jeg foreslår at vi oppretter en fil ved siden av Nanonyam.exe fil Nanonyam.path, hvor vi skriver den fulle stien til HEX-filen vår. Deretter kan vi starte Nanonyam.exe. Vi får et vindu med vår tekst.

På lignende måte kan programmer opprettes i andre miljøer, for eksempel i AVR Studio eller WinAVR.
Vi avslutter her for nå med introduksjonen til Nanonyam. Hovedideen skal være klar. . Hvis det er nok interesse for å bruke dette prosjektet, så vil jeg lage flere eksempler og fortsette å «fylle» bibliotekene med virtuelle funksjoner. Konkrete ideer for utviklingen av prosjektet og rapporter om feil, bugs og slurvefeil tas imot med takk. Det er ønskelig at disse sendes via kontaktene . Diskusjon er velkommen i kommentarene.
Takk til alle for oppmerksomheten, og lykke til med programmeringen!
Kilde: habr.com
