Як у Arduino ствараць праграмы для Windows

Як у Arduino ствараць праграмы для Windows

Аднойчы мне ў галаву прыйшла вар'яцкая ідэя звесці 500 лазерных указак у адно месца. Я патраціў шмат часу і зрабіў гэта. Атрымалася відовішчна і бескарысна, але мне спадабалася. Паўгода таму мне прыйшла іншая вар'яцкая ідэя. На гэты раз зусім не відовішчная, але значна больш карысна. Я таксама патраціў на яе шмат часу. І ў гэтым артыкуле я ўяўляю бэта версію сваёй другой вар'яцкай ідэі.

Праект я назваў Nanonyam (Наноням) і нават прыдумаў яму лагатып (маляваў цэлых 5 хвілін).

Як у Arduino ствараць праграмы для Windows

Для тых, хто думае тэрмінамі 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-дысплея аднаго з пунктаў таго самага меню. Цяпер я магу прапрацоўваць яго без рэальнага прылады.

Як у Arduino ствараць праграмы для Windows

Nanonyam (у сваёй канчатковай задумцы) гэта добрая прылада для адпрацоўкі праграмных блокаў для мікракантролераў, бо ёсць функцыі працы з графікай (можна імітаваць дысплеі і індыкатары), з файламі (можна рабіць логі, счытваць тэставыя дадзеныя), з клавіятурай (можна счытваць да 10 кнопак адначасова), з COM-партамі (тут асобны пункт).

Стварэнне хуткіх праграм

Напрыклад, вам трэба па-хуценькаму апрацаваць 100500 тэкставых файлаў. Кожны трэба адкрыць, крыху змяніць па нейкім нескладаным алгарытме, захаваць і закрыць. Калі вы майстар Python, то я вас віншую, у вас усё ёсць. Але калі вы закаранелы ардуіншчык (а такіх нямала), то Nanonyam вам дапаможа ў рашэнні гэтай задачы. Менавіта гэта мая другая мэта ў Nanonyam: дадаць мноства карысных функцый тыпу апрацоўкі тэксту, стварэння скрыншотаў ці імітацыі націску клавіш у сістэме (гэта ўсё, дарэчы, ужо ёсць), а таксама мноства іншых функцый для рашэння руцінных задач.

Тэставанне жалязяк праз COM-порт

Nanonyam можа выступаць у ролі тэрмінала, які працуе па вашаму алгарытму. Можна намаляваць невялікае меню для кіравання прыладай і адлюстроўваць дадзеныя, якія атрымліваюцца з порта. Можна захоўваць і счытваць дадзеныя з файлаў для аналізу. Зручная прылада для нескладанай адладкі і каліброўкі жалязяк, а таксама для стварэння простых віртуальных панэляў кіравання прыборам. Для студэнтаў і маладых вучоных гэты праект можа быць вельмі карысным.

Навучанне праграмаванні

Зрэшты, як і ва ўсім праекце Arduino, асноўная карыснасць Nanonyam складаецца ў спрошчанасці функцый, інтэрфейсу і загрузніка. Таму гэты праект павінен быць цікавы навічкам-праграмістам і тым, каго задавальняе ўзровень ардуіна. Дарэчы, сам я да гэтага часу не вывучыў ардуіна дэталёва, паколькі заўсёды выкарыстоўваў WinAVR або AVR Studio, а пачынаў з асэмблера. Таму прыклад праграмы ніжэй будзе крыху няправільным, але цалкам працоўным.

Hello, Habr!

Нетутэйша час пазнаёміцца ​​з некаторымі функцыямі Nanonyam і напісаць простую праграму. Будзем пісаць у Arduino, але не так, як прынята, а так, як я зараз умею (я ўжо казаў, што пакуль не вельмі добрае разабраўся з гэтым асяроддзем). Для пачатку ствараем новы скетч і выбіраемы поплатак Mega2560.

Як у Arduino ствараць праграмы для Windows

Захоўваем скетч у файл і побач які капіюецца бібліятэку Nanonyam. Правільна было б уключаць загалоўкі бібліятэк, але я не ведаю як у 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 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);//Задержка и разгрузка процессора
}

Скетч з гэтай праграмай можна спампаваць тут. Дэталёвае апісанне функцый шукайце на сайце. Спадзяюся, каментароў у гэтым кодзе дастаткова, каб зразумець сутнасць. Тут функцыя sys_Nanonyam() гуляе ролю "пароля" для віртуальнай машыны, які здымае абмежаванні на віртуальныя функцыі. Без гэтай функцыі праграма закрыецца праз 3 сэкунды працы.

Націскаем кнопку "Праверыць" і ніякіх памылак быць не павінна.

Як у Arduino ствараць праграмы для Windows

Зараз трэба атрымаць бінарны файл (прашыўку). Выбіраемы меню «Скетч>>Экспарт бінарнага файла (CTRL+ALT+S)«.

Як у Arduino ствараць праграмы для Windows

Пры гэтым у тэчку са скетчам будуць скапіяваныя два HEX-файла. Мы бярэм толькі файл без прыстаўкі "with_bootloader.mega".

Ёсць некалькі спосабаў паказаць HEX-файл віртуальнай машыне Nanonyam, усе яны апісаны на гэтай старонцы. Я прапаную стварыць побач з файлам Nanonyam.exe файл Nanonyam.path, у якім прапісаць поўны шлях да нашага HEX-файла. Пасля чаго можна запускаць Nanonyam.exe. Атрымліваем акно з нашым надпісам.

Як у Arduino ствараць праграмы для Windows

Аналагічна можна ствараць праграмы ў іншых асяроддзях, напрыклад, у AVR Studio ці WinAVR.

На гэтым пакуль скончым знаёмства з Nanonyam. Асноўная ідэя павінна быць зразумелай. Яшчэ прыклады ёсць на сайце. Калі будзе дастаткова жадаючых выкарыстаць гэты праект, то я зраблю больш прыкладаў і працягну “напаўняць” бібліятэкі віртуальных функцый. Прымаюцца канкрэтныя ідэі для развіцця праекта і справаздачы аб няспраўнасцях, багах і ляпах. Пажадана накіроўваць іх па кантактах, указаным на сайце. А абмеркаванне вітаецца ў каментарах.

Усім дзякуй за ўвагу і ўдалага праграмавання!

Крыніца: habr.com

Дадаць каментар