
Un giorno mi è venuta in mente un'idea strampalata: Ho speso molto tempo per realizzarlo. È venuto fuori in modo spettacolare e inutile, ma mi è piaciuto. Sei mesi fa un'altra idea strampalata mi ha colpito. Questa volta non è stata affatto spettacolare, ma molto più utile. Anche per essa ho dedicato molto tempo. In questo articolo presento la beta della mia seconda idea strampalata.
Ho chiamato il progetto Nanonyam e gli ho persino creato un logo (ho disegnato per ben 5 minuti).

Per coloro che pensano in termini di Arduino, si può dire che Nanonyam è un shield virtuale di Arduino per controllare Windows.
Другими словами, Nanonyam это виртуальная машина, в которой в качестве байт-кода используется прошивка для микроконтроллера AVR (рекомендуется ATMEGA2560). Внутри этой виртуальной машины находится симулятор ядра AVR, но вместо периферийных устройств, которые располагаются по адресам SRAM от 0x0060 до 0x01FF, находится специальный интерфейс к виртуальным функциям (в том числе функциям Windows API). И тут очень важно сразу уяснить: код для Nanonyam не должен иметь никаких обращений к указанному диапазону памяти, чтобы случайно не вызвать, например, функцию удаления файлов или форматирования диска. Остальной диапазон памяти SRAM от 0x0200 до 0xFFFF (это больше, чем в реальном микроконтроллере) доступен пользователю для любых целей. Сразу отмечу, что имеется специальная защита от случайного запуска прошивки реального микроконтроллера (или прошивки от другой архитектуры): прежде, чем активировать «опасные» функции, нужно вызвать специальную хитрую виртуальную функцию. Есть и некоторые другие элементы защиты.
Per creare programmi per Nanonyam, è necessario utilizzare librerie speciali, in cui sono implementate tutte le funzioni virtuali disponibili al momento. Scaricare la macchina virtuale di Nanonyam e le relative librerie. . Ecco . E sì, il mio sito è molto primitivo e non è adattato per dispositivi mobili.
Il programma Nanonyam è gratuito per uso domestico e commerciale. Il programma Nanonyam è fornito "così com'è". Il codice sorgente non è fornito.
Attualmente, il programma è in fase di test. Sono implementate circa 200 funzioni virtuali, che permettono di creare semplici programmi per Windows.
È evidente che non è possibile creare nulla di complesso in una tale macchina virtuale, poiché la memoria per il codice è di soli 256 kB. I dati possono essere archiviati in file separati, il buffer per la parte grafica è implementato esternamente. Tutte le funzioni sono semplificate e adattate per un'architettura a 8 bit.
Cosa si può fare in Nanonyam? Ho pensato a diversi compiti.
Elaborazione dei blocchi di programma
Una volta avevo bisogno di sviluppare un menu complesso per un display grafico 128×64 pixel. Non volevo costantemente caricare il firmware nel microcontrollore reale per vedere come apparivano i pixel. Così è nata l'idea di Nanonyam. Nell'immagine qui sotto, si vede un'immagine da un vero display OLED di una delle voci di quel menu. Ora posso lavorarci senza un dispositivo reale.

Nanonyam (nella sua concezione finale) è uno strumento utile per lavorare sui blocchi di programma per microcontrollori, poiché offre funzioni per la grafica (può simulare display e indicatori), per la gestione dei file (può creare log, leggere dati di test), per la tastiera (può rilevare fino a 10 pulsanti contemporaneamente) e per le porte COM (qui c'è un punto separato).
Creazione di programmi rapidi
Ad esempio, se hai bisogno di elaborare rapidamente 100500 file di testo. Ogni file deve essere aperto, modificato leggermente con un algoritmo semplice, salvato e chiuso. Se sei un esperto di Python, congratulazioni, sei a posto. Ma se sei un incallito utilizzatore di Arduino (e ce ne sono molti), allora Nanonyam ti aiuterà a risolvere questo problema. Questo è anche il mio secondo obiettivo con Nanonyam: aggiungere molte funzioni utili come l'elaborazione del testo, la creazione di screenshot o la simulazione della pressione dei tasti nel sistema (tutte queste funzionalità sono già disponibili), oltre a molte altre per gestire compiti di routine.
Testing dell'hardware tramite porta COM
Nanonyam può funzionare come un terminale che opera secondo il tuo algoritmo. Puoi disegnare un piccolo menu per controllare il dispositivo e visualizzare i dati ricevuti dalla porta. È possibile salvare e leggere dati da file per l'analisi. È uno strumento comodo per un debugging semplice e la calibrazione dell'hardware, nonché per la creazione di semplici pannelli di controllo virtuali. Questo progetto può essere molto utile per studenti e giovani ricercatori.
Formazione alla programmazione
In ogni caso, come in tutto il progetto Arduino, l'utilità principale di Nanonyam risiede nella semplicità delle funzioni, dell'interfaccia e del caricatore. Perciò, questo progetto dovrebbe risultare interessante per i programmatori principianti e per chi è soddisfatto del livello Arduino. A proposito, io stesso non ho ancora studiato Arduino in dettaglio, dato che ho sempre utilizzato WinAVR o AVR Studio, e ho iniziato con l'assembly. Pertanto, l'esempio di programma qui sotto sarà un po' impreciso, ma funzionante.
Ciao, Habr!
È tempo di scoprire alcune funzioni di Nanonyam e di scrivere un semplice programma. Scriveremo in Arduino, ma non come di consueto, bensì come so fare al momento (ho già detto che non ho ancora una buona padronanza di questo ambiente). Iniziamo creando un nuovo sketch e selezionando la scheda Mega2560.

Salviamo lo sketch in un file e copiamo accanto . Sarebbe corretto includere gli header delle librerie, ma non so come impostare la compilazione di file separati in Arduino, quindi per ora includiamo le librerie direttamente (e tutte insieme):
#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 più corretto creare un modulo speciale "Nanonyam per Arduino", che può essere installato direttamente da Arduino. Non appena ci riuscirò, lo farò, ma per ora mostro solo il concetto di lavoro con la macchina virtuale. Scriviamo il codice seguente:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}Sketch con questo programma . Una descrizione dettagliata delle funzioni . Spero che i commenti in questo codice siano sufficienti per capire il concetto. Qui la funzione sys_Nanonyam() svolge il ruolo di "password" per la macchina virtuale, che rimuove le restrizioni sulle funzioni virtuali. Senza questa funzione, il programma si chiuderà dopo 3 secondi di esecuzione.
Clicchiamo il pulsante "Controlla" e non dovrebbero esserci errori.

Ora dobbiamo ottenere il file binario (firmware). Scegliamo il menu "Sketch>>Esporta file binario (CTRL+ALT+S)«.

In questo modo, verranno copiati due file HEX nella cartella dello sketch. Prendiamo solo il file senza il prefisso "with_bootloader.mega".
Ci sono diversi modi per specificare il file HEX alla macchina virtuale Nanonyam, tutti descritti . Propongo di creare accanto al file Nanonyam.exe file Nanonyam.path, in cui scrivere il percorso completo fino al nostro file HEX. Dopo di che, possiamo avviare Nanonyam.exe. Otteniamo una finestra con la nostra scritta.

Allo stesso modo, è possibile creare programmi in altri ambienti, ad esempio in AVR Studio o WinAVR.
Con questo concludiamo la nostra introduzione a Nanonyam. L'idea principale dovrebbe essere chiara. . Se ci sarà abbastanza interesse per utilizzare questo progetto, creerò più esempi e continuerò a «riempire» le librerie di funzioni virtuali. Sono benvenute idee concrete per lo sviluppo del progetto e segnalazioni di difetti, bug e imprecisioni. Si prega di inviarle ai contatti . La discussione è benvenuta nei commenti.
Grazie a tutti per l'attenzione e buon lavoro di programmazione!
Fonte: habr.com
