
Una vez tuve la loca idea de traer
500 punteros láser en un solo lugar . Pasé mucho tiempo y lo hice. Resultó espectacular e inútil, pero me gustó. Hace seis meses, se me ocurrió otra idea loca. Esta vez para nada espectacular, pero mucho más útil. También pasé mucho tiempo en eso. Y en este artículo presento una versión beta de mi segunda idea loca.
Llamé al proyecto Nanonyam (Nanonyam) e incluso se me ocurrió un logotipo (pinté durante 5 minutos).

Para aquellos que piensan en términos de Arduino, podemos decir que Nanonyam es un escudo virtual de arduino para administrar Windows.
En otras palabras, Nanonyam es una máquina virtual que utiliza firmware para el microcontrolador AVR como código de bytes (se recomienda ATMEGA2560). Dentro de esta máquina virtual está el simulador de kernel AVR, pero en lugar de dispositivos periféricos 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 para Nanonyam no debe tener acceso al rango de memoria especificado, para no llamar accidentalmente, por ejemplo, la función de eliminar archivos o formatear el 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. Noto de inmediato que existe una protección especial contra el inicio accidental del firmware de un microcontrolador real (o firmware de una arquitectura diferente): antes de activar las funciones "peligrosas", debe llamar a una función virtual difícil especial. Hay algunas otras características de seguridad.
Para crear programas para Nanonyam, debe utilizar bibliotecas especiales que implementen todas las funciones virtuales disponibles actualmente. Puede descargar la máquina virtual Nanonyam y sus bibliotecas
aquí . Y aquí está la
página para describir funciones virtuales . Y sí, mi sitio es muy primitivo y no está adaptado para dispositivos móviles.
Nanonyam es gratuito para uso doméstico y comercial. Nanonyam está "tal cual". Código fuente no proporcionado.Por el momento, el programa se encuentra en la fase de prueba. Se han implementado unas 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, un 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é se puede hacer en Nanonyam? Se me ocurrieron varias tareas.
Desarrollo de bloques de programa.
Una vez que necesitaba desarrollar un menú complejo para una pantalla gráfica de 128x64 puntos. Realmente no quería descargar constantemente el firmware en un microcontrolador real para ver cómo se ven los píxeles. Entonces nació la idea de Nanonyam. En la figura siguiente, la imagen de la pantalla OLED real de uno de los elementos de ese menú. Ahora puedo resolverlo sin un dispositivo real.

Nanonyam (en su idea final) es una buena herramienta para resolver bloques de software para microcontroladores, ya que existen 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).
Crea programas rápidos
Por ejemplo, necesita procesar rápidamente 100,500 archivos de texto. Todos deben abrirse, cambiarse ligeramente de acuerdo con algún algoritmo simple, guardarse y cerrarse. Si eres un maestro de Python, te felicito, lo tienes todo. Pero si usted es un trabajador arduino empedernido (y hay muchos de ellos), entonces Nanonyam lo ayudará a resolver este problema. Este es exactamente mi segundo objetivo en Nanonyam: agregar muchas funciones útiles, como procesamiento de textos, crear capturas de pantalla o simular pulsaciones de teclas en el sistema (esto, por cierto, ya existe), así como muchas otras funciones para resolver tareas rutinarias.
Prueba de glándulas 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 desde el puerto. Puede guardar y leer datos de archivos para su análisis. Una herramienta conveniente para la depuración y calibración simples de glándulas, así como para crear paneles de control de instrumentos virtuales simples. Para estudiantes y jóvenes científicos, este proyecto puede ser muy útil.
Entrenamiento de programación
Sin embargo, como con todo el proyecto Arduino, la utilidad principal de Nanonyam es la simplificación de sus funciones, interfaz y gestor de arranque. Por lo tanto, este proyecto debería ser de interés para los programadores novatos y aquellos que están satisfechos con el nivel de arduino. Por cierto, yo todavía no he estudiado arduino en detalle, ya que siempre usé WinAVR o AVR Studio, pero comencé con el ensamblador. Por lo tanto, el siguiente programa de ejemplo estará un poco mal, pero funcionará bastante.
Hola Habr!
Es hora de conocer algunas de las características de Nanonyam y escribir un programa simple. Escribiremos en Arduino, pero no de la forma habitual, sino de la forma en que puedo hacerlo ahora (ya he dicho que no he tratado muy bien este entorno). Primero, cree un nuevo boceto y seleccione el tablero Mega2560.

Guarde el boceto en un archivo y copie
la biblioteca Nanonyam cercana . Sería correcto incluir los encabezados de la biblioteca, pero no sé cómo escribir una compilación de archivos individuales en Arduino, así que por ahora solo encienda las bibliotecas directamente (y todo a la vez):
#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"
Sería aún más correcto hacer un módulo especial "Nanonyam for Arduino", que se puede instalar directamente desde Arduino. Tan pronto como me ocupe de esto, lo haré, pero por ahora solo mostraré la esencia de trabajar con una máquina virtual. Escribimos el siguiente código:
// 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);// }
Un boceto con este programa
se puede descargar aquí .
Busque una descripción detallada de las funciones
en el sitio . Espero que los comentarios en este código sean suficientes para entender el punto. Aquí, la función
sys_Nanonyam () desempeña el papel de una "contraseña" para la máquina virtual, lo que elimina las restricciones sobre las funciones virtuales. Sin esta función, el programa se cerrará después de 3 segundos de operación.
Haga clic en el botón "Verificar" y no debería haber errores.

Ahora necesita obtener el archivo binario (firmware). Seleccione el menú "
Boceto >> Exportar archivo binario (CTRL + ALT + S) ".

En este caso, se copiarán dos archivos HEX a la carpeta con el boceto.
Tomamos solo el archivo sin el prefijo "with_bootloader.mega".Hay varias formas de especificar un archivo HEX para una máquina virtual Nanonyam, todas las cuales se describen
en esta página . Sugiero crear el archivo
Nanonyam.path junto al archivo
Nanonyam.exe , en el que escribir la ruta completa a nuestro archivo HEX. Entonces puede ejecutar
Nanonyam.exe . Recibimos una ventana con nuestra inscripción.

Del mismo modo, puede crear programas en otros entornos, por ejemplo, en AVR Studio o WinAVR.
Aquí es donde terminamos el conocimiento de Nanonyam. La idea básica debe ser clara.
Más ejemplos están en el sitio . Si hay suficientes personas que desean utilizar este proyecto, haré más ejemplos y continuaré "completando" las bibliotecas de funciones virtuales. Se aceptan ideas concretas para el desarrollo del proyecto e informes sobre mal funcionamiento, errores y errores. Es recomendable enviarlos a los contactos que
figuran en el sitio . Una discusión es bienvenida en los comentarios.
¡Gracias a todos por su atención y buena programación!