Isang araw nagkaroon ako ng baliw na ideya na dalhin
Tinawag ko ang proyektong Nanonyam (Nanonyam) at nakaisip pa ako ng logo para dito (nag-drawing ako ng 5 minuto).
Para sa mga nag-iisip sa mga tuntunin ng Arduino, maaari nating sabihin na ang Nanonyam ay isang virtual na Arduino shield para sa pagkontrol sa Windows.
Sa madaling salita, ang Nanonyam ay isang virtual machine na gumagamit ng firmware para sa AVR microcontroller (Inirerekomenda ang ATMEGA2560) bilang bytecode. Sa loob ng virtual machine na ito ay isang AVR core simulator, ngunit sa halip na mga peripheral, na matatagpuan sa mga address ng SRAM mula 0x0060 hanggang 0x01FF, mayroong isang espesyal na interface sa mga virtual na function (kabilang ang mga function ng Windows API). At narito napakahalaga na maunawaan kaagad: ang code para sa Nanonyam ay hindi dapat magkaroon ng anumang pag-access sa tinukoy na hanay ng memorya, upang hindi aksidenteng tumawag, halimbawa, ang pag-andar ng pagtanggal ng mga file o pag-format ng isang disk. Ang natitirang bahagi ng SRAM memory range mula 0x0200 hanggang 0xFFFF (ito ay higit pa sa isang tunay na microcontroller) ay magagamit ng user para sa anumang layunin. Napansin ko kaagad na mayroong isang espesyal na proteksyon laban sa hindi sinasadyang paglulunsad ng firmware ng isang tunay na microcontroller (o firmware mula sa isa pang arkitektura): bago i-activate ang "mapanganib" na mga function, kailangan mong tumawag sa isang espesyal na nakakalito na virtual function. Mayroong ilang iba pang mga tampok ng seguridad.
Upang lumikha ng mga programa para sa Nanonyam, kailangan mong gumamit ng mga espesyal na aklatan na nagpapatupad ng lahat ng kasalukuyang magagamit na virtual function. I-download ang Nanonyam virtual machine at mga aklatan para dito
Ang Nanonyam ay libre para sa bahay at komersyal na paggamit. Ang programang Nanonyam ay ibinibigay sa "as is" na batayan. Hindi ibinigay ang source code.
Ang programa ay kasalukuyang nasa yugto ng pagsubok. Ipinatupad ang tungkol sa 200 virtual function na nagbibigay-daan sa iyong lumikha ng mga simpleng program para sa Windows.
Malinaw, ang paglikha ng isang bagay na kumplikado sa tulad ng isang virtual na makina ay hindi gagana, dahil ang memorya para sa code ay 256 kB lamang. Ang data ay maaaring maimbak sa magkahiwalay na mga file, ang buffer para sa graphic na bahagi ay ipinatupad sa labas. Ang lahat ng mga function ay pinasimple at inangkop para sa 8-bit na arkitektura.
Ano ang maaari mong gawin sa Nanonyam? Nagkaroon ako ng ilang problema.
Pag-unlad ng mga bloke ng programa
Minsan ay kailangan kong magdisenyo ng isang kumplikadong menu para sa isang 128x64 tuldok na graphic na display. Talagang hindi ko nais na patuloy na i-load ang firmware sa isang tunay na microcontroller upang makita kung ano ang hitsura ng mga pixel. At kaya ang ideya ng Nanonyam ay ipinanganak. Ang figure sa ibaba ay nagpapakita ng isang imahe mula sa isang tunay na OLED display ng isa sa mga item sa parehong menu. Ngayon ay magagawa ko na ito nang walang tunay na device.
Ang Nanonyam (sa huling ideya nito) ay isang mahusay na tool para sa pag-eehersisyo ng mga bloke ng programa para sa mga microcontroller, dahil may mga function para sa pagtatrabaho sa mga graphics (maaari mong gayahin ang mga display at indicator), na may mga file (maaari kang gumawa ng mga log, basahin ang data ng pagsubok), na may isang keyboard (maaari kang magbasa ng hanggang sa 10 mga pindutan sa parehong oras), na may mga COM port (narito ang isang hiwalay na item).
Paglikha ng Mga Mabilisang Programa
Halimbawa, kailangan mong mabilis na magproseso ng 100500 text file. Ang bawat isa ay kailangang buksan, bahagyang binago ayon sa ilang simpleng algorithm, i-save at isara. Kung ikaw ay isang Python master, pagkatapos ay binabati kita, nasa iyo ang lahat. Ngunit kung ikaw ay isang hardened arduino (at marami sa kanila), pagkatapos ay tutulungan ka ng Nanonyam sa paglutas ng problemang ito. Ito ang aking pangalawang layunin sa Nanonyam: upang magdagdag ng maraming kapaki-pakinabang na mga function tulad ng pagpoproseso ng teksto, pagkuha ng mga screenshot o pagtulad sa mga keystroke sa system (na lahat, sa pamamagitan ng paraan, ay naroroon na), pati na rin ang maraming iba pang mga pag-andar para sa paglutas ng mga nakagawiang gawain .
Pagsubok ng hardware sa pamamagitan ng COM port
Ang Nanonyam ay maaaring kumilos bilang isang terminal na gumagana ayon sa iyong algorithm. Maaari kang gumuhit ng maliit na menu upang kontrolin ang device at ipakita ang data na natanggap mula sa port. Maaari mong i-save at basahin ang data mula sa mga file para sa pagsusuri. Isang madaling gamiting tool para sa simpleng pag-debug at pag-calibrate ng hardware, pati na rin para sa paglikha ng mga simpleng virtual na control panel ng instrumento. Para sa mga mag-aaral at mga batang siyentipiko, ang proyektong ito ay maaaring maging lubhang kapaki-pakinabang.
Pagsasanay sa programming
Gayunpaman, tulad ng sa buong proyekto ng Arduino, ang pangunahing pagiging kapaki-pakinabang ng Nanonyam ay nakasalalay sa pagpapasimple ng mga function, interface at bootloader. Samakatuwid, ang proyektong ito ay dapat na interesado sa mga baguhan na programmer at sa mga nasiyahan sa antas ng arduino. Sa pamamagitan ng paraan, ako mismo ay hindi pa rin nag-aral ng arduino nang detalyado, dahil palagi akong gumagamit ng WinAVR o AVR Studio, ngunit nagsimula sa assembler. Samakatuwid, ang halimbawang programa sa ibaba ay medyo mali, ngunit medyo gumagana.
Hello Habr!
Oras na para maging pamilyar sa ilang feature ng Nanonyam at magsulat ng isang simpleng programa. Magsusulat kami sa Arduino, ngunit hindi sa karaniwang paraan, ngunit sa paraang magagawa ko ngayon (nasabi ko na na hindi ko pa naiisip nang mabuti ang kapaligiran na ito). Una, gumawa ng bagong sketch at piliin ang Mega2560 board.
I-save ang sketch sa isang file at susunod na kopyahin
#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"
Mas magiging tama kung gumawa ng isang espesyal na module na "Nanonyam para sa Arduino", na maaaring direktang mai-install mula sa Arduino. Sa sandaling malaman ko ito, gagawin ko ito, ngunit sa ngayon ay ipinapakita ko lang ang kakanyahan ng pagtatrabaho sa isang virtual machine. Sinusulat namin ang sumusunod na 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);//ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° ΠΈ ΡΠ°Π·Π³ΡΡΠ·ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°
}
Mag-sketch gamit ang program na ito
Pinindot namin ang pindutang "Suriin" at hindi dapat magkaroon ng anumang mga error.
Ngayon ay kailangan mong kumuha ng binary file (firmware). Piliin ang menu "Sketch>>I-export ang binary file (CTRL+ALT+S)".
Kokopyahin nito ang dalawang HEX file sa sketch folder. Kinukuha lang namin ang file na walang prefix na "with_bootloader.mega".
Mayroong ilang mga paraan upang tukuyin ang isang HEX file sa Nanonyam virtual machine, lahat ng mga ito ay inilarawan
Katulad nito, maaari kang lumikha ng mga programa sa iba pang mga kapaligiran, tulad ng AVR Studio o WinAVR.
Dito namin tinapos ang aming pagkakakilala kay Nanonyam. Ang pangunahing ideya ay dapat na malinaw.
Salamat sa lahat para sa iyong pansin at mahusay na programming!
Pinagmulan: www.habr.com