如何在Arduino中创建Windows程序



一次我有一个疯狂的主意,将500个激光笔放在一个地方 。 我花了很多时间并做到了。 事实证明它壮观而无用,但我喜欢它。 六个月前,另一个疯狂的想法来到了我的脑海。 这次一点也不壮观,但是有用得多。 我也花了很多时间。 在本文中,我介绍了我的第二个疯狂想法的测试版。

我给这个项目命名为Nanonyam(Nanonyam),甚至想到了一个徽标(我画了5分钟)。



对于那些考虑Arduino的人,我们可以说Nanonyam是用于管理Windows的虚拟arduino盾。

换句话说,Nanonyam是一个虚拟机,它使用AVR微控制器的固件作为字节码(建议使用ATMEGA2560)。 该虚拟机内部是AVR内核模拟器,但不是虚拟设备(包括Windows API函数)的特殊接口,而不是位于0x0060至0x01FF的SRAM地址的外围设备。 在这里,立即理解非常重要:Nanonyam的代码不应访问指定的内存范围,以免意外调用例如删除文件或格式化磁盘的功能。 用户可以出于任何目的使用剩余的SRAM存储器范围从0x0200到0xFFFF(这比实际的微控制器更大)。 我立即注意到,有特殊保护措施可以防止意外启动实际微控制器的固件(或来自其他体系结构的固件):在激活“危险”功能之前,您需要调用特殊的棘手虚拟功能。 还有其他一些安全功能。

要为Nanonyam创建程序,您需要使用特殊的库来实现所有当前可用的虚拟功能。 您可以在此处下载Nanonyam虚拟机及其库。 这是描述虚函数页面 。 是的,我的网站非常原始,不适合移动设备。

Nanonyam免费提供家庭和商业用途。 Nanonyam是按“原样”进行的。 未提供源代码。

目前,该程序处于测试阶段。 已经实现了大约200个虚拟功能,使您可以为Windows创建简单的程序。
显然,在这种虚拟机中创建复杂的东西是行不通的,因为代码的内存仅为256 kB。 数据可以存储在单独的文件中,图形部分的缓冲区在外部实现。 所有功能都经过简化,并适用于8位架构。

Nanonyam可以做什么? 我提出了几个任务。

程序块的开发


一次,我需要为128x64点图形显示开发一个复杂的菜单。 我真的不想一直将固件下载到真正的微控制器中以查看像素的外观。 因此,Nanonyam的想法诞生了。 在下图中,来自真实OLED的图像在同一菜单上显示其中一项。 现在,无需实际设备即可解决该问题。



Nanonyam(最终的想法)是为微控制器开发软件模块的好工具,因为它具有处理图形(可以模拟显示和指示器),文件(可以制作日志,读取测试数据),键盘(可以读取数据)的功能。同时具有10个按钮),带有COM端口(这是一个单独的项目)。

创建快速程序


例如,您需要快速处理100,500个文本文件。 每个人都需要打开,根据一些简单的算法稍作更改,然后保存并关闭。 如果您是Python大师,那么我祝贺您,您拥有一切。 但是,如果您是一位精通arduino的工作者(并且其中许多人),那么Nanonyam将帮助您解决此问题。 这正是我在Nanonyam中的第二个目标:添加许多有用的功能,例如文字处理,创建屏幕截图或模拟系统中的击键(顺便说一下,这已经存在),以及许多其他解决常规任务的功能。

通过COM端口测试压盖


Nanonyam可以充当根据您的算法工作的终端。 您可以绘制一个小菜单来控制设备并显示从端口接收的数据。 您可以保存和读取文件中的数据以进行分析。 一个方便的工具,用于简单的腺体调试和校准,以及用于创建简单的虚拟仪器控制面板。 对于学生和年轻科学家来说,该项目可能非常有用。

编程培训


但是,与整个Arduino项目一样,Nanonyam的主要实用程序是其功能,接口和引导程序的简化。 因此,新手程序员和对arduino水平满意的人员应该对此项目感兴趣。 顺便说一句,由于我一直使用WinAVR或AVR Studio,所以我本人尚未详细研究arduino,但我从汇编程序开始。 因此,下面的示例程序会有些错误,但是可以正常工作。

哈Ha!


现在是时候了解Nanonyam的一些功能并编写一个简单的程序了。 我们将使用Arduino进行编写,但不是以惯常的方式编写,而是以我现在可以使用的方式编写(我已经说过,我对这种环境的处理不是很好)。 首先,创建一个新草图并选择Mega2560板。



将草图保存到文件中,然后复制附近的Nanonyam库 。 包括库标题是正确的,但是我不知道如何在Arduino中编写单个文件的编译,因此,现在就直接打开库(一次全部打开):

#include <stdio.h> #include "Nanonyam\nN_System_lib.c" #include "Nanonyam\nN_Keyboard_lib.c" #include "Nanonyam\nN_File_lib.c" #include "Nanonyam\nN_Math_lib.c" #include "Nanonyam\nN_Text_lib.c" #include "Nanonyam\nN_Graphics_lib.c" #include "Nanonyam\nN_RS232_lib.c" 

制作一个特殊的模块“ Nanonyam for Arduino”会更正确,该模块可以直接从Arduino安装。 一旦解决,我会做的,但是现在,我仅展示使用虚拟机的本质。 我们编写以下代码:

 //       void setup() { sys_Nanonyam();//    g_SetScreenSize(400,200);//   400200  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) ”。



在这种情况下,两个十六进制文件将被复制到带有草图的文件夹中。 我们仅采用不带前缀“ with_bootloader.mega”的文件。

有多种方法可以为Nanonyam虚拟机指定HEX文件,所有方法均在此页面中介绍。 我建议在Nanonyam.exe文件旁边创建一个Nanonyam.path文件,在其中将完整路径写入HEX文件。 然后,您可以运行Nanonyam.exe 。 我们得到一个带有题词的窗口。



同样,您可以在其他环境中创建程序,例如在AVR Studio或WinAVR中。

这是我们与Nanonyam结识的地方。 基本思路应该清楚。 该站点上有更多示例 。 如果有足够的人想要使用该项目,那么我将举更多的例子,并继续“填充”虚拟函数库。 接受有关项目开发的具体想法以及有关故障,错误和错误的报告。 建议将其发送给网站上列出的联系人。 评论中欢迎进行讨论。

谢谢大家的关注和良好的编程!

Source: https://habr.com/ru/post/zh-CN472958/


All Articles