Op in dei krige ik it gekke idee om te mingjen
Ik neamde it projekt Nanonyam (Nanonyam) en kaam der sels in logo foar (it naam my in hiele 5 minuten om te tekenjen).
Foar dyjingen dy't tinke yn termen fan Arduino, kinne wy sizze dat Nanonyam in firtuele Arduino-skild is foar it kontrolearjen fan Windows.
Mei oare wurden, Nanonyam is in firtuele masine dy't de firmware brûkt foar de AVR-mikrocontroller (ATMEGA2560 oanrikkemandearre) as bytekoade. Binnen dizze firtuele masine is in AVR kernel simulator, mar ynstee fan de perifeare apparaten, dy't lizze op SRAM adressen 0x0060 oan 0x01FF, der is in spesjale ynterface foar firtuele funksjes (ynklusyf Windows API funksjes). En hjir is it heul wichtich om fuortendaliks te begripen: de koade foar Nanonyam moat gjin tagong hawwe ta it spesifisearre ûnthâldberik, om net per ongelok te neamen, bygelyks de funksje fan it wiskjen fan bestannen of it opmeitsjen fan in skiif. It oerbleaune SRAM-ûnthâldberik fan 0x0200 oant 0xFFFF (dit is grutter dan yn in echte mikrocontroller) is beskikber foar de brûker foar elk doel. Ik moat fuortendaliks opmerke dat d'r spesjale beskerming is tsjin tafallige lansearring fan 'e firmware fan in echte mikrocontroller (of firmware fan in oare arsjitektuer): foardat jo "gefaarlike" funksjes aktivearje, moatte jo in spesjale lestige firtuele funksje neame. D'r binne ek wat oare feiligenseleminten.
Om programma's foar Nanonyam te meitsjen, moatte jo spesjale bibleteken brûke dy't alle op it stuit beskikbere firtuele funksjes ymplementearje. Download de Nanonyam firtuele masine en syn bibleteken
Nanonyam is fergees foar thús en kommersjeel gebrûk. It Nanonyam-programma wurdt levere op in "as is" basis. Gjin boarnekoade levere.
Op it stuit is it programma yn 'e testfase. Sawat 200 firtuele funksjes binne ymplementearre wêrtroch jo ienfâldige programma's foar Windows kinne meitsje.
Fansels sil it net mooglik wêze om neat kompleks te meitsjen yn sa'n firtuele masine, om't d'r mar 256 kB ûnthâld is foar de koade. Gegevens kinne wurde opslein yn aparte bestannen, de buffer foar it grafyske diel wurdt ekstern ymplementearre. Alle funksjes wurde ferienfâldige en oanpast foar 8-bit arsjitektuer.
Wat kinne jo dwaan yn Nanonyam? Ik kaam mei ferskate problemen.
Testing programma blokken
Ik moast ienris in kompleks menu ûntwikkelje foar in grafyske werjefte fan 128x64 piksels. Ik woe de firmware net konstant laden yn in echte mikrocontroller om te sjen hoe't de piksels der útseagen. Dit is hoe't it idee fan Nanonyam waard berne. De figuer hjirûnder is in ôfbylding fan in echte OLED-werjefte fan ien fan 'e items yn datselde menu. No kin ik der troch wurkje sûnder in eigentlik apparaat.
Nanonyam (yn syn definitive ûntwerp) is in goed ark foar it útwurkjen fan programmablokken foar mikrocontrollers, om't it funksjes hat foar wurkjen mei grafiken (jo kinne byldskermen en yndikatoaren simulearje), mei bestannen (jo kinne logs meitsje, testgegevens lêze), mei in toetseboerd (do kinst lêze oant 10 knoppen tagelyk), mei COM havens (der is in apart item hjir).
It meitsjen fan Quick Programs
Jo moatte bygelyks 100500 tekstbestannen fluch ferwurkje. Elk moat iepene wurde, in bytsje feroare neffens wat ienfâldich algoritme, bewarre en sluten. As jo in Python-master binne, dan lokwinsken, jo hawwe alles. Mar as jo in inveterate Arduino guy binne (en d'r binne in protte fan har), dan sil Nanonyam jo helpe om dit probleem op te lossen. Dit is krekt myn twadde doel yn Nanonyam: in protte nuttige funksjes tafoegje, lykas tekstferwurking, it meitsjen fan skermôfbyldings of simulearjen fan toetsoanslagen yn it systeem (dêr't allegear trouwens al binne), lykas ek in protte oare funksjes foar it oplossen fan routine taken.
Testen fan hardware fia COM-poarte
Nanonyam kin fungearje as in terminal dy't wurket neffens jo algoritme. Jo kinne in lyts menu tekenje om it apparaat te kontrolearjen en de gegevens te werjaan dy't ûntfongen binne fan 'e haven. Jo kinne gegevens fan bestannen opslaan en lêze foar analyse. In handich ark foar ienfâldige debuggen en kalibraasje fan hardware, lykas ek foar it meitsjen fan ienfâldige firtuele ynstrumintkontrôlepanielen. Dit projekt kin heul nuttich wêze foar studinten en jonge wittenskippers.
Programming training
Lykwols, lykas by it hiele Arduino-projekt, leit de wichtichste nut fan Nanonyam yn 'e ienfâld fan har funksjes, ynterface en bootloader. Dêrom soe dit projekt fan belang wêze moatte foar nije programmeurs en dyjingen dy't tefreden binne mei it Arduino-nivo. Trouwens, ik sels haw Arduino noch net yn detail studearre, om't ik altyd WinAVR of AVR Studio brûkte, en begon mei assembler. Dêrom sil it foarbyldprogramma hjirûnder in bytsje ferkeard wêze, mar goed wurkje.
Hallo, Habr!
It is tiid om yn 'e kunde te kommen mei guon fan 'e funksjes fan Nanonyam en in ienfâldich programma te skriuwen. Wy sille yn Arduino skriuwe, mar net op 'e tradisjonele manier, mar op 'e manier dy't ik no kin (ik haw al sein dat ik dizze omjouwing noch net sa goed begrepen haw). Meitsje earst in nije skets en selektearje it Mega2560-boerd.
Bewarje de skets yn in bestân en kopiearje it njonken it
#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"
It soe noch better wêze om in spesjale module "Nanonyam foar Arduino" te meitsjen, dy't direkt fan Arduino ynstallearre wurde kin. Sadree't ik dit útfine, sil ik it dwaan, mar foar no lit ik gewoan de essinsje sjen fan wurkjen mei in firtuele masine. Wy skriuwe de folgjende koade:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}
Skizze mei dit programma
Klikje op de knop "Kontrolearje" en d'r moatte gjin flaters wêze.
No moatte jo de binêre triem (firmware) krije. Selektearje it menu "Skets >> Eksportearje binêre triem (CTRL+ALT+S)".
Yn dit gefal wurde twa HEX-bestannen kopiearre nei de map mei de skets. Wy nimme allinich it bestân sûnder it foarheaksel "with_bootloader.mega".
D'r binne ferskate manieren om in HEX-bestân te wizen op 'e Nanonyam firtuele masine, allegear wurde beskreaun
Op deselde manier kinne jo programma's meitsje yn oare omjouwings, bygelyks yn AVR Studio of WinAVR.
Dit is wêr't wy ús yntroduksje nei Nanonyam sille ôfmeitsje. It haad idee moat dúdlik wêze.
Tankewol allegear foar jo oandacht en lokkige programmearring!
Boarne: www.habr.com