Аднойчы мне ў галаву прыйшла вар'яцкая ідэя звесці
Праект я назваў Nanonyam (Наноням) і нават прыдумаў яму лагатып (маляваў цэлых 5 хвілін).
Для тых, хто думае тэрмінамі Arduino, можна сказаць, што Nanonyam гэта віртуальны ардуіна-шылд для кіравання Windows.
Іншымі словамі, Nanonyam гэта віртуальная машына, у якой у якасці байт-кода выкарыстоўваецца прашыўка для мікракантролера AVR (рэкамендуецца ATMEGA2560). Унутры гэтай віртуальнай машыны знаходзіцца сімулятар ядра AVR, але замест перыферыйных прылад, якія размяшчаюцца па адрасах SRAM ад 0x0060 да 0x01FF, знаходзіцца спецыяльны інтэрфейс да віртуальных функцый (у тым ліку функцый Windows API). І тут вельмі важна адразу ўразумець: код для Nanonyam не павінен мець ніякіх зваротаў да паказанага дыяпазону памяці, каб выпадкова не выклікаць, напрыклад, функцыю выдалення файлаў ці фарматавання дыска. Астатні дыяпазон памяці SRAM ад 0x0200 да 0xFFFF (гэта больш, чым у рэальным мікракантролеры) даступны карыстачу для любых мэт. Адразу адзначу, што маецца спецыяльная абарона ад выпадковага запуску прашыўкі рэальнага мікракантролера (або прашыўкі ад іншай архітэктуры): перш, чым актываваць "небяспечныя" функцыі, трэба выклікаць адмысловую хітрую віртуальную функцыю. Ёсць і некаторыя іншыя элементы абароны.
Каб ствараць праграмы для Nanonyam трэба выкарыстоўваць спецыяльныя бібліятэкі, у якіх рэалізаваны ўсе даступныя на дадзены момант віртуальныя функцыі. Спампаваць віртуальную машыну Nanonyam і бібліятэкі да яе
Праграма Nanonyam з'яўляецца бясплатнай для хатняга і камерцыйнага выкарыстання. Праграма Nanonyam прадастаўляецца на ўмовах "як ёсць". Зыходны код не прадастаўляецца.
На дадзены момант праграма знаходзіцца ў стадыі тэсціравання. Рэалізавана каля 200 віртуальных функцый, якія дазваляюць ствараць простыя праграмы для Windows.
Відавочна, што ствараць у такой віртуальнай машыне нешта складанае не атрымаецца, бо памяці для кода ўсяго толькі 256 кб. Дадзеныя можна захоўваць у асобных файлах, буфер для графічнай часткі рэалізаваны вонкава. Усе функцыі спрошчаны і адаптаваны для 8-бітнай архітэктуры.
Што ж можна зрабіць у Nanonyam? Я прыдумаў некалькі задач.
Адпрацоўка праграмных блокаў
Аднойчы мне трэба было распрацоўваць складанае меню для графічнага дысплея 128×64 кропкі. Вельмі не хацелася ўвесь час загружаць прашыўку ў рэальны мікракантролер, каб паглядзець, як выглядаюць пікселі. Так і нарадзілася ідэя Nanonyam. На малюнку ніжэй выява з рэальнага OLED-дысплея аднаго з пунктаў таго самага меню. Цяпер я магу прапрацоўваць яго без рэальнага прылады.
Nanonyam (у сваёй канчатковай задумцы) гэта добрая прылада для адпрацоўкі праграмных блокаў для мікракантролераў, бо ёсць функцыі працы з графікай (можна імітаваць дысплеі і індыкатары), з файламі (можна рабіць логі, счытваць тэставыя дадзеныя), з клавіятурай (можна счытваць да 10 кнопак адначасова), з COM-партамі (тут асобны пункт).
Стварэнне хуткіх праграм
Напрыклад, вам трэба па-хуценькаму апрацаваць 100500 тэкставых файлаў. Кожны трэба адкрыць, крыху змяніць па нейкім нескладаным алгарытме, захаваць і закрыць. Калі вы майстар Python, то я вас віншую, у вас усё ёсць. Але калі вы закаранелы ардуіншчык (а такіх нямала), то Nanonyam вам дапаможа ў рашэнні гэтай задачы. Менавіта гэта мая другая мэта ў Nanonyam: дадаць мноства карысных функцый тыпу апрацоўкі тэксту, стварэння скрыншотаў ці імітацыі націску клавіш у сістэме (гэта ўсё, дарэчы, ужо ёсць), а таксама мноства іншых функцый для рашэння руцінных задач.
Тэставанне жалязяк праз COM-порт
Nanonyam можа выступаць у ролі тэрмінала, які працуе па вашаму алгарытму. Можна намаляваць невялікае меню для кіравання прыладай і адлюстроўваць дадзеныя, якія атрымліваюцца з порта. Можна захоўваць і счытваць дадзеныя з файлаў для аналізу. Зручная прылада для нескладанай адладкі і каліброўкі жалязяк, а таксама для стварэння простых віртуальных панэляў кіравання прыборам. Для студэнтаў і маладых вучоных гэты праект можа быць вельмі карысным.
Навучанне праграмаванні
Зрэшты, як і ва ўсім праекце Arduino, асноўная карыснасць Nanonyam складаецца ў спрошчанасці функцый, інтэрфейсу і загрузніка. Таму гэты праект павінен быць цікавы навічкам-праграмістам і тым, каго задавальняе ўзровень ардуіна. Дарэчы, сам я да гэтага часу не вывучыў ардуіна дэталёва, паколькі заўсёды выкарыстоўваў WinAVR або AVR Studio, а пачынаў з асэмблера. Таму прыклад праграмы ніжэй будзе крыху няправільным, але цалкам працоўным.
Hello, Habr!
Нетутэйша час пазнаёміцца з некаторымі функцыямі Nanonyam і напісаць простую праграму. Будзем пісаць у Arduino, але не так, як прынята, а так, як я зараз умею (я ўжо казаў, што пакуль не вельмі добрае разабраўся з гэтым асяроддзем). Для пачатку ствараем новы скетч і выбіраемы поплатак Mega2560.
Захоўваем скетч у файл і побач які капіюецца
#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"
Яшчэ правільней было б зрабіць спецыяльны модуль Nanonyam for Arduino, які можна ўсталёўваць прама з Arduino. Як толькі разбяруся з гэтым, зраблю, а пакуль проста паказваю сутнасць працы з віртуальнай машынай. Пішам такі код:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}
Скетч з гэтай праграмай
Націскаем кнопку "Праверыць" і ніякіх памылак быць не павінна.
Зараз трэба атрымаць бінарны файл (прашыўку). Выбіраемы меню «Скетч>>Экспарт бінарнага файла (CTRL+ALT+S)«.
Пры гэтым у тэчку са скетчам будуць скапіяваныя два HEX-файла. Мы бярэм толькі файл без прыстаўкі "with_bootloader.mega".
Ёсць некалькі спосабаў паказаць HEX-файл віртуальнай машыне Nanonyam, усе яны апісаны
Аналагічна можна ствараць праграмы ў іншых асяроддзях, напрыклад, у AVR Studio ці WinAVR.
На гэтым пакуль скончым знаёмства з Nanonyam. Асноўная ідэя павінна быць зразумелай.
Усім дзякуй за ўвагу і ўдалага праграмавання!
Крыніца: habr.com