Într-o zi mi-a venit ideea nebună să aduc
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 de Arduino, putem spune că Nanonyam este un scut Arduino virtual pentru controlul Windows.
Cu alte cuvinte, Nanonyam este o mașină virtuală care folosește firmware-ul pentru microcontrolerul AVR (este recomandat ATMEGA2560) ca bytecode. În interiorul acestei mașini virtuale se află un simulator de bază AVR, dar în loc de dispozitive periferice, care sunt situate la adrese SRAM de la 0x0060 la 0x01FF, există o interfață specială pentru funcțiile virtuale (inclusiv funcțiile API Windows). Și aici este foarte important să înțelegeți imediat: codul pentru Nanonyam nu ar trebui să aibă acces la intervalul de memorie specificat, pentru a nu apela accidental, de exemplu, funcția de ștergere a fișierelor sau de formatare a unui disc. Restul intervalului de memorie SRAM de la 0x0200 la 0xFFFF (aceasta este mai mult decât într-un microcontroler real) este disponibil pentru utilizator pentru orice scop. Observ imediat că există o protecție specială împotriva lansării accidentale a firmware-ului unui microcontroler real (sau firmware-ului dintr-o altă arhitectură): înainte de a activa funcții „periculoase”, trebuie să apelați o funcție virtuală complicată specială. Există ș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
Nanonyam este gratuit pentru uz casnic și comercial. Programul Nanonyam este furnizat „ca atare”. Codul sursă nu este furnizat.
Programul se află în prezent în faza de testare. Au implementat aproximativ 200 de funcții virtuale care vă permit să creați 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
#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
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
Î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ă.
Vă mulțumim tuturor pentru atenție și programare bună!
Sursa: www.habr.com