Iun tagon mi havis la frenezan ideon alporti
Mi nomis la projekton Nanonyam (Nanonyam) kaj eĉ elpensis emblemon por ĝi (mi desegnis dum 5 minutoj).
Por tiuj, kiuj pensas pri Arduino, ni povas diri, ke Nanonyam estas virtuala Arduino-ŝildo por kontroli Vindozon.
Alivorte, Nanonyam estas virtuala maŝino, kiu uzas la firmware por la AVR-mikroregilo (ATMEGA2560 rekomendas) kiel la bajtokodon. Ene de ĉi tiu virtuala maŝino estas AVR-kerna simulilo, sed anstataŭ ekstercentraj aparatoj, kiuj situas ĉe SRAM-adresoj de 0x0060 ĝis 0x01FF, ekzistas speciala interfaco al virtualaj funkcioj (inkluzive de Windows API-funkcioj). Kaj ĉi tie estas tre grave kompreni tuj: la kodo por Nanonyam ne havu aliron al la specifita memorintervalo, por ne hazarde voki, ekzemple, la funkcion forigi dosierojn aŭ formati diskon. La resto de la SRAM-memoro gamo de 0x0200 ĝis 0xFFFF (ĉi tio estas pli ol en vera mikroregilo) estas disponebla por la uzanto por ajna celo. Mi tuj rimarkas, ke ekzistas speciala protekto kontraŭ hazarda lanĉo de la firmvaro de vera mikroregilo (aŭ firmware de alia arkitekturo): antaŭ aktivigi "danĝerajn" funkciojn, oni devas nomi specialan delikatan virtualan funkcion. Estas iuj aliaj sekurecaj funkcioj ankaŭ.
Por krei programojn por Nanonyam, vi devas uzi specialajn bibliotekojn, kiuj efektivigas ĉiujn nuntempe disponeblajn virtualajn funkciojn. Elŝutu la virtualan maŝinon Nanonyam kaj bibliotekojn por ĝi
Nanonyam estas senpaga por hejma kaj komerca uzo. La Nanonyam-programo estas disponigita sur "kiel estas" bazo. Fontkodo ne estas provizita.
La programo estas nuntempe en la testa fazo. Efektivigis ĉirkaŭ 200 virtualajn funkciojn, kiuj permesas krei simplajn programojn por Vindozo.
Evidente, krei ion komplikan en tia virtuala maŝino ne funkcios, ĉar la memoro por la kodo estas nur 256 kB. Datenoj povas esti stokitaj en apartaj dosieroj, la bufro por la grafika parto estas efektivigita ekstere. Ĉiuj funkcioj estas simpligitaj kaj adaptitaj por 8-bita arkitekturo.
Kion vi povas fari en Nanonyam? Mi elpensis kelkajn problemojn.
Disvolviĝo de programblokoj
Mi iam bezonis desegni kompleksan menuon por 128x64 punkto grafika ekrano. Mi vere ne volis konstante ŝargi la firmvaro en veran mikroregilon por vidi kiel aspektas la pikseloj. Kaj tiel naskiĝis la ideo de Nanonyam. La suba figuro montras bildon de reala OLED-ekrano de unu el la eroj en la sama menuo. Nun mi povas labori per ĝi sen vera aparato.
Nanonyam (en ĝia fina ideo) estas bona ilo por ellabori programblokojn por mikroregiloj, ĉar ekzistas funkcioj por labori kun grafikaĵoj (vi povas simuli ekranojn kaj indikilojn), kun dosieroj (vi povas fari protokolojn, legi testajn datumojn), kun klavaro (vi povas legi ĝis 10 butonojn samtempe), kun COM-havenoj (ĉi tie estas aparta ero).
Kreante Rapidajn Programojn
Ekzemple, vi devas rapide prilabori 100500 tekstajn dosierojn. Ĉiu devas esti malfermita, iomete modifita laŭ iu simpla algoritmo, konservita kaj fermita. Se vi estas majstro de Python, tiam mi gratulas vin, vi havas ĉion. Sed se vi estas hardita arduino (kaj estas multaj el ili), tiam Nanonyam helpos vin solvi ĉi tiun problemon. Jen mia dua celo en Nanonyam: aldoni multajn utilajn funkciojn kiel teksttraktadon, preni ekrankopiojn aŭ simuli klavpremojn en la sistemo (kiuj, cetere, jam ekzistas), kaj ankaŭ multajn aliajn funkciojn por solvi rutinajn taskojn. .
Testado de aparataro per COM-haveno
Nanonyam povas funkcii kiel terminalo, kiu funkcias laŭ via algoritmo. Vi povas desegni malgrandan menuon por kontroli la aparaton kaj montri la datumojn ricevitajn de la haveno. Vi povas konservi kaj legi datumojn de dosieroj por analizo. Praktika ilo por simpla senararigado kaj alĝustigo de aparataro, same kiel por krei simplajn virtualajn instrumentajn kontrolpanelojn. Por studentoj kaj junaj sciencistoj, ĉi tiu projekto povas esti tre utila.
Programado de trejnado
Tamen, kiel kun la tuta Arduino-projekto, la ĉefa utileco de Nanonyam kuŝas en la simpligo de funkcioj, interfaco kaj ekŝargilo. Tial, ĉi tiu projekto devus interesi komencajn programistojn kaj tiujn, kiuj estas kontentaj pri la nivelo de arduino. Cetere, mi mem ankoraŭ ne detale studis arduino, ĉar mi ĉiam uzis WinAVR aŭ AVR Studion, sed komencis per asemblero. Tial la ekzempla programo malsupre estos iom malĝusta, sed sufiĉe funkcianta.
Saluton Habr!
Estas tempo konatiĝi kun iuj funkcioj de Nanonyam kaj verki simplan programon. Ni skribos en Arduino, sed ne laŭ la kutima maniero, sed laŭ la maniero, kiel mi nun povas (mi jam diris, ke mi ankoraŭ ne tre bone eltrovis ĉi tiun medion). Unue, kreu novan skizon kaj elektu la tabulon Mega2560.
Konservu la skizon al dosiero kaj kopiu poste
#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"
Eĉ pli ĝuste estus fari specialan modulon "Nanonyam por Arduino", kiu povas esti instalita rekte de Arduino. Tuj kiam mi eltrovos ĝin, mi faros ĝin, sed nuntempe mi nur montras la esencon labori kun virtuala maŝino. Ni skribas la sekvan kodon:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}
Skizo kun ĉi tiu programo
Ni premas la butonon "Kontrolu" kaj ne devus esti eraroj.
Nun vi devas akiri binaran dosieron (firmware). Elektu la menuon "Skizo>> Eksporti binaran dosieron (CTRL+ALT+S)".
Ĉi tio kopios du HEX-dosierojn al la skiza dosierujo. Ni prenas nur la dosieron sen la prefikso "with_bootloader.mega".
Estas pluraj manieroj specifi HEX-dosieron al la virtuala maŝino Nanonyam, ĉiuj el ili estas priskribitaj
Simile, vi povas krei programojn en aliaj medioj, kiel AVR Studio aŭ WinAVR.
Jen kie ni finas nian konatiĝon kun Nanonyam. La ĉefa ideo estu klara.
Dankon al ĉiuj pro via atento kaj bona programado!
fonto: www.habr.com