
Веднъж ми дойде наум налудничава идея да събера Прекарвах много време и го направих. Получи се зрелищно и безполезно, но ми хареса. Преди шест месеца ми дойде друга налудничава идея. Този път не толкова зрелищна, но много по-полезна. Също така изразходвах много време за нея. В тази статия представям бета версията на моята втора налудничава идея.
Проектът нарекох 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 се състои в простотата на функциите, интерфейса и зареждача. Затова този проект трябва да е интересен за начинаещи програмисти и за тези, които са на ниво Arduino. Между другото, аз все още не съм изучавал Arduino в детайли, тъй като винаги съм използвал WinAVR или AVR Studio и започнах с асемблер. Затова примерът по-долу ще бъде малко неправилен, но напълно работещ.
Здравей, Habr!
Време е да се запознаем с някои функции на Nanonyam и да напишем проста програма. Ще пишем в Arduino, но не както е прието, а така, както в момента умея (казах, че все още не съм много добра в тази среда). Първо създаваме нов скеч и избираме платка Mega2560.

Съхраняваме скеча във файл и до него копираме . Правилно би било да включим заглавията на библиотеките, но не знам как в Arduino да опиша компилирането на отделни файлове, затова за сега просто ще включим библиотеките директно (и всички веднага):
#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 за 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);//Задержка и разгрузка процессора
}Скеч с тази програма . Подробно описание на функциите . Надявам се, коментарите в този код да са достатъчно, за да се разбере същността. Тук функцията sys_Nanonyam() играе ролята на „парола“ за виртуалната машина, която сваля ограниченията на виртуалните функции. Без тази функция програмата ще се затвори след 3 секунди работа.
Натиснете бутона „Проверка“ и не трябва да има грешки.

Сега трябва да получим бинарен файл (прошивка). Избираме менюто “Скеч>>Експорт на бинарен файл (CTRL+ALT+S)«.

При това в папката със скеча ще бъдат копирани два HEX файла. Ние вземаме само файла без приставката «with_bootloader.mega».
Има няколко начина да укажете HEX-файл на виртуалната машина Nanonyam, всички те са описани . Предлагам да създадете до файла Nanonyam.exe файл Nanonyam.path, в който да запишете пълния път до нашия HEX-файл. След което можем да стартираме Nanonyam.exe. Получаваме прозорец с нашето съобщение.

По аналогичен начин може да се създават програми в други среди, например, в AVR Studio или WinAVR.
Тук приключваме запознаването с Nanonyam. Основната идея трябва да бъде ясна. . Ако има достатъчно желаещи да използват този проект, ще направя още примери и ще продължа да „напълвам“ библиотеките с виртуални функции. Приемат се конкретни идеи за развитие на проекта и отчети за неизправности, бъгове и пропуски. Желателно е да ги изпратите по контактите, . Обсъждането е добре дошло в коментарите.
Благодаря на всички за вниманието и успешното програмиране!
Източник: habr.com
