有一天我有了一個瘋狂的想法
我將這個項目命名為 Nanonyam(Nanonyam),甚至還為它設計了一個徽標(我畫了 5 分鐘)。
對於那些使用 Arduino 進行思考的人,我們可以說 Nanonyam 是一個用於控制 Windows 的虛擬 Arduino 擴展板。
換句話說,Nanonam是一個使用AVR微控制器(推薦ATMEGA2560)的固件作為字節碼的虛擬機。 該虛擬機內部是一個 AVR 核心模擬器,但不是位於 SRAM 地址 0x0060 到 0x01FF 的外圍設備,而是有一個特殊的虛擬函數接口(包括 Windows API 函數)。 在這裡,立即理解這一點非常重要:Nanonam 的代碼不應該對指定的內存範圍進行任何訪問,以免意外調用例如刪除文件或格式化磁盤的功能。 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 板。
將草圖保存到文件並複制下一步
#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 文件複製到 sketch 文件夾中。 我們只採用不帶前綴“with_bootloader.mega”的文件。
向Nanonam虛擬機指定HEX文件的方法有多種,均已描述
同樣,您可以在其他環境中創建程序,例如 AVR Studio 或 WinAVR。
到這裡我們就結束了對 Nanonyam 的認識。 主要思想應該很清楚。
感謝大家的關注和精彩的節目!
來源: www.habr.com