
Op een dag kwam ik met een bizarre idee om . Ik heb er veel tijd aan besteed en het gedaan. Het was spectaculair en nutteloos, maar ik vond het leuk. Zes maanden geleden kreeg ik weer een andere bizarre idee. Dit keer was het helemaal niet spectaculair, maar veel nuttiger. Ook hier heb ik veel tijd aan besteed. In dit artikel presenteer ik de bètaversie van mijn tweede bizarre idee.
Ik noemde het project Nanonyam en heb zelfs een logo hiervoor ontworpen (het heeft me in totaal 5 minuten gekost).

Voor degenen die denken in termen van Arduino, kun je zeggen dat Nanonyam een virtueel Arduino-shield is voor het besturen van Windows.
Met andere woorden, Nanonyam is een virtuele machine waarin de firmware voor de AVR microcontroller (het wordt aangeraden om ATMEGA2560 te gebruiken) als bytecode wordt gebruikt. Binnen deze virtuele machine bevindt zich een simulator van de AVR-kern, maar in plaats van perifere apparaten die zich op de SRAM-adressen van 0x0060 tot 0x01FF bevinden, is er een speciale interface voor de virtuele functies (inclusief Windows API-functies). Het is zeer belangrijk om onmiddellijk te begrijpen: de code voor Nanonyam mag geen verwijzingen naar het opgegeven geheugengebied bevatten, om te voorkomen dat bijvoorbeeld een functie voor het verwijderen van bestanden of het formatteren van een schijf per ongeluk wordt aangeroepen. Het overige geheugengebied van SRAM van 0x0200 tot 0xFFFF (dit is meer dan in een echte microcontroller) is beschikbaar voor de gebruiker voor elk doel. Ik moet opmerken dat er een speciale bescherming is tegen het per ongeluk starten van de firmware van een echte microcontroller (of firmware van een andere architectuur): voordat je 'gevaarlijke' functies activeert, moet je een speciale slimme virtuele functie aanroepen. Er zijn ook enkele andere beveiligingselementen.
Om programma's voor Nanonyam te maken, moet je speciale bibliotheken gebruiken waarin alle momenteel beschikbare virtuele functies zijn geïmplementeerd. Je kunt de virtuele machine Nanonyam en de bibliotheken hiervoor Maar een . En ja, mijn website is erg primitief en niet geoptimaliseerd voor mobiele apparaten.
Het programma Nanonyam is gratis voor thuis- en commercieel gebruik. Het programma Nanonyam wordt aangeboden 'zoals het is'. De broncode wordt niet verstrekt.
Op dit moment bevindt het programma zich in de testfase. Ongeveer 200 virtuele functies zijn geïmplementeerd, waarmee eenvoudige programma's voor Windows kunnen worden gemaakt.
Het is duidelijk dat het niet mogelijk is om iets complex in zo'n virtuele machine te creëren, aangezien er slechts 256 KB geheugen beschikbaar is voor de code. Gegevens kunnen in afzonderlijke bestanden worden opgeslagen, terwijl de buffer voor de grafische gedeelte extern is geïmplementeerd. Alle functies zijn vereenvoudigd en aangepast voor een 8-bits architectuur.
Wat kun je doen in Nanonyam? Ik heb een paar taken bedacht.
Het uitwerken van programmablokken
Op een dag had ik een complex menu te ontwikkelen voor een grafische weergave van 128×64 pixels. Ik wilde de firmware niet steeds naar de echte microcontroller uploaden om te zien hoe de pixels eruitzagen. Zo is het idee van Nanonyam geboren. Hieronder is een afbeelding van een echt OLED-display van een van de menu-items. Nu kan ik het uitwerken zonder echt apparaat.

Nanonyam (in zijn uiteindelijke concept) is een goed instrument voor het uitwerken van programmablokken voor microcontrollers, omdat er functies zijn voor grafische verwerking (je kunt displays en indicatoren simuleren), voor bestanden (je kunt logs maken, testgegevens uitlezen), voor toetsenborden (je kunt tot 10 knoppen tegelijkertijd uitlezen), en voor COM-poorten (hier is een apart punt voor).
Het creëren van snelle programma's
Bijvoorbeeld, je moet snel 100500 tekstbestanden verwerken. Elk bestand moet worden geopend, een beetje gewijzigd volgens een eenvoudig algoritme, opgeslagen en gesloten. Als je een Python-master bent, gefeliciteerd, je hebt alles wat je nodig hebt. Maar als je een doorgewinterde Arduinokeyner bent (en dat zijn er velen), zal Nanonyam je helpen om deze taak op te lossen. Dit is precies mijn tweede doel in Nanonyam: een aantal nuttige functies toevoegen zoals tekstverwerking, screenshots maken of het simuleren van toetsindrukken in het systeem (dit is trouwens allemaal al beschikbaar), evenals verschillende andere functies voor het oplossen van routinetaken.
Hardware testen via de COM-poort
Nanonyam kan optreden als een terminal die naar uw algoritme werkt. U kunt een eenvoudig menu tekenen om het apparaat te besturen en gegevens te tonen die uit de poort worden verkregen. Gegevens kunnen worden opgeslagen en gelezen uit bestanden voor analyse. Een handig hulpmiddel voor eenvoudige debugging en calibratie van hardware, evenals voor het maken van eenvoudige virtuele bedieningspanelen voor apparaten. Voor studenten en jonge wetenschappers kan dit project zeer nuttig zijn.
Programmeren leren
Toch, net als in het hele Arduino-project, ligt de belangrijkste nuttigheid van Nanonyam in de eenvoud van de functies, interface en bootloader. Daarom moet dit project interessant zijn voor novice programmeurs en degenen die tevreden zijn met het niveau van Arduino. Trouwens, ik heb Arduino zelf nog steeds niet diep bestudeerd, omdat ik altijd WinAVR of AVR Studio heb gebruikt en begonnen ben met assembler. Daarom zal het voorbeeldprogramma hieronder een beetje onnauwkeurig zijn, maar goed werkend.
Hallo, Habr!
Het is tijd om kennis te maken met een paar functies van Nanonyam en een eenvoudig programma te schrijven. We zullen schrijven in Arduino, maar niet op de gebruikelijke manier, maar op de manier die ik nu kan (ik heb al gezegd dat ik nog niet zo goed bekend ben met deze omgeving). Laten we beginnen met het creëren van een nieuwe sketch en kiezen voor het bord Mega2560.

Sla de sketch op in een bestand en kopieer deze ernaast . Het zou correct zijn om de bibliotheekheaders op te nemen, maar ik weet niet hoe ik in Arduino de compilatie van afzonderlijke bestanden moet aangeven, dus laten we voorlopig de bibliotheken rechtstreeks (en allemaal tegelijk) toevoegen:
#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"Het zou nog beter zijn om een speciale module “Nanonyam voor Arduino” te maken, die rechtstreeks vanuit Arduino kan worden geïnstalleerd. Zodra ik hiervan meer begrijp, zal ik dat doen, maar voor nu laat ik gewoon de essentie van het werken met de virtuele machine zien. Schrijf deze 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);//Задержка и разгрузка процессора
}De sketch met dit programma . Voor gedetailleerde beschrijvingen van de functies . Ik hoop dat de opmerkingen in deze code voldoende zijn om de essentie te begrijpen. Hier speelt de functie sys_Nanonyam() de rol van een "wachtwoord" voor de virtuele machine, dat de beperkingen op virtuele functies opheft. Zonder deze functie sluit het programma na 3 seconden af.
Druk op de knop “Controleren” en er mogen geen fouten zijn.

Nu moeten we het binaire bestand (firmware) verkrijgen. Kies het menu “Sketch>>Exporteer binaire bestand (CTRL+ALT+S)«.

Tijdens dit proces worden er twee HEX-bestanden naar de map met de sketch gekopieerd. We only take the file without the prefix "with_bootloader.mega."
There are several ways to specify a HEX file to the Nanonyam virtual machine, all of them described . I suggest creating a file next to Nanonyam.exe bestand Nanonyam.path, in which to write the full path to our HEX file. After that, it can be launched Nanonyam.exe. We receive a window with our inscription.

Similarly, programs can be created in other environments, such as AVR Studio or WinAVR.
For now, we will finish our introduction to Nanonyam. The main idea should be clear. . If there are enough interested parties to use this project, I will create more examples and continue to "fill" the libraries of virtual functions. Concrete ideas for the project's development and reports on malfunctions, bugs, and quirks are welcome. It is desirable to send them through the contacts . Discussion is welcome in the comments.
Thank you all for your attention and happy programming!
Bron: habr.com
