En dag fick jag den galna idén att komma med
Jag döpte projektet till Nanonyam (Nanonyam) och kom till och med på en logotyp för det (jag ritade i 5 minuter).
För de som tänker i termer av Arduino kan vi säga att Nanonyam är en virtuell Arduino-sköld för att styra Windows.
Med andra ord är Nanonyam en virtuell maskin som använder firmware för AVR-mikrokontrollern (ATMEGA2560 rekommenderas) som bytekod. Inuti denna virtuella maskin finns en AVR-kärnsimulator, men istället för kringutrustning, som finns på SRAM-adresser från 0x0060 till 0x01FF, finns det ett speciellt gränssnitt till virtuella funktioner (inklusive Windows API-funktioner). Och här är det mycket viktigt att förstå direkt: koden för Nanonyam ska inte ha någon tillgång till det angivna minnesintervallet, för att inte av misstag anropa till exempel funktionen att radera filer eller formatera en disk. Resten av SRAM-minnet från 0x0200 till 0xFFFF (detta är mer än i en riktig mikrokontroller) är tillgänglig för användaren för alla ändamål. Jag noterar direkt att det finns ett speciellt skydd mot oavsiktlig lansering av firmware från en riktig mikrokontroller (eller firmware från en annan arkitektur): innan du aktiverar "farliga" funktioner måste du anropa en speciell knepig virtuell funktion. Det finns några andra säkerhetsfunktioner också.
För att skapa program för Nanonyam måste du använda speciella bibliotek som implementerar alla för närvarande tillgängliga virtuella funktioner. Ladda ner den virtuella Nanonyam-maskinen och biblioteken för den
Nanonyam är gratis för hem och kommersiellt bruk. Nanonyam-programmet tillhandahålls på "i befintligt skick". Källkod tillhandahålls inte.
Programmet är för närvarande i testfasen. Implementerat ca 200 virtuella funktioner som låter dig skapa enkla program för Windows.
Uppenbarligen kommer det inte att fungera att skapa något komplicerat i en sådan virtuell maskin, eftersom minnet för koden bara är 256 kB. Data kan lagras i separata filer, bufferten för den grafiska delen implementeras externt. Alla funktioner är förenklade och anpassade för 8-bitars arkitektur.
Vad kan du göra i Nanonyam? Jag kom på några problem.
Utveckling av programblock
Jag behövde en gång designa en komplex meny för en grafisk display med 128x64 punkter. Jag ville verkligen inte hela tiden ladda in firmware i en riktig mikrokontroller för att se hur pixlarna ser ut. Och så föddes idén om Nanonyam. Bilden nedan visar en bild från en riktig OLED-skärm av ett av objekten på samma meny. Nu kan jag arbeta mig igenom det utan en riktig enhet.
Nanonyam (i sin slutliga idé) är ett bra verktyg för att arbeta fram programblock för mikrokontroller, eftersom det finns funktioner för att arbeta med grafik (du kan simulera displayer och indikatorer), med filer (du kan göra loggar, läsa testdata), med ett tangentbord (du kan läsa upp till 10 knappar samtidigt), med COM-portar (här är en separat post).
Skapa snabbprogram
Till exempel måste du snabbt bearbeta 100500 textfiler. Var och en måste öppnas, ändras något enligt någon enkel algoritm, sparas och stängas. Om du är en Python-mästare, så gratulerar jag dig, du har allt. Men om du är en härdad arduino (och det finns många av dem), så kommer Nanonyam att hjälpa dig att lösa detta problem. Detta är mitt andra mål i Nanonyam: att lägga till många användbara funktioner som textbearbetning, ta skärmdumpar eller simulera tangenttryckningar i systemet (som alla förresten redan finns där), samt många andra funktioner för att lösa rutinuppgifter .
Testar hårdvara via COM-port
Nanonyam kan fungera som en terminal som fungerar 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 praktiskt verktyg för enkel felsökning och kalibrering av hårdvara, samt för att skapa enkla virtuella instrumentkontrollpaneler. För studenter och unga forskare kan detta projekt vara mycket användbart.
Programmeringsträning
Men som med hela Arduino-projektet ligger Nanonyams främsta användbarhet i förenklingen av funktioner, gränssnitt och bootloader. Därför bör detta projekt vara av intresse för nybörjare programmerare och de som är nöjda med nivån på arduino. Själv har jag förresten fortfarande inte studerat arduino i detalj, eftersom jag alltid använde WinAVR eller AVR Studio, utan började med assembler. Därför kommer exempelprogrammet nedan att vara lite fel, men ganska fungerande.
Hej Habr!
Det är dags att bekanta sig med några Nanonyam-funktioner och skriva ett enkelt program. Vi kommer att skriva i Arduino, men inte på vanligt sätt, utan på det sätt jag kan nu (jag har redan sagt att jag inte har listat ut den här miljön så bra än). Skapa först en ny skiss och välj Mega2560-kortet.
Spara skissen till en fil och kopiera nästa
#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 vara ännu mer korrekt att göra en speciell modul "Nanonyam for Arduino", som kan installeras direkt från Arduino. Så fort jag kommer på det kommer jag att göra det, men för tillfället visar jag bara essensen av att arbeta med en virtuell maskin. Vi skriver följande 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);//Задержка и разгрузка процессора
}
Skissa med detta program
Vi trycker på "Kontrollera"-knappen och det ska inte vara några fel.
Nu behöver du skaffa en binär fil (firmware). Välj menyn "Skiss >> Exportera binär fil (CTRL+ALT+S)".
Detta kommer att kopiera två HEX-filer till skissmappen. Vi tar bara filen utan prefixet "with_bootloader.mega".
Det finns flera sätt att specificera en HEX-fil till den virtuella Nanonyam-maskinen, alla beskrivs
På samma sätt kan du skapa program i andra miljöer, som AVR Studio eller WinAVR.
Det är här vi avslutar vår bekantskap med Nanonyam. Huvudtanken bör vara tydlig.
Tack alla för er uppmärksamhet och bra programmering!
Källa: will.com