
Eines Tages kam mir die absurde Idee, Ich habe viel Zeit investiert und es geschafft. Es war spektakulär und nutzlos, aber es hat mir gefallen. Vor einem halben Jahr hatte ich eine weitere absurde Idee. Diesmal war sie zwar nicht spektakulär, aber viel nützlicher. Auch dafür habe ich viel Zeit gebraucht. In diesem Artikel präsentiere ich die Beta-Version meiner zweiten verrückten Idee.
Ich nannte das Projekt Nanonyam und habe sogar ein Logo dafür entworfen (es hat ganze 5 Minuten gedauert).

Für diejenigen, die in Arduino-Kategorien denken, kann man sagen, dass Nanonyam ein virtueller Arduino-Shield zur Steuerung von Windows ist.
Mit anderen Worten, Nanonyam ist eine virtuelle Maschine, die Firmware für den AVR-Mikrocontroller (wir empfehlen ATMEGA2560) als Bytecode verwendet. Innerhalb dieser virtuellen Maschine befindet sich ein Simulator des AVR-Kerns, jedoch anstelle von Peripheriegeräten, die im SRAM-Bereich von 0x0060 bis 0x01FF angeordnet sind, gibt es eine spezielle Schnittstelle zu virtuellen Funktionen (einschließlich Windows-API-Funktionen). Es ist sehr wichtig, dies sofort zu verstehen: Der Code für Nanonyam sollte keine Zugriffe auf den angegebenen Speicherbereich enthalten, um nicht versehentlich eine Funktion zum Löschen von Dateien oder zum Formatieren der Festplatte auszulösen. Der restliche SRAM-Speicherbereich von 0x0200 bis 0xFFFF (was mehr ist als in einem echten Mikrocontroller) steht dem Benutzer für beliebige Zwecke zur Verfügung. Ich möchte sofort darauf hinweisen, dass es einen speziellen Schutz gegen das versehentliche Ausführen der Firmware eines echten Mikrocontrollers (oder Firmware einer anderen Architektur) gibt: Bevor „gefährliche“ Funktionen aktiviert werden, muss eine spezielle raffinierte virtuelle Funktion aufgerufen werden. Es gibt auch einige andere Schutzelemente.
Um Programme für Nanonyam zu erstellen, müssen spezielle Bibliotheken verwendet werden, in denen alle derzeit verfügbaren virtuellen Funktionen implementiert sind. Laden Sie die virtuelle Maschine Nanonyam sowie die dazugehörigen Bibliotheken herunter. . Und hier ist . Und ja, meine Website ist sehr einfach gehalten und nicht für mobile Endgeräte optimiert.
Das Programm Nanonyam kann kostenlos für private und kommerzielle Nutzung verwendet werden. Das Programm Nanonyam wird unter der Bedingung „wie gesehen“ zur Verfügung gestellt. Der Quellcode wird nicht bereitgestellt.
Aktuell befindet sich das Programm in der Testphase. Ungefähr 200 virtuelle Funktionen sind implementiert, die es ermöglichen, einfache Programme für Windows zu erstellen.
Offensichtlich wird es nicht möglich sein, in einer solchen virtuellen Maschine etwas Komplexes zu erstellen, da nur 256 kB Speicher für den Code zur Verfügung stehen. Daten können in separaten Dateien gespeichert werden, und der Puffer für die grafische Komponente ist extern implementiert. Alle Funktionen sind vereinfacht und an eine 8-Bit-Architektur angepasst.
Was kann man also in Nanonyam machen? Ich habe mir einige Aufgaben überlegt.
Bearbeitung von Programmblöcken
Eines Tages musste ich ein komplexes Menü für ein Grafikdisplay mit 128×64 Pixeln entwickeln. Es war mir unangenehm, ständig die Firmware auf den echten Mikrocontroller zu laden, um zu sehen, wie die Pixel aussahen. So entstand die Idee für Nanonyam. Unten sehen Sie ein Bild von einem echten OLED-Display eines der Menüpunkte.

Nanonyam (in seiner endgültigen Konzeption) ist ein großartiges Werkzeug zur Entwicklung von Programmiermodulen für Mikrocontroller, da es Funktionen zur grafischen Verarbeitung bietet (man kann Displays und Indikatoren simulieren), zur Dateiverwaltung (man kann Protokolle erstellen, Testdaten lesen), zur Tastaturverwendung (man kann bis zu 10 Tasten gleichzeitig abfragen) und zu COM-Ports (hier gibt es einen speziellen Punkt).
Schnelle Programmierung erstellen
Nehmen wir an, Sie müssen schnell 100.500 Textdateien bearbeiten. Jede Datei muss geöffnet, nach einem einfachen Algorithmus bearbeitet, gespeichert und geschlossen werden. Wenn Sie ein Python-Profi sind, dann gratuliere ich Ihnen, Sie haben alles, was Sie brauchen. Aber wenn Sie ein eingefleischter Arduino-Enthusiast sind (und davon gibt es viele), wird Ihnen Nanonyam bei dieser Aufgabe helfen. Genau das ist mein zweites Ziel bei Nanonyam: eine Vielzahl nützlicher Funktionen hinzuzufügen, wie etwa die Textverarbeitung, das Erstellen von Screenshots oder das Simulieren von Tastenanschlägen im System (das ist übrigens alles bereits vorhanden), sowie viele weitere Funktionen, um Routineaufgaben zu lösen.
Testen von Hardware über COM-Port
Nanonyam kann als Terminal fungieren, das nach Ihrem Algorithmus arbeitet. Sie können ein einfaches Menü zur Steuerung des Geräts erstellen und die aus dem Port erhaltenen Daten anzeigen. Es ist möglich, Daten aus Dateien für die Analyse zu speichern und zu lesen. Ein praktisches Werkzeug für einfache Fehlersuche und Kalibrierung von Hardware sowie für die Erstellung einfacher virtueller Bedienfelder für Geräte. Für Studenten und junge Wissenschaftler kann dieses Projekt sehr nützlich sein.
Programmierung lernen
Wie bei allem im Arduino-Projekt liegt der Hauptnutzen von Nanonyam in der Einfachheit der Funktionen, der Benutzeroberfläche und des Bootloaders. Daher sollte dieses Projekt für Programmieranfänger und für diejenigen, die mit dem Arduino-Niveau zufrieden sind, von Interesse sein. Übrigens habe ich Arduino selbst noch nicht im Detail untersucht, da ich immer WinAVR oder AVR Studio verwendet habe und mit Assembler begonnen habe. Daher wird das Beispielprogramm unten etwas ungenau sein, aber dennoch voll funktionsfähig.
Hallo, Habr!
Es ist an der Zeit, einige Funktionen von Nanonyam kennenzulernen und ein einfaches Programm zu schreiben. Wir werden in Arduino programmieren, aber nicht auf die übliche Weise, sondern so, wie ich es derzeit kann (ich habe bereits erwähnt, dass ich mich mit dieser Umgebung noch nicht sehr gut auskenne). Zuerst erstellen wir ein neues Sketch und wählen das Board Mega2560.

Wir speichern das Sketch in einer Datei und kopieren daneben . Es wäre korrekt, die Header-Dateien der Bibliotheken einzuschließen, aber ich weiß nicht, wie man in Arduino die Kompilierung einzelner Dateien angibt. Daher werden wir die Bibliotheken vorerst direkt (und alle auf einmal) einfügen:
#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"Es wäre sogar besser, ein spezielles Modul "Nanonyam für Arduino" zu erstellen, das direkt aus Arduino installiert werden kann. Sobald ich das in Angriff nehme, werde ich es machen; bis dahin zeige ich einfach, wie man mit der virtuellen Maschine arbeitet. Wir schreiben folgenden Code:
//Сразу после запуска рисуем текст в окне
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 mit diesem Programm . Eine detaillierte Beschreibung der Funktionen . Ich hoffe, die Kommentare in diesem Code sind ausreichend, um das Wesentliche zu verstehen. Hier spielt die Funktion sys_Nanonyam() die Rolle eines "Passworts" für die virtuelle Maschine, das die Einschränkungen für die virtuellen Funktionen aufhebt. Ohne diese Funktion wird das Programm nach 3 Sekunden Laufzeit geschlossen.
Wir drücken die Schaltfläche "Überprüfen" und es sollte keine Fehlermeldungen geben.

Jetzt müssen wir die Binärdatei (Firmware) erhalten. Wählen Sie das Menü "Sketch>>Binärdatei exportieren (CTRL+ALT+S)«.

Dabei werden zwei HEX-Dateien in den Ordner mit dem Sketch kopiert. Wir nehmen nur die Datei ohne die Bezeichnung "with_bootloader.mega".
Es gibt mehrere Möglichkeiten, die HEX-Datei der virtuellen Maschine Nanonyam anzugeben; alle sind beschrieben . Ich schlage vor, neben der Datei Nanonyam.exe eine Datei Nanonyam.path, in der der vollständige Pfad zu unserer HEX-Datei angegeben wird, zu erstellen. Danach kann man starten Nanonyam.exe. Wir erhalten ein Fenster mit unserem Text.

Ähnlich können Programme in anderen Umgebungen erstellt werden, wie zum Beispiel in AVR Studio oder WinAVR.
An dieser Stelle beenden wir unser Kennenlernen mit Nanonyam. Die Grundidee sollte klar sein. . Wenn es genügend Interessierte gibt, diesen Projekt zu nutzen, werde ich mehr Beispiele erstellen und die Bibliotheken für virtuelle Funktionen weiter ausbauen. Konkrete Ideen zur Weiterentwicklung des Projekts sowie Berichte über Fehler, Bugs und Unstimmigkeiten sind willkommen. Bitte senden Sie diese an die Kontakte, . Diskussionen sind in den Kommentaren erwünscht.
Vielen Dank für Ihre Aufmerksamkeit und viel Erfolg beim Programmieren!
Quelle: habr.com
