Un giorno ho avuto la folle idea di portare
Ho chiamato il progetto Nanonyam (Nanonyam) e ne ho persino ideato un logo (ho disegnato per 5 minuti).
Per chi ragiona in termini di Arduino, possiamo dire che Nanonyam è uno shield Arduino virtuale per il controllo di Windows.
In altre parole, Nanonyam è una macchina virtuale che utilizza il firmware per il microcontrollore AVR (si consiglia ATMEGA2560) come bytecode. All'interno di questa macchina virtuale c'è un simulatore di base AVR, ma al posto delle periferiche, che si trovano agli indirizzi SRAM da 0x0060 a 0x01FF, c'è un'interfaccia speciale per le funzioni virtuali (comprese le funzioni API di Windows). E qui è molto importante capire subito: il codice per Nanonyam non dovrebbe avere alcun accesso all'intervallo di memoria specificato, per non richiamare accidentalmente, ad esempio, la funzione di eliminazione di file o formattazione di un disco. Il resto dell'intervallo di memoria SRAM da 0x0200 a 0xFFFF (questo è più che in un vero microcontrollore) è disponibile per l'utente per qualsiasi scopo. Noto subito che esiste una protezione speciale contro l'avvio accidentale del firmware di un vero microcontrollore (o firmware di un'altra architettura): prima di attivare funzioni "pericolose", è necessario chiamare un'apposita funzione virtuale complicata. Ci sono anche altre funzionalità di sicurezza.
Per creare programmi per Nanonyam, è necessario utilizzare librerie speciali che implementano tutte le funzioni virtuali attualmente disponibili. Scarica la macchina virtuale Nanonyam e le relative librerie
Nanonyam è gratuito per uso domestico e commerciale. Il programma Nanonyam viene fornito "così com'è". Il codice sorgente non è fornito.
Il programma è attualmente in fase di test. Implementate circa 200 funzioni virtuali che permettono di creare semplici programmi per Windows.
Ovviamente, creare qualcosa di complicato in una macchina virtuale del genere non funzionerà, poiché la memoria per il codice è di soli 256 kB. I dati possono essere memorizzati in file separati, il buffer per la parte grafica è implementato esternamente. Tutte le funzioni sono semplificate e adattate per l'architettura a 8 bit.
Cosa puoi fare a Nanonyam? Ho riscontrato alcuni problemi.
Sviluppo di blocchi di programma
Una volta avevo bisogno di progettare un menu complesso per un display grafico da 128x64 punti. Non volevo davvero caricare costantemente il firmware in un vero microcontrollore per vedere come appaiono i pixel. E così è nata l'idea di Nanonyam. La figura seguente mostra un'immagine da un display OLED reale di una delle voci dello stesso menu. Ora posso lavorarci senza un vero dispositivo.
Nanonyam (nella sua idea finale) è un buon strumento per elaborare blocchi di programma per microcontrollori, poiché ci sono funzioni per lavorare con la grafica (puoi simulare display e indicatori), con file (puoi creare registri, leggere dati di test), con una tastiera (puoi leggere fino a 10 pulsanti contemporaneamente), con porte COM (qui c'è un elemento separato).
Creazione di programmi rapidi
Ad esempio, è necessario elaborare rapidamente 100500 file di testo. Ognuno deve essere aperto, leggermente modificato secondo un semplice algoritmo, salvato e chiuso. Se sei un maestro di Python, allora mi congratulo con te, hai tutto. Ma se sei un arduino incallito (e ce ne sono molti), Nanonyam ti aiuterà a risolvere questo problema. Questo è il mio secondo obiettivo in Nanonyam: aggiungere molte funzioni utili come l'elaborazione del testo, l'acquisizione di schermate o la simulazione di sequenze di tasti nel sistema (che, tra l'altro, sono già presenti), così come molte altre funzioni per risolvere compiti di routine .
Test hardware tramite porta COM
Nanonyam può fungere da terminale che funziona secondo il tuo algoritmo. È possibile disegnare un piccolo menu per controllare il dispositivo e visualizzare i dati ricevuti dalla porta. È possibile salvare e leggere i dati dai file per l'analisi. Uno strumento utile per il semplice debugging e la calibrazione dell'hardware, nonché per la creazione di semplici pannelli di controllo di strumenti virtuali. Per studenti e giovani scienziati, questo progetto può essere molto utile.
Formazione alla programmazione
Tuttavia, come per l'intero progetto Arduino, l'utilità principale di Nanonyam risiede nella semplificazione delle funzioni, dell'interfaccia e del bootloader. Pertanto, questo progetto dovrebbe interessare i programmatori alle prime armi e coloro che sono soddisfatti del livello di arduino. A proposito, io stesso non ho ancora studiato arduino in dettaglio, perché ho sempre usato WinAVR o AVR Studio, ma ho iniziato con l'assembler. Pertanto, il programma di esempio qui sotto sarà un po' sbagliato, ma abbastanza funzionante.
Ciao Habr!
È ora di familiarizzare con alcune funzionalità di Nanonyam e scrivere un semplice programma. Scriveremo in Arduino, ma non nel solito modo, ma nel modo in cui posso ora (ho già detto che non ho ancora capito molto bene questo ambiente). Innanzitutto, crea un nuovo schizzo e seleziona la scheda Mega2560.
Salva lo schizzo in un file e copialo successivamente
#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"
Sarebbe ancora più corretto realizzare un modulo speciale "Nanonyam for Arduino", installabile direttamente da Arduino. Non appena lo capirò, lo farò, ma per ora sto solo mostrando l'essenza del lavoro con una macchina virtuale. Scriviamo il seguente codice:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}
Disegna con questo programma
Premiamo il pulsante "Verifica" e non dovrebbero esserci errori.
Ora devi ottenere un file binario (firmware). Seleziona il menù "Schizzo>>Esporta file binario (CTRL+ALT+S)«.
Questo copierà due file HEX nella cartella dello schizzo. Prendiamo solo il file senza il prefisso "with_bootloader.mega".
Esistono diversi modi per specificare un file HEX nella macchina virtuale Nanonyam, tutti descritti
Allo stesso modo, puoi creare programmi in altri ambienti, come AVR Studio o WinAVR.
È qui che finiamo la nostra conoscenza con Nanonyam. L'idea principale dovrebbe essere chiara.
Grazie a tutti per l'attenzione e buona programmazione!
Fonte: habr.com