有一天我有一个疯狂的想法
我将这个项目命名为 Nanonyam(Nanonyam),甚至还为它想出了一个标志(我画了 5 分钟)。
对于那些考虑 Arduino 的人,我们可以说 Nanonyam 是一个用于控制 Windows 的虚拟 Arduino 盾牌。
换句话说,Nanonyam 是一个使用 AVR 微控制器(推荐使用 ATMEGA2560)的固件作为字节码的虚拟机。 该虚拟机内部是一个 AVR 内核模拟器,但不是位于 SRAM 地址从 0x0060 到 0x01FF 的外围设备,而是一个虚拟函数(包括 Windows API 函数)的特殊接口。 立即了解这一点非常重要:Nanonyam 的代码不应访问指定的内存范围,以免意外调用删除文件或格式化磁盘等功能。 从 0x0200 到 0xFFFF 的其余 SRAM 内存范围(这比在真正的微控制器中多)可供用户用于任何目的。 我马上注意到,有一种特殊的保护措施可以防止意外启动真实微控制器的固件(或来自其他架构的固件):在激活“危险”功能之前,您需要调用一个特殊的棘手虚拟功能。 还有一些其他安全功能。
要为 Nanonyam 创建程序,您需要使用实现所有当前可用虚拟函数的特殊库。 下载 Nanonyam 虚拟机和它的库
Nanonyam 可免费用于家庭和商业用途。 Nanonyam 程序按“原样”提供。 不提供源代码。
该程序目前处于测试阶段。 实现了大约 200 个虚拟函数,允许您为 Windows 创建简单的程序。
显然,在这样的虚拟机中创建复杂的东西是行不通的,因为代码的内存只有 256 kB。 数据可以存储在单独的文件中,图形部分的缓冲区在外部实现。 所有功能都经过简化并适用于 8 位架构。
您可以在纳南亚姆做什么? 我想出了一些问题。
程序块的开发
我曾经需要为 128x64 点图形显示器设计一个复杂的菜单。 我真的不想不断地将固件加载到真正的微控制器中以查看像素的外观。 于是 Nanonyam 的想法诞生了。 下图显示了同一菜单上其中一项的真实 OLED 显示屏图像。 现在我可以在没有真实设备的情况下完成它。
Nanonyam(在其最终想法中)是为微控制器制定程序块的好工具,因为它具有处理图形(您可以模拟显示和指示器)、文件(您可以制作日志、读取测试数据)的功能,以及一个键盘(您最多可以同时读取 10 个按钮),带有 COM 端口(这里是一个单独的项目)。
创建快程序
例如,您需要快速处理 100500 个文本文件。 每一个都需要打开,根据一些简单的算法稍微修改,保存并关闭。 如果你是 Python 高手,那么恭喜你,你拥有了一切。 但是如果你是一个硬汉(并且有很多),那么 Nanonyam 将帮助你解决这个问题。 这是我在 Nanonyam 中的第二个目标:在系统中添加许多有用的功能,例如文本处理、截屏或模拟击键(顺便说一句,所有这些都已经存在),以及许多其他用于解决问题的功能例行任务。
通过 COM 端口测试硬件
Nanonyam 可以充当根据您的算法工作的终端。 你可以绘制一个小菜单来控制设备并显示从端口接收到的数据。 您可以从文件中保存和读取数据以供分析。 一个方便的工具,用于简单调试和校准硬件,以及创建简单的虚拟仪器控制面板。 对于学生和年轻科学家来说,这个项目可能非常有用。
编程培训
然而,与整个 Arduino 项目一样,Nanonyam 的主要用处在于功能、接口和引导加载程序的简化。 因此,这个项目应该对新手程序员和对arduino水平满意的人感兴趣。 顺便说一句,我自己还没有详细研究arduino,因为我一直用的是WinAVR或者AVR Studio,而是从assembler开始的。 因此,下面的示例程序会有点错误,但可以正常工作。
你好哈布尔!
是时候熟悉一些 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"
制作一个可以直接从 Arduino 安装的特殊模块“Nanonyam for 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 文件复制到草图文件夹中。 我们只获取没有前缀“with_bootloader.mega”的文件。
指定一个HEX文件给Nanonyam虚拟机有几种方法,一一介绍
同样,您可以在其他环境中创建程序,例如 AVR Studio 或 WinAVR。
这是我们完成对 Nanonyam 的认识的地方。 主要思想应该清楚。
感谢大家的关注和良好的编程!
来源: habr.com