Hur man skapar program för Windows i Arduino

Hur man skapar program för Windows i Arduino

En dag fick jag den galna idén att komma med 500 laserpekare på ett ställe. Jag tillbringade mycket tid och gjorde det. Det blev spektakulärt och värdelöst, men jag gillade det. För sex månader sedan fick jag en annan galen idé. Den här gången, inte alls spektakulär, men mycket mer användbar. Jag har också lagt ner mycket tid på det. Och i den här artikeln presenterar jag en betaversion av min andra galna idé.

Jag döpte projektet till Nanonyam (Nanonyam) och kom till och med på en logotyp för det (jag ritade i 5 minuter).

Hur man skapar program för Windows i Arduino

För de som tänker i termer av Arduino kan vi säga att Nanonyam är en virtuell Arduino-sköld för att styra Windows.

Med andra ord är Nanonyam en virtuell maskin som använder firmware för AVR-mikrokontrollern (ATMEGA2560 rekommenderas) som bytekod. Inuti denna virtuella maskin finns en AVR-kärnsimulator, men istället för kringutrustning, som finns på SRAM-adresser från 0x0060 till 0x01FF, finns det ett speciellt gränssnitt till virtuella funktioner (inklusive Windows API-funktioner). Och här är det mycket viktigt att förstå direkt: koden för Nanonyam ska inte ha någon tillgång till det angivna minnesintervallet, för att inte av misstag anropa till exempel funktionen att radera filer eller formatera en disk. Resten av SRAM-minnet från 0x0200 till 0xFFFF (detta är mer än i en riktig mikrokontroller) är tillgänglig för användaren för alla ändamål. Jag noterar direkt att det finns ett speciellt skydd mot oavsiktlig lansering av firmware från en riktig mikrokontroller (eller firmware från en annan arkitektur): innan du aktiverar "farliga" funktioner måste du anropa en speciell knepig virtuell funktion. Det finns några andra säkerhetsfunktioner också.

För att skapa program för Nanonyam måste du använda speciella bibliotek som implementerar alla för närvarande tillgängliga virtuella funktioner. Ladda ner den virtuella Nanonyam-maskinen och biblioteken för den Du kan sedan. Men sida för virtuell funktionsbeskrivning. Och ja, min sida är väldigt primitiv och inte anpassad för mobila enheter.

Nanonyam är gratis för hem och kommersiellt bruk. Nanonyam-programmet tillhandahålls på "i befintligt skick". Källkod tillhandahålls inte.

Programmet är för närvarande i testfasen. Implementerat ca 200 virtuella funktioner som låter dig skapa enkla program för Windows.
Uppenbarligen kommer det inte att fungera att skapa något komplicerat i en sådan virtuell maskin, eftersom minnet för koden bara är 256 kB. Data kan lagras i separata filer, bufferten för den grafiska delen implementeras externt. Alla funktioner är förenklade och anpassade för 8-bitars arkitektur.

Vad kan du göra i Nanonyam? Jag kom på några problem.

Utveckling av programblock

Jag behövde en gång designa en komplex meny för en grafisk display med 128x64 punkter. Jag ville verkligen inte hela tiden ladda in firmware i en riktig mikrokontroller för att se hur pixlarna ser ut. Och så föddes idén om Nanonyam. Bilden nedan visar en bild från en riktig OLED-skärm av ett av objekten på samma meny. Nu kan jag arbeta mig igenom det utan en riktig enhet.

Hur man skapar program för Windows i Arduino

Nanonyam (i sin slutliga idé) är ett bra verktyg för att arbeta fram programblock för mikrokontroller, eftersom det finns funktioner för att arbeta med grafik (du kan simulera displayer och indikatorer), med filer (du kan göra loggar, läsa testdata), med ett tangentbord (du kan läsa upp till 10 knappar samtidigt), med COM-portar (här är en separat post).

Skapa snabbprogram

Till exempel måste du snabbt bearbeta 100500 textfiler. Var och en måste öppnas, ändras något enligt någon enkel algoritm, sparas och stängas. Om du är en Python-mästare, så gratulerar jag dig, du har allt. Men om du är en härdad arduino (och det finns många av dem), så kommer Nanonyam att hjälpa dig att lösa detta problem. Detta är mitt andra mål i Nanonyam: att lägga till många användbara funktioner som textbearbetning, ta skärmdumpar eller simulera tangenttryckningar i systemet (som alla förresten redan finns där), samt många andra funktioner för att lösa rutinuppgifter .

Testar hårdvara via COM-port

Nanonyam kan fungera som en terminal som fungerar enligt din algoritm. Du kan rita en liten meny för att styra enheten och visa data som tas emot från porten. Du kan spara och läsa data från filer för analys. Ett praktiskt verktyg för enkel felsökning och kalibrering av hårdvara, samt för att skapa enkla virtuella instrumentkontrollpaneler. För studenter och unga forskare kan detta projekt vara mycket användbart.

Programmeringsträning

Men som med hela Arduino-projektet ligger Nanonyams främsta användbarhet i förenklingen av funktioner, gränssnitt och bootloader. Därför bör detta projekt vara av intresse för nybörjare programmerare och de som är nöjda med nivån på arduino. Själv har jag förresten fortfarande inte studerat arduino i detalj, eftersom jag alltid använde WinAVR eller AVR Studio, utan började med assembler. Därför kommer exempelprogrammet nedan att vara lite fel, men ganska fungerande.

Hej Habr!

Det är dags att bekanta sig med några Nanonyam-funktioner och skriva ett enkelt program. Vi kommer att skriva i Arduino, men inte på vanligt sätt, utan på det sätt jag kan nu (jag har redan sagt att jag inte har listat ut den här miljön så bra än). Skapa först en ny skiss och välj Mega2560-kortet.

Hur man skapar program för Windows i Arduino

Spara skissen till en fil och kopiera nästa Nanonyam bibliotek. Det skulle vara korrekt att inkludera rubrikerna för biblioteken, men jag vet inte hur man skriver kompilering av enskilda filer i Arduino, så för nu kommer vi bara att inkludera biblioteken direkt (och allt på en gång):

#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"

Det skulle vara ännu mer korrekt att göra en speciell modul "Nanonyam for Arduino", som kan installeras direkt från Arduino. Så fort jag kommer på det kommer jag att göra det, men för tillfället visar jag bara essensen av att arbeta med en virtuell maskin. Vi skriver följande kod:

//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}

Skissa med detta program kan laddas ner här. Detaljerad beskrivning av funktioner sök på sajten. Jag hoppas att kommentarerna i den här koden räcker för att förstå kärnan i det. Här funktion sys_Nanonyam() spelar rollen som ett "lösenord" för den virtuella maskinen, vilket tar bort restriktioner för virtuella funktioner. Utan denna funktion stängs programmet efter 3 sekunders drift.

Vi trycker på "Kontrollera"-knappen och det ska inte vara några fel.

Hur man skapar program för Windows i Arduino

Nu behöver du skaffa en binär fil (firmware). Välj menyn "Skiss >> Exportera binär fil (CTRL+ALT+S)".

Hur man skapar program för Windows i Arduino

Detta kommer att kopiera två HEX-filer till skissmappen. Vi tar bara filen utan prefixet "with_bootloader.mega".

Det finns flera sätt att specificera en HEX-fil till den virtuella Nanonyam-maskinen, alla beskrivs på den här sidan. Jag föreslår att du skapar bredvid filen Nanonyam.exe файл väg, för att registrera den fullständiga sökvägen till vår HEX-fil. Därefter kan du springa Nanonyam.exe. Vi får ett fönster med vår inskription.

Hur man skapar program för Windows i Arduino

På samma sätt kan du skapa program i andra miljöer, som AVR Studio eller WinAVR.

Det är här vi avslutar vår bekantskap med Nanonyam. Huvudtanken bör vara tydlig. Fler exempel finns på hemsidan.. Om det finns tillräckligt många som är villiga att använda det här projektet kommer jag att göra fler exempel och fortsätta att "fylla" de virtuella funktionsbiblioteken. Konkreta idéer för utvecklingen av projektet och rapporter om felfunktioner, buggar och buggar accepteras. Det är lämpligt att hänvisa dem till kontakter, anges på webbplatsen. Och diskussion är välkommen i kommentarerna.

Tack alla för er uppmärksamhet och bra programmering!

Källa: will.com

Lägg en kommentar