Op een dag had ik het gekke idee om mee te nemen
Ik noemde het project Nanonyam (Nanonyam) en bedacht er zelfs een logo voor (ik tekende 5 minuten).
Voor degenen die in termen van Arduino denken, kunnen we zeggen dat Nannyam een virtueel Arduino-schild is voor het besturen van Windows.
Met andere woorden, Nannyam is een virtuele machine die de firmware voor de AVR-microcontroller (ATMEGA2560 wordt aanbevolen) als bytecode gebruikt. Binnen deze virtuele machine bevindt zich een AVR-kernsimulator, maar in plaats van randapparatuur, die zich op SRAM-adressen van 0x0060 tot 0x01FF bevindt, is er een speciale interface voor virtuele functies (inclusief Windows API-functies). En hier is het heel belangrijk om meteen te begrijpen: de code voor Nannyam mag geen toegang hebben tot het opgegeven geheugenbereik, om bijvoorbeeld niet per ongeluk de functie van het verwijderen van bestanden of het formatteren van een schijf aan te roepen. De rest van het SRAM-geheugenbereik van 0x0200 tot 0xFFFF (dit is meer dan in een echte microcontroller) is voor elk doel beschikbaar voor de gebruiker. Ik merk meteen op 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 lastige virtuele functie aanroepen. Er zijn ook enkele andere beveiligingsfuncties.
Om programma's voor Nannyam te maken, moet u speciale bibliotheken gebruiken die alle momenteel beschikbare virtuele functies implementeren. Download de Nanonyam virtuele machine en bibliotheken ervoor
Nanonyam is gratis voor thuisgebruik en commercieel gebruik. Het Nanonyam-programma wordt geleverd op een "as is"-basis. Broncode wordt niet verstrekt.
Het programma bevindt zich momenteel in de testfase. Ongeveer 200 virtuele functies geïmplementeerd waarmee u eenvoudige programma's voor Windows kunt maken.
Het is duidelijk dat het maken van iets ingewikkelds in zo'n virtuele machine niet zal werken, aangezien het geheugen voor de code slechts 256 kB is. Gegevens kunnen in aparte bestanden worden opgeslagen, de buffer voor het grafische gedeelte is extern geïmplementeerd. Alle functies zijn vereenvoudigd en aangepast voor 8-bits architectuur.
Wat kun je doen in Nanonyam? Ik kwam met een paar problemen.
Ontwikkeling van programmablokken
Ik moest ooit een complex menu ontwerpen voor een grafische weergave van 128 x 64 punten. Ik wilde echt niet constant de firmware in een echte microcontroller laden om te zien hoe de pixels eruit zien. En zo werd het idee van Nanonyam geboren. De onderstaande afbeelding toont een afbeelding van een echt OLED-scherm van een van de items in hetzelfde menu. Nu kan ik er doorheen werken zonder een echt apparaat.
Nanonyam (in zijn uiteindelijke idee) is een goed hulpmiddel voor het uitwerken van programmablokken voor microcontrollers, aangezien er functies zijn voor het werken met afbeeldingen (u kunt displays en indicatoren simuleren), met bestanden (u kunt logs maken, testgegevens lezen), met een toetsenbord (u kunt tot 10 knoppen tegelijkertijd lezen), met COM-poorten (hier is een apart item).
Snelle programma's maken
U moet bijvoorbeeld snel 100500 tekstbestanden verwerken. Elk moet worden geopend, enigszins aangepast volgens een eenvoudig algoritme, opgeslagen en gesloten. Als je een Python-meester bent, dan feliciteer ik je, je hebt alles. Maar als je een doorgewinterde arduino bent (en dat zijn er veel), dan zal Nannyam je helpen dit probleem op te lossen. Dit is mijn tweede doel in Nannyam: veel handige functies toevoegen, zoals tekstverwerking, het maken van schermafbeeldingen of het simuleren van toetsaanslagen in het systeem (die er trouwens allemaal al zijn), evenals vele andere functies voor het oplossen van routinetaken .
Hardware testen via COM-poort
Nanonyam kan fungeren als een terminal die werkt volgens jouw algoritme. U kunt een klein menu tekenen om het apparaat te bedienen en de ontvangen gegevens van de poort weer te geven. U kunt gegevens uit bestanden opslaan en lezen voor analyse. Een handig hulpmiddel voor eenvoudig debuggen en kalibreren van hardware, maar ook voor het maken van eenvoudige virtuele instrumentbedieningspanelen. Voor studenten en jonge wetenschappers kan dit project erg nuttig zijn.
Programmeer opleiding
Net als bij het hele Arduino-project ligt het belangrijkste nut van Nannyam echter in de vereenvoudiging van functies, interface en bootloader. Daarom zou dit project interessant moeten zijn voor beginnende programmeurs en degenen die tevreden zijn met het niveau van Arduino. Overigens heb ik zelf arduino nog niet tot in detail bestudeerd, omdat ik altijd WinAVR of AVR Studio gebruikte, maar ben begonnen met assembler. Daarom zal het onderstaande voorbeeldprogramma een beetje verkeerd zijn, maar behoorlijk werken.
Hallo Habr!
Het is tijd om vertrouwd te raken met enkele functies van Nanonyam en een eenvoudig programma te schrijven. We gaan in Arduino schrijven, maar niet op de gebruikelijke manier, maar zoals ik dat nu kan (ik heb al gezegd dat ik deze omgeving nog niet zo goed onder de knie heb). Maak eerst een nieuwe schets en selecteer het Mega2560-bord.
Sla de schets op in een bestand en kopieer vervolgens
#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 juister zijn om een speciale module "Nanonyam voor Arduino" te maken, die rechtstreeks vanuit Arduino kan worden geïnstalleerd. Zodra ik het doorheb, doe ik het, maar voor nu laat ik alleen de essentie zien van het werken met een virtuele machine. We schrijven de volgende 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);//Задержка и разгрузка процессора
}
Schets met dit programma
We drukken op de knop "Controleren" en er mogen geen fouten zijn.
Nu heb je een binair bestand (firmware) nodig. Kies de menukaart "Schets>>Binair bestand exporteren (CTRL+ALT+S)".
Hiermee worden twee HEX-bestanden naar de schetsmap gekopieerd. We nemen alleen het bestand zonder het voorvoegsel "with_bootloader.mega".
Er zijn verschillende manieren om een HEX-bestand naar de Nanonyam virtuele machine te specificeren, ze worden allemaal beschreven
Evenzo kunt u programma's maken in andere omgevingen, zoals AVR Studio of WinAVR.
Hier beëindigen we onze kennismaking met Nannyam. De hoofdgedachte moet duidelijk zijn.
Bedankt allemaal voor jullie aandacht en goede programmering!
Bron: www.habr.com