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

Für die, die in Arduino-Begriffen denken, kann man sagen, dass Nanonyam ein virtueller Arduino-Shield zur Steuerung von Windows ist.
Anders gesagt, Nanonyam ist eine virtuelle Maschine, in der der Byte-Code mit Firmware für Mikrocontroller AVR (empfohlen ATMEGA2560) verwendet wird. Innerhalb dieser virtuellen Maschine befindet sich ein Kern-Simulator für AVR, aber anstelle der Peripheriegeräte, die sich im SRAM-Bereich von 0x0060 bis 0x01FF befinden, gibt es eine spezielle Schnittstelle zu virtuellen Funktionen (einschließlich der Funktionen des Windows API). Hier ist es sehr wichtig zu verstehen: Der Code für Nanonyam darf keine Zugriffe auf den angegebenen Speicherbereich haben, um nicht versehentlich eine Funktion wie das Löschen von Dateien oder die Formatierung der Festplatte auszulösen. Der restliche Speicherbereich im SRAM von 0x0200 bis 0xFFFF (das ist mehr als bei einem echten Mikrocontroller) steht dem Benutzer für beliebige Zwecke zur Verfügung. Ich möchte gleich 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 können, 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 und die dazugehörigen Bibliotheken herunter. kodiert. Und in diesem Fall Und ja, meine Website ist sehr primitiv und nicht für mobile Geräte optimiert.
Das Programm Nanonyam ist kostenlos für den privaten und kommerziellen Gebrauch. Das Programm Nanonyam wird unter der Bedingung "wie es ist" bereitgestellt. Der Quellcode wird nicht zur Verfügung gestellt.
Im Moment befindet sich das Programm in der Testphase. Etwa 200 virtuelle Funktionen wurden implementiert, die es ermöglichen, einfache Programme für Windows zu erstellen.
Offensichtlich ist es nicht möglich, in einer solchen virtuellen Maschine etwas Komplexes zu erstellen, da nur 256 kB für den Code zur Verfügung stehen. Daten können in separaten Dateien gespeichert werden, der Puffer für den grafischen Teil ist extern implementiert. Alle Funktionen sind vereinfacht und an die 8-Bit-Architektur angepasst.
Was kann man in Nanonyam machen? Ich habe mir einige Aufgaben überlegt.
Bearbeitung von Softwareblöcken
Eines Tages musste ich ein komplexes Menü für ein grafisches Display mit 128×64 Punkten entwickeln. Ich wollte die Firmware nicht ständig auf den echten Mikrocontroller laden, um zu sehen, wie die Pixel aussehen. So entstand die Idee von Nanonyam. Im Bild unten ist eine Darstellung von einem echten OLED-Display eines der Punkte dieses Menüs. Jetzt kann ich es ohne das echte Gerät ausarbeiten.

Nanonyam (in seiner endgültigen Form) ist ein gutes Werkzeug zur Bearbeitung von Softwareblöcken für Mikrocontroller, da es Funktionen zur Arbeit mit Grafiken (Display- und Anzeigeemulation), mit Dateien (Protokollierung, Testdatenlesung), mit Tastaturen (gleichzeitiges Lesen von bis zu 10 Tasten) und mit COM-Ports gibt (hier ein separater Punkt).
Erstellung schneller Programme
Zum Beispiel müssen Sie schnell 100500 Textdateien verarbeiten. Jede muss geöffnet, nach einem einfachen Algorithmus geändert, gespeichert und geschlossen werden. Wenn Sie ein Python-Meister sind, 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. Das ist mein zweites Ziel mit Nanonyam: zahlreiche nützliche Funktionen hinzuzufügen, wie Textverarbeitung, Screenshots erstellen oder das Simulieren von Tasteneingaben im System (das alles ist übrigens bereits vorhanden), sowie viele andere Funktionen zur Lösung alltäglicher Aufgaben.
Testen von Hardware über den COM-Port
Nanonyam kann als Terminal fungieren, das nach Ihrem Algorithmus arbeitet. Man kann ein kleines Menü zur Steuerung des Geräts zeichnen und Daten anzeigen, die über den Port empfangen werden. Es ist möglich, Daten aus Dateien zum Analysieren zu speichern und zu lesen. Ein nützliches Werkzeug zur unkomplizierten Fehlersuche und Kalibrierung von Hardware sowie zur Erstellung einfacher virtueller Bedienfelder für das Gerät. Für Studenten und junge Wissenschaftler kann dieses Projekt sehr hilfreich sein.
Programmieren lernen
Wie bei allem im Arduino-Projekt besteht der Hauptnutzen von Nanonyam in der Einfachheit der Funktionen, der Benutzeroberfläche und des Bootloaders. Daher sollte dieses Projekt für Programmieranfänger interessant sein und für die, die mit dem Niveau von Arduino zufrieden sind. Übrigens habe ich Arduino selbst noch nicht im Detail gelernt, da ich immer WinAVR oder AVR Studio verwendet habe und mit Assembler begonnen habe. Daher wird das folgende Beispiel für das Programm etwas ungenau, aber durchaus funktionsfähig sein.
Hallo, Habr!
Es ist Zeit, einige Funktionen von Nanonyam kennenzulernen und ein einfaches Programm zu schreiben. Wir werden in Arduino programmieren, aber nicht so, wie es üblich ist, sondern so, wie ich es gerade kann (ich habe bereits erwähnt, dass ich mich mit dieser Umgebung noch nicht sehr gut auskenne). Zunächst erstellen wir ein neues Sketch und wählen das Board Mega2560 aus.

Wir speichern das Sketch in einer Datei und kopieren daneben . Es wäre richtig, die Header der Bibliotheken einzufügen, 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 noch besser, ein spezielles Modul „Nanonyam für Arduino“ zu erstellen, das man direkt aus Arduino installieren kann. Sobald ich das geklärt habe, mache ich das; bisher zeige ich einfach die Funktionsweise mit der virtuellen Maschine. 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);//Задержка и разгрузка процессора
}Das Sketch mit diesem Programm . Eine detaillierte Beschreibung der Funktionen . Ich hoffe, die Kommentare in diesem Code reichen aus, um das Wesentliche zu verstehen. Hier spielt die Funktion sys_Nanonyam() die Rolle eines „Passworts“ für die virtuelle Maschine, die die Einschränkungen der virtuellen Funktionen aufhebt. Ohne diese Funktion wird das Programm nach 3 Sekunden ausgeführt.
Wir drücken die Taste „Überprüfen“ und es sollten keine Fehler auftreten.

Jetzt muss ich 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, der virtuellen Maschine Nanonyam die HEX-Datei anzugeben, die alle beschrieben sind . Ich schlage vor, neben der Datei Nanonyam.exe Datei Nanonyam.path, in der der vollständige Pfad zu unserer HEX-Datei eingetragen wird. Danach kann man starten Nanonyam.exe. Wir erhalten ein Fenster mit unserer Aufschrift.

Ähnlich können Programme in anderen Umgebungen erstellt werden, zum Beispiel in AVR Studio oder WinAVR.
Hier beenden wir vorerst die Einführung in Nanonyam. Die Grundidee sollte klar sein. . Wenn genug Interessierte bereit sind, dieses Projekt zu nutzen, werde ich weitere Beispiele machen und weiterhin die Bibliotheken virtueller Funktionen „füllen“. Konkrete Ideen zur Weiterentwicklung des Projekts sowie Berichte über Störungen, Bugs und Fehler sind willkommen. Es wäre wünschenswert, sie über die Kontakte zu senden, Die Diskussion ist in den Kommentaren willkommen.
Vielen Dank für Ihre Aufmerksamkeit und viel Erfolg beim Programmieren!
Quelle: habr.com
