Un día tuve la loca idea de traer
Llamé al proyecto Nanonyam (Nanonyam) e incluso se me ocurrió un logotipo (dibujé durante 5 minutos).
Para aquellos que piensan en términos de Arduino, podemos decir que Nanonyam es un escudo virtual de Arduino para controlar Windows.
En otras palabras, Nanonyam es una máquina virtual que utiliza el firmware del microcontrolador AVR (se recomienda ATMEGA2560) como código de bytes. Dentro de esta máquina virtual hay un simulador de núcleo AVR, pero en lugar de dispositivos periféricos, que están ubicados en direcciones SRAM de 0x0060 a 0x01FF, hay una interfaz especial para funciones virtuales (incluidas las funciones API de Windows). Y aquí es muy importante comprender de inmediato: el código de Nanonyam no debe tener acceso al rango de memoria especificado, para no llamar accidentalmente, por ejemplo, a la función de eliminar archivos o formatear un disco. El resto del rango de memoria SRAM de 0x0200 a 0xFFFF (esto es más que en un microcontrolador real) está disponible para el usuario para cualquier propósito. Observo de inmediato que existe una protección especial contra el lanzamiento accidental del firmware de un microcontrolador real (o firmware de otra arquitectura): antes de activar funciones "peligrosas", debe llamar a una función virtual especial y complicada. Hay algunas otras características de seguridad también.
Para crear programas para Nanonyam, debe usar bibliotecas especiales que implementen todas las funciones virtuales disponibles actualmente. Descargue la máquina virtual Nanonyam y las bibliotecas para ello
Nanonyam es gratuito para uso doméstico y comercial. El programa Nanonyam se proporciona "tal cual". No se proporciona el código fuente.
El programa se encuentra actualmente en la fase de prueba. Implementó alrededor de 200 funciones virtuales que le permiten crear programas simples para Windows.
Obviamente, crear algo complicado en una máquina virtual de este tipo no funcionará, ya que la memoria para el código es de solo 256 kB. Los datos se pueden almacenar en archivos separados, el búfer para la parte gráfica se implementa externamente. Todas las funciones están simplificadas y adaptadas para la arquitectura de 8 bits.
¿Qué puedes hacer en Nanonyam? Se me ocurrieron algunos problemas.
Desarrollo de bloques de programa.
Una vez necesité diseñar un menú complejo para una pantalla gráfica de 128x64 puntos. Realmente no quería cargar constantemente el firmware en un microcontrolador real para ver cómo se ven los píxeles. Y así nació la idea de Nanonyam. La siguiente figura muestra una imagen de una pantalla OLED real de uno de los elementos del mismo menú. Ahora puedo resolverlo sin un dispositivo real.
Nanonyam (en su idea final) es una buena herramienta para trabajar bloques de programa para microcontroladores, ya que hay funciones para trabajar con gráficos (puede simular pantallas e indicadores), con archivos (puede hacer registros, leer datos de prueba), con un teclado (puede leer hasta 10 botones al mismo tiempo), con puertos COM (aquí hay un elemento separado).
Creación de programas rápidos
Por ejemplo, necesita procesar rápidamente 100500 archivos de texto. Cada uno debe abrirse, modificarse ligeramente de acuerdo con un algoritmo simple, guardarse y cerrarse. Si eres un maestro de Python, entonces te felicito, lo tienes todo. Pero si eres un arduino endurecido (y hay muchos de ellos), Nanonyam te ayudará a resolver este problema. Este es mi segundo objetivo en Nanonyam: agregar muchas funciones útiles como el procesamiento de texto, tomar capturas de pantalla o simular pulsaciones de teclas en el sistema (todas las cuales, por cierto, ya están ahí), así como muchas otras funciones para resolver tareas rutinarias. .
Prueba de hardware a través del puerto COM
Nanonyam puede actuar como un terminal que funciona de acuerdo con su algoritmo. Puede dibujar un pequeño menú para controlar el dispositivo y mostrar los datos recibidos del puerto. Puede guardar y leer datos de archivos para su análisis. Una herramienta útil para la depuración y calibración sencillas del hardware, así como para la creación de paneles de control de instrumentos virtuales sencillos. Para estudiantes y jóvenes científicos, este proyecto puede ser muy útil.
Formación en programación
Sin embargo, como ocurre con todo el proyecto Arduino, la principal utilidad de Nanonyam radica en la simplificación de funciones, interfaz y gestor de arranque. Por lo tanto, este proyecto debe ser de interés para los programadores novatos y aquellos que están satisfechos con el nivel de arduino. Por cierto, yo mismo todavía no he estudiado arduino en detalle, porque siempre usé WinAVR o AVR Studio, pero comencé con ensamblador. Por lo tanto, el programa de ejemplo a continuación será un poco incorrecto, pero funcionará bastante bien.
¡Hola Habr!
Es hora de familiarizarse con algunas características de Nanonyam y escribir un programa simple. Escribiremos en Arduino, pero no de la manera habitual, sino de la forma en que puedo ahora (ya dije que aún no he descifrado muy bien este entorno). Primero, cree un nuevo boceto y seleccione la placa Mega2560.
Guarde el boceto en un archivo y cópielo a continuación.
#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"
Sería aún más correcto hacer un módulo especial "Nanonyam para Arduino", que se puede instalar directamente desde Arduino. Tan pronto como lo descubra, lo haré, pero por ahora solo estoy mostrando la esencia de trabajar con una máquina virtual. Escribimos el siguiente código:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}
Dibujar con este programa
Presionamos el botón "Comprobar" y no debería haber ningún error.
Ahora necesita obtener un archivo binario (firmware). Seleccione el menú "Sketch>>Exportar archivo binario (CTRL+ALT+S)«.
Esto copiará dos archivos HEX a la carpeta de bocetos. Tomamos solo el archivo sin el prefijo "with_bootloader.mega".
Hay varias formas de especificar un archivo HEX a la máquina virtual Nanonyam, todas ellas se describen
Del mismo modo, puede crear programas en otros entornos, como AVR Studio o WinAVR.
Aquí es donde terminamos nuestra relación con Nanonyam. La idea principal debe ser clara.
¡Gracias a todos por su atención y buena programación!
Fuente: habr.com