
有一天我有了一個瘋狂的想法 。 我花了很多時間並且做到了。 結果很壯觀而且沒什麼用,但我喜歡它。 六個月前,我有了另一個瘋狂的想法。 這一次,一點也不壯觀,但更有用。 我也花了很多時間在這上面。 在這篇文章中,我展示了我的第二個瘋狂想法的測試版。
我將這個項目命名為 Nanonyam(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 kB。 數據可以存儲在單獨的文件中,圖形部分的緩衝區在外部實現。 所有功能均經過簡化並適合 8 位架構。
在納農揚可以做什麼? 我提出了一些問題。
程序塊的開發
我曾經需要為 128x64 點圖形顯示設計一個複雜的菜單。 我真的不想不斷地將固件加載到真正的微控制器中來查看像素的外觀。 於是 Nanonyam 的想法誕生了。 下圖顯示了同一菜單上某個項目的真實 OLED 顯示屏的圖像。 現在我可以在沒有真實設備的情況下完成它。

Nanonyam(最終的想法)是一個用於為微控制器製定程序塊的好工具,因為它具有處理圖形(您可以模擬顯示器和指示器)、文件(您可以生成日誌、讀取測試數據)、以及一個鍵盤(您最多可以同時讀取 10 個按鈕),帶有 COM 端口(這裡是一個單獨的項目)。
創建快速程序
例如,您需要快速處理 100500 個文本文件。 每一個都需要打開,根據一些簡單的算法稍微修改,保存並關閉。 如果你是Python高手,那麼我恭喜你,你擁有了一切。 但如果你是一個頑固的arduino(而且有很多這樣的人),那麼Nanonam將幫助你解決這個問題。 這是我在 Nanonyam 中的第二個目標:添加許多有用的功能,例如係統中的文本處理、截圖或模擬擊鍵(順便說一下,所有這些都已經存在),以及許多其他用於解決日常任務的功能。
通過COM端口測試硬件
Nanonyam 可以充當根據您的算法工作的終端。 您可以繪製一個小菜單來控制設備並顯示從端口接收到的數據。 您可以保存和讀取文件中的數據以進行分析。 一個方便的工具,用於簡單的硬件調試和校準,以及創建簡單的虛擬儀器控制面板。 對於學生和年輕科學家來說,這個項目非常有用。
編程培訓
然而,與整個 Arduino 項目一樣,Nanonyam 的主要用處在於功能、接口和引導加載程序的簡化。 因此,這個項目應該會引起新手程序員和對arduino水平滿意的人的興趣。 順便說一句,我自己還沒有詳細研究過arduino,因為我一直用的是WinAVR或者AVR Studio,而是從彙編開始的。 因此,下面的示例程序會有點錯誤,但相當有效。
你好哈布爾!
是時候熟悉一些 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 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秒後關閉。
我們按下“檢查”按鈕,應該不會有任何錯誤。

現在您需要獲取一個二進製文件(固件)。 選擇菜單“草圖>>導出二進製文件(CTRL+ALT+S)“。

這會將兩個 HEX 文件複製到 sketch 文件夾中。 我們只採用不帶前綴“with_bootloader.mega”的文件。
向Nanonam虛擬機指定HEX文件的方法有多種,均已描述 。 我建議在文件旁邊創建 納諾亞姆程序 文件 小路,在其中註冊 HEX 文件的完整路徑。 之後你可以運行 納諾亞姆程序。 我們得到一個帶有我們的銘文的窗口。

同樣,您可以在其他環境中創建程序,例如 AVR Studio 或 WinAVR。
到這裡我們就結束了對 Nanonyam 的認識。 主要思想應該很清楚。 。 如果有足夠多的人願意使用這個項目,那麼我會做更多的例子並繼續“填充”虛擬函數庫。 接受項目開發的具體想法以及故障、錯誤和錯誤的報告。 建議將他們引導至聯繫人, 。 並歡迎在評論中討論。
感謝大家的關注和精彩的節目!
來源: www.habr.com
