Як у 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

Додати коментар або відгук