En dag fikk jeg den sprø ideen å komme med
Jeg kalte prosjektet Nanonyam (Nanonyam) og kom til og med opp med en logo for det (jeg tegnet i 5 minutter).
For de som tenker i termer av Arduino, kan vi si at Nanonyam er et virtuelt Arduino-skjold for å kontrollere Windows.
Nanonyam er med andre ord en virtuell maskin som bruker fastvaren for AVR-mikrokontrolleren (ATMEGA2560 anbefales) som bytekode. Inne i denne virtuelle maskinen er en AVR-kjernesimulator, men i stedet for perifere enheter, som er plassert på SRAM-adresser fra 0x0060 til 0x01FF, er det et spesielt grensesnitt til virtuelle funksjoner (inkludert Windows API-funksjoner). Og her er det veldig viktig å forstå med en gang: koden for Nanonyam skal ikke ha tilgang til det spesifiserte minneområdet, for ikke å ved et uhell kalle opp, for eksempel funksjonen til å slette filer eller formatere en disk. Resten av SRAM-minneområdet fra 0x0200 til 0xFFFF (dette er mer enn i en ekte mikrokontroller) er tilgjengelig for brukeren til ethvert formål. Jeg merker med en gang at det er en spesiell beskyttelse mot utilsiktet lansering av fastvaren til en ekte mikrokontroller (eller fastvare fra en annen arkitektur): før du aktiverer "farlige" funksjoner, må du ringe en spesiell vanskelig virtuell funksjon. Det er noen andre sikkerhetsfunksjoner også.
For å lage programmer for Nanonyam, må du bruke spesielle biblioteker som implementerer alle tilgjengelige virtuelle funksjoner. Last ned den virtuelle Nanonyam-maskinen og bibliotekene for den
Nanonyam er gratis for hjemmebruk og kommersiell bruk. Nanonyam-programmet tilbys på en "som den er"-basis. Kildekode er ikke oppgitt.
Programmet er for tiden i testfasen. Implementert ca 200 virtuelle funksjoner som lar deg lage enkle programmer for Windows.
Å lage noe komplisert i en slik virtuell maskin vil åpenbart ikke fungere, siden minnet for koden bare er 256 kB. Data kan lagres i separate filer, bufferen for den grafiske delen implementeres eksternt. Alle funksjoner er forenklet og tilpasset 8-bits arkitektur.
Hva kan du gjøre i Nanonyam? Jeg kom opp med noen problemer.
Utvikling av programblokker
Jeg trengte en gang å designe en kompleks meny for en grafisk skjerm på 128 x 64 punkter. Jeg ville virkelig ikke hele tiden laste fastvaren inn i en ekte mikrokontroller for å se hvordan pikslene ser ut. Og slik ble ideen om Nanonyam født. Figuren nedenfor viser et bilde fra en ekte OLED-skjerm av ett av elementene på samme meny. Nå kan jeg jobbe gjennom det uten en ekte enhet.
Nanonyam (i sin endelige idé) er et godt verktøy for å utarbeide programblokker for mikrokontrollere, da det finnes funksjoner for å jobbe med grafikk (du kan simulere skjermer og indikatorer), med filer (du kan lage logger, lese testdata), med et tastatur (du kan lese opptil 10 knapper samtidig), med COM-porter (her er et eget element).
Opprette hurtigprogrammer
For eksempel må du raskt behandle 100500 tekstfiler. Hver av dem må åpnes, endres litt i henhold til en enkel algoritme, lagres og lukkes. Hvis du er en Python-mester, så gratulerer jeg deg, du har alt. Men hvis du er en herdet arduino (og det er mange av dem), vil Nanonyam hjelpe deg med å løse dette problemet. Dette er mitt andre mål i Nanonyam: å legge til mange nyttige funksjoner som tekstbehandling, ta skjermbilder eller simulere tastetrykk i systemet (som alle forresten allerede er der), samt mange andre funksjoner for å løse rutineoppgaver .
Testing av maskinvare via COM-port
Nanonyam kan fungere som en terminal som fungerer i henhold til din algoritme. Du kan tegne en liten meny for å kontrollere enheten og vise dataene mottatt fra porten. Du kan lagre og lese data fra filer for analyse. Et hendig verktøy for enkel feilsøking og kalibrering av maskinvare, samt for å lage enkle virtuelle instrumentkontrollpaneler. For studenter og unge forskere kan dette prosjektet være svært nyttig.
Programmeringstrening
Imidlertid, som med hele Arduino-prosjektet, ligger hovednytten av Nanonyam i forenklingen av funksjoner, grensesnitt og oppstartslaster. Derfor bør dette prosjektet være av interesse for nybegynnere programmerere og de som er fornøyd med nivået på arduino. Selv har jeg forresten fortsatt ikke studert arduino i detalj, fordi jeg alltid brukte WinAVR eller AVR Studio, men begynte med assembler. Derfor vil eksempelprogrammet nedenfor være litt feil, men ganske fungerende.
Hei Habr!
Det er på tide å bli kjent med noen av Nanonyam-funksjonene og skrive et enkelt program. Vi skal skrive i Arduino, men ikke på vanlig måte, men på den måten jeg kan nå (jeg har allerede sagt at jeg ikke har funnet ut av dette miljøet så godt ennå). Lag først en ny skisse og velg Mega2560-brettet.
Lagre skissen til en fil og kopier neste
#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 enda mer riktig å lage en spesiell modul "Nanonyam for Arduino", som kan installeres direkte fra Arduino. Så snart jeg finner ut av det, skal jeg gjøre det, men foreløpig viser jeg bare essensen av å jobbe med en virtuell maskin. Vi skriver følgende 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);//Задержка и разгрузка процессора
}
Skisse med dette programmet
Vi trykker på "Sjekk"-knappen og det skal ikke være noen feil.
Nå må du få en binær fil (fastvare). Velg menyen "Skisse >> Eksporter binær fil (CTRL+ALT+S)".
Dette vil kopiere to HEX-filer til skissemappen. Vi tar bare filen uten prefikset "with_bootloader.mega".
Det er flere måter å spesifisere en HEX-fil til den virtuelle Nanonyam-maskinen, alle er beskrevet
På samme måte kan du lage programmer i andre miljøer, for eksempel AVR Studio eller WinAVR.
Det er her vi avslutter vårt bekjentskap med Nanonyam. Hovedideen bør være klar.
Takk alle sammen for oppmerksomheten og god programmering!
Kilde: www.habr.com