
Într-o zi mi-a venit ideea nebună să aduc . Am petrecut mult timp și am făcut-o. A ieșit spectaculos și inutil, dar mi-a plăcut. Acum șase luni am avut o altă idee nebunească. De data aceasta, deloc spectaculos, dar mult mai folositor. De asemenea, am petrecut mult timp pe el. Și în acest articol, vă prezint o versiune beta a a doua mea idee nebună.
Am numit proiectul Nanonyam (Nanonyam) și chiar am venit cu un logo pentru el (am desenat timp de 5 minute).

Pentru cei care gândesc în termeni Arduino, putem spune că Nanonymam este un shield Arduino virtual pentru control Windows.
Cu alte cuvinte, Nananyam este o mașină virtuală care folosește firmware pentru un microcontroler AVR (se recomandă ATMEGA2560) ca bytecode. Această mașină virtuală conține un simulator de kernel AVR, dar în loc de periferice situate la adrese SRAM de la 0x0060 la 0x01FF, conține o interfață specială pentru funcții virtuale (inclusiv funcții Windows API). Este crucial să înțelegem imediat: codul Nanonyam nu trebuie să acceseze în niciun fel intervalul de memorie specificat, pentru a evita declanșarea accidentală, de exemplu, a unei funcții de ștergere a fișierelor sau de formatare a discului. Intervalul de memorie SRAM rămas, de la 0x0200 la 0xFFFF (care este mai mare decât cel al unui microcontroler real), este disponibil utilizatorului în orice scop. Trebuie să menționez imediat că există o protecție specială împotriva rulării accidentale a firmware-ului unui microcontroler real (sau a firmware-ului dintr-o arhitectură diferită): înainte de a activa funcții „periculoase”, trebuie apelată o funcție virtuală specială, inteligentă. Există, de asemenea, și alte caracteristici de securitate.
Pentru a crea programe pentru Nanonyam, trebuie să utilizați biblioteci speciale care implementează toate funcțiile virtuale disponibile în prezent. Descărcați mașina virtuală Nanonyam și bibliotecile pentru aceasta . Dar . Și da, site-ul meu este foarte primitiv și nu este adaptat pentru dispozitive mobile.
Nanonyam este gratuit pentru uz casnic și comercial. Programul Nanonyam este furnizat „ca atare”. Codul sursă nu este furnizat.
Programul este în prezent în faza de testare. Au fost implementate aproximativ 200 de funcții virtuale, permițând crearea de programe simple pentru Windows.
Evident, crearea a ceva complicat într-o astfel de mașină virtuală nu va funcționa, deoarece memoria pentru cod este de doar 256 kB. Datele pot fi stocate în fișiere separate, tamponul pentru partea grafică este implementat extern. Toate funcțiile sunt simplificate și adaptate pentru arhitectura pe 8 biți.
Ce poți face în Nanonyam? Am venit cu câteva probleme.
Dezvoltarea blocurilor de programe
Odată am avut nevoie să creez un meniu complex pentru un afișaj grafic de 128x64 puncte. Chiar nu am vrut să încarc constant firmware-ul într-un microcontroler real pentru a vedea cum arată pixelii. Și așa s-a născut ideea de Nanonyam. Figura de mai jos arată o imagine de pe un afișaj OLED real a unuia dintre elementele din același meniu. Acum pot lucra prin el fără un dispozitiv real.

Nanonyam (în ideea sa finală) este un instrument bun pentru elaborarea blocurilor de programe pentru microcontrolere, deoarece există funcții pentru lucrul cu grafică (puteți simula afișaje și indicatoare), cu fișiere (puteți face jurnale, citiți datele de testare), cu o tastatură (puteți citi până la 10 butoane în același timp), cu porturi COM (aici este un articol separat).
Crearea de programe rapide
De exemplu, trebuie să procesați rapid 100500 de fișiere text. Fiecare trebuie să fie deschis, ușor modificat conform unui algoritm simplu, salvat și închis. Dacă ești un maestru Python, atunci te felicit, ai totul. Dar dacă sunteți un arduino întărit (și există mulți dintre ei), atunci Nanonyam vă va ajuta să rezolvați această problemă. Acesta este cel de-al doilea obiectiv al meu în Nanonyam: să adaug multe funcții utile, cum ar fi procesarea textului, realizarea de capturi de ecran sau simularea apăsărilor de taste în sistem (toate acestea, apropo, sunt deja acolo), precum și multe alte funcții pentru rezolvarea sarcinilor de rutină .
Testarea hardware-ului prin portul COM
Nanonyam poate acționa ca un terminal care funcționează conform algoritmului tău. Puteți desena un mic meniu pentru a controla dispozitivul și pentru a afișa datele primite de la port. Puteți salva și citi datele din fișiere pentru analiză. Un instrument la îndemână pentru depanarea simplă și calibrarea hardware-ului, precum și pentru crearea unor panouri virtuale simple de control al instrumentelor. Pentru studenți și tineri oameni de știință, acest proiect poate fi foarte util.
Instruire de programare
Cu toate acestea, ca și în cazul întregului proiect Arduino, principala utilitate a lui Nanonyam constă în simplificarea funcțiilor, a interfeței și a bootloader-ului. Prin urmare, acest proiect ar trebui să fie de interes pentru programatorii începători și pentru cei care sunt mulțumiți de nivelul arduino. Apropo, eu însumi încă nu am studiat arduino în detaliu, pentru că am folosit întotdeauna WinAVR sau AVR Studio, dar am început cu assembler. Prin urmare, exemplul de program de mai jos va fi puțin greșit, dar destul de funcțional.
Salut Habr!
Este timpul să vă familiarizați cu unele caracteristici Nanonyam și să scrieți un program simplu. Vom scrie în Arduino, dar nu în modul obișnuit, ci în modul în care pot acum (am spus deja că încă nu mi-am dat seama prea bine de acest mediu). Mai întâi, creați o nouă schiță și selectați placa Mega2560.

Salvați schița într-un fișier și apoi copiați-o . Ar fi corect să includă anteturile bibliotecii, dar nu știu cum să scriu compilarea fișierelor individuale în Arduino, așa că, deocamdată, includeți bibliotecile direct (și toate odată):
#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"Ar fi și mai corect să faci un modul special „Nanonyam pentru Arduino”, care poate fi instalat direct din Arduino. De îndată ce îmi dau seama, o voi face, dar deocamdată arăt doar esența lucrului cu o mașină virtuală. Scriem următorul cod:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}Schițați cu acest program . Descrierea detaliată a funcțiilor . Sper că comentariile din acest cod sunt suficiente pentru a înțelege esența. Aici funcția sys_Nanonyam() joacă rolul unei „parole” pentru mașina virtuală, care elimină restricțiile asupra funcțiilor virtuale. Fără această funcție, programul se va închide după 3 secunde de funcționare.
Apăsăm butonul „Verifică” și nu ar trebui să existe erori.

Acum trebuie să obțineți un fișier binar (firmware). Selectați meniul "Schiță>>Exportați fișier binar (CTRL+ALT+S)“.

Aceasta va copia două fișiere HEX în folderul schiță. Luăm doar fișierul fără prefixul „with_bootloader.mega”.
Există mai multe moduri de a specifica un fișier HEX pe mașina virtuală Nanonyam, toate sunt descrise . Vă sugerez să creați lângă fișier Nanonyam.exe fișier cale, în care să înregistrăm calea completă către fișierul nostru HEX. După care poți alerga Nanonyam.exe. Primim o fereastră cu inscripția noastră.

În mod similar, puteți crea programe în alte medii, cum ar fi AVR Studio sau WinAVR.
Aici terminăm cunoștințele noastre cu Nanonyam. Ideea principală ar trebui să fie clară. . Dacă sunt destui oameni dispuși să folosească acest proiect, atunci voi face mai multe exemple și voi continua să „umplem” bibliotecile de funcții virtuale. Sunt acceptate idei concrete pentru dezvoltarea proiectului și rapoarte de defecțiuni, bug-uri și bug-uri. Este recomandabil să îi direcționați către contacte, . Și discuția este binevenită în comentarii.
Vă mulțumim tuturor pentru atenție și programare bună!
Sursa: www.habr.com
