Vieną dieną man kilo beprotiška mintis atsinešti
Paskambinau į projektą Nanonyam (Nanonyam) ir net sugalvojau jam logotipą (piešiau 5 minutes).
Tiems, kurie galvoja apie Arduino, galime pasakyti, kad Nanonyam yra virtualus Arduino skydas, skirtas valdyti Windows.
Kitaip tariant, Nanonyam yra virtuali mašina, kuri kaip baitų kodą naudoja AVR mikrovaldiklio programinę-aparatinę įrangą (rekomenduojama ATMEGA2560). Šios virtualios mašinos viduje yra AVR branduolio treniruoklis, tačiau vietoj periferinių įrenginių, esančių SRAM adresais nuo 0x0060 iki 0x01FF, yra speciali sąsaja virtualioms funkcijoms (įskaitant Windows API funkcijas). Ir čia labai svarbu iš karto suprasti: Nanonyam kodas neturėtų turėti jokios prieigos prie nurodyto atminties diapazono, kad netyčia neiškviestų, pavyzdžiui, failų ištrynimo ar disko formatavimo funkcijos. Likusi SRAM atminties diapazonas nuo 0x0200 iki 0xFFFF (tai daugiau nei tikrame mikrovaldiklyje) yra prieinama vartotojui bet kokiam tikslui. Iš karto pažymiu, kad yra speciali apsauga nuo netyčinio tikro mikrovaldiklio programinės aparatinės įrangos (arba kitos architektūros programinės aparatinės įrangos) paleidimo: prieš suaktyvinant „pavojingas“ funkcijas, reikia iškviesti specialią sudėtingą virtualią funkciją. Taip pat yra keletas kitų saugos funkcijų.
Norėdami sukurti Nanonyam programas, turite naudoti specialias bibliotekas, kurios įgyvendina visas šiuo metu prieinamas virtualias funkcijas. Atsisiųskite „Nanonyam“ virtualią mašiną ir jai skirtas bibliotekas
Nanonyam yra nemokamas namų ir komerciniam naudojimui. Nanonyam programa teikiama tokia, kokia yra. Šaltinio kodas nepateiktas.
Šiuo metu programa yra testavimo etape. Įdiegta apie 200 virtualių funkcijų, kurios leidžia kurti paprastas programas, skirtas Windows.
Akivaizdu, kad tokioje virtualioje mašinoje sukurti kažką sudėtingo nepavyks, nes kodo atmintis yra tik 256 kB. Duomenys gali būti saugomi atskiruose failuose, buferis grafinei daliai realizuotas išoriškai. Visos funkcijos supaprastintos ir pritaikytos 8 bitų architektūrai.
Ką galima nuveikti Nanonyam? Aš sugalvojau keletą problemų.
Programų blokų kūrimas
Kartą man reikėjo sukurti sudėtingą meniu 128 x 64 taškų grafiniam ekranui. Tikrai nenorėjau nuolat įkelti programinės įrangos į tikrą mikrovaldiklį, kad pamatyčiau, kaip atrodo pikseliai. Taip gimė Nanonyam idėja. Žemiau esančiame paveikslėlyje parodytas vieno iš to paties meniu elementų vaizdas iš tikro OLED ekrano. Dabar galiu dirbti be tikro įrenginio.
Nanonyam (galutine idėja) yra geras įrankis mikrovaldiklių programų blokams kurti, nes yra funkcijų, skirtų darbui su grafika (galite imituoti ekranus ir indikatorius), su failais (galite kurti žurnalus, skaityti testo duomenis), su klaviatūra (vienu metu galite skaityti iki 10 mygtukų), su COM prievadais (čia yra atskiras elementas).
Greitųjų programų kūrimas
Pavyzdžiui, reikia greitai apdoroti 100500 tekstinių failų. Kiekvieną iš jų reikia atidaryti, šiek tiek modifikuoti pagal kokį nors paprastą algoritmą, išsaugoti ir uždaryti. Jei esate Python meistras, sveikinu jus, jūs turite viską. Bet jei esate užkietėjęs arduino (o jų yra daug), tada Nanonyam padės jums išspręsti šią problemą. Tai yra antrasis mano Nanonyam tikslas: pridėti daug naudingų funkcijų, tokių kaip teksto apdorojimas, ekrano kopijų darymas ar klavišų paspaudimų imitavimas sistemoje (beje, visos jos jau yra), taip pat daug kitų funkcijų, skirtų įprastoms užduotims spręsti. .
Aparatinės įrangos testavimas per COM prievadą
Nanonyam gali veikti kaip terminalas, veikiantis pagal jūsų algoritmą. Galite nupiešti nedidelį meniu, kad galėtumėte valdyti įrenginį ir rodyti duomenis, gautus iš prievado. Galite išsaugoti ir skaityti duomenis iš failų analizei. Patogus įrankis paprastam aparatinės įrangos derinimui ir kalibravimui, taip pat paprastų virtualių prietaisų valdymo pultų kūrimui. Studentams ir jauniesiems mokslininkams šis projektas gali būti labai naudingas.
Programavimo mokymai
Tačiau, kaip ir visame „Arduino“ projekte, pagrindinis „Nanonyam“ pranašumas yra funkcijų, sąsajos ir įkrovos įkroviklio supaprastinimas. Todėl šis projektas turėtų sudominti pradedančius programuotojus ir tuos, kurie yra patenkinti arduino lygiu. Beje, aš pats iki šiol detaliau arduino nestudijavau, nes visada naudojau WinAVR arba AVR Studio, bet pradėjau nuo assembler. Todėl žemiau pateikta pavyzdinė programa bus šiek tiek klaidinga, bet gana veikianti.
Sveiki, Habr!
Atėjo laikas susipažinti su kai kuriomis Nanonyam funkcijomis ir parašyti paprastą programą. Rašysime Arduino, bet ne įprastu būdu, o taip, kaip galiu dabar (jau sakiau, kad dar nelabai supratau šios aplinkos). Pirmiausia sukurkite naują eskizą ir pasirinkite „Mega2560“ plokštę.
Išsaugokite eskizą į failą ir nukopijuokite toliau
#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"
Dar teisingiau būtų pagaminti specialų modulį „Nanonyam for Arduino“, kurį būtų galima įdiegti tiesiai iš Arduino. Kai tik sugalvosiu, tai ir padarysiu, bet kol kas tik parodau darbo su virtualia mašina esmę. Rašome šį 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);//Задержка и разгрузка процессора
}
Eskizas su šia programa
Paspaudžiame mygtuką „Patikrinti“ ir klaidų neturėtų būti.
Dabar reikia gauti dvejetainį failą (firmware). Pasirinkite meniu "Eskizas>> Eksportuoti dvejetainį failą (CTRL+ALT+S)"
Tai nukopijuos du HEX failus į eskizo aplanką. Paimame tik failą be priešdėlio „with_bootloader.mega“.
Yra keletas būdų, kaip nurodyti HEX failą Nanonyam virtualioje mašinoje, visi jie aprašyti
Panašiai galite kurti programas ir kitose aplinkose, pvz., AVR Studio arba WinAVR.
Čia ir baigiame pažintį su Nanonyam. Pagrindinė mintis turėtų būti aiški.
Ačiū visiems už dėmesį ir gerą programavimą!
Šaltinis: www.habr.com