Jednog dana mi je pala na pamet luda ideja da miksam
Projekat sam nazvao Nanonyam (Nanonyam) i čak sam smislio logo za njega (trebalo mi je čitavih 5 minuta da nacrtam).
Za one koji razmišljaju u terminima Arduina, možemo reći da je Nanonyam virtualni Arduino štit za kontrolu Windowsa.
Drugim riječima, Nanonyam je virtuelna mašina koja koristi firmver za AVR mikrokontroler (preporučuje se ATMEGA2560) kao bajt kod. Unutar ove virtuelne mašine nalazi se simulator AVR kernela, ali umesto periferije, koja se nalazi na SRAM adresama od 0x0060 do 0x01FF, postoji poseban interfejs za virtuelne funkcije (uključujući Windows API funkcije). I ovdje je vrlo važno odmah razumjeti: kod za Nanonyam ne bi trebao imati nikakav pristup navedenom rasponu memorije, kako ne bi slučajno pozvao, na primjer, funkciju brisanja datoteka ili formatiranja diska. Preostali raspon SRAM memorije od 0x0200 do 0xFFFF (ovo je veće nego u pravom mikrokontroleru) dostupan je korisniku za bilo koju svrhu. Odmah moram napomenuti da postoji posebna zaštita od slučajnog pokretanja firmvera pravog mikrokontrolera (ili firmvera iz druge arhitekture): prije aktiviranja „opasnih“ funkcija, morate pozvati posebnu lukavu virtualnu funkciju. Tu su i neki drugi sigurnosni elementi.
Da biste kreirali programe za Nanonyam, morate koristiti posebne biblioteke koje implementiraju sve trenutno dostupne virtualne funkcije. Preuzmite Nanonyam virtuelnu mašinu i njene biblioteke
Nanonyam je besplatan za kućnu i komercijalnu upotrebu. Nanonyam program se pruža na principu „kao što jeste“. Izvorni kod nije naveden.
Trenutno je program u fazi testiranja. Implementirano je oko 200 virtualnih funkcija koje vam omogućavaju kreiranje jednostavnih programa za Windows.
Očigledno, neće biti moguće napraviti ništa složeno u takvoj virtuelnoj mašini, jer postoji samo 256 kB memorije za kod. Podaci se mogu pohraniti u zasebne datoteke, bafer za grafički dio je implementiran eksterno. Sve funkcije su pojednostavljene i prilagođene za 8-bitnu arhitekturu.
Šta možete raditi u Nanonyamu? Naišao sam na nekoliko problema.
Testiranje programskih blokova
Jednom sam morao da razvijem složen meni za grafički ekran od 128x64 piksela. Zaista nisam želio stalno učitavati firmver u pravi mikrokontroler da vidim kako pikseli izgledaju. Tako se rodila ideja o Nanonyamu. Slika ispod je slika sa pravog OLED ekrana jedne od stavki u istom meniju. Sada mogu raditi kroz to bez stvarnog uređaja.
Nanonyam (u svom konačnom dizajnu) je dobar alat za izradu programskih blokova za mikrokontrolere, jer ima funkcije za rad sa grafikom (možete simulirati displeje i indikatore), sa fajlovima (možete praviti logove, čitati testne podatke), sa tastaturu (možete čitati do 10 tastera istovremeno), sa COM portovima (ovde postoji posebna stavka).
Kreiranje brzih programa
Na primjer, trebate brzo obraditi 100500 tekstualnih datoteka. Svaki treba otvoriti, malo promijeniti po nekom jednostavnom algoritmu, sačuvati i zatvoriti. Ako ste majstor Pythona, čestitam, imate sve. Ali ako ste okorjeli Arduino tip (a ima ih mnogo), onda će vam Nanonyam pomoći da riješite ovaj problem. To je upravo moj drugi cilj u Nanonyamu: dodati mnoge korisne funkcije kao što su obrada teksta, kreiranje snimaka ekrana ili simulacija pritiska na tipke u sustavu (sve to, inače, već postoje), kao i mnoge druge funkcije za rješavanje rutina zadataka.
Testiranje hardvera preko COM porta
Nanonyam može djelovati kao terminal koji radi prema vašem algoritmu. Možete nacrtati mali meni za kontrolu uređaja i prikaz podataka primljenih sa porta. Možete sačuvati i čitati podatke iz datoteka za analizu. Pogodan alat za jednostavno otklanjanje grešaka i kalibraciju hardvera, kao i za kreiranje jednostavnih virtuelnih kontrolnih panela instrumenata. Ovaj projekat može biti veoma koristan za studente i mlade naučnike.
Obuka programiranja
Međutim, kao i kod cijelog Arduino projekta, glavna korisnost Nanonyama leži u jednostavnosti njegovih funkcija, interfejsa i pokretača. Stoga bi ovaj projekat trebao biti od interesa za nove programere i one koji su zadovoljni Arduino nivoom. Inače, ja još uvijek nisam detaljno proučavao Arduino, pošto sam uvijek koristio WinAVR ili AVR Studio, a počinjao sa asemblerom. Stoga će primjer programa u nastavku biti malo netačan, ali prilično funkcionalan.
Zdravo, Habr!
Vrijeme je da se upoznate s nekim od Nanonyam-ovih funkcija i napišete jednostavan program. Pisaćemo u Arduinu, ali ne na tradicionalan način, već na način na koji sada mogu (već sam rekao da još nisam dobro razumeo ovo okruženje). Prvo kreirajte novu skicu i odaberite Mega2560 ploču.
Spremite skicu u datoteku i kopirajte je pored nje
#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"
Još bolje bi bilo napraviti poseban modul “Nanonyam for Arduino”, koji se može instalirati direktno sa Arduina. Čim ovo shvatim, uradiću to, ali za sada samo pokazujem suštinu rada sa virtuelnom mašinom. Pišemo sljedeći 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);//Задержка и разгрузка процессора
}
Skicirajte ovim programom
Kliknite na dugme „Proveri“ i ne bi trebalo biti grešaka.
Sada morate dobiti binarnu datoteku (firmware). Odaberite meni "Skica>>Izvezi binarni fajl (CTRL+ALT+S)".
U tom slučaju, dvije HEX datoteke će biti kopirane u mapu sa skicom. Uzimamo samo fajl bez prefiksa “with_bootloader.mega”.
Postoji nekoliko načina za usmjeravanje HEX datoteke na virtuelnu mašinu Nanonyam, svi su opisani
Slično, možete kreirati programe u drugim okruženjima, na primjer, u AVR Studio ili WinAVR.
Ovdje ćemo završiti naše upoznavanje s Nanonyamom. Glavna ideja treba da bude jasna.
Hvala svima na pažnji i srećnom programu!
izvor: www.habr.com