Como criar programas do Windows no Arduino



Uma vez tive a ideia maluca de trazer 500 ponteiros laser em um só lugar . Passei muito tempo e fiz isso. Ficou espetacular e inútil, mas gostei. Seis meses atrás, outra idéia maluca veio à minha mente. Desta vez não espetacular, mas muito mais útil. Eu também gastei muito tempo nisso. E neste artigo, apresento uma versão beta da minha segunda ideia maluca.

Liguei para o projeto Nanonyam (Nanonyam) e até criei um logotipo para ele (pintei por 5 minutos).



Para aqueles que pensam em termos do Arduino, podemos dizer que Nanonyam é um escudo de arduino virtual para gerenciar o Windows.

Em outras palavras, o Nanonyam é uma máquina virtual que usa firmware para o microcontrolador AVR como o bytecode (recomenda-se o ATMEGA2560). Dentro desta máquina virtual está o simulador do kernel AVR, mas em vez de dispositivos periféricos localizados nos endereços SRAM de 0x0060 a 0x01FF, há uma interface especial para funções virtuais (incluindo as funções da API do Windows). E aqui é muito importante entender imediatamente: o código para Nanonyam não deve ter acesso ao intervalo de memória especificado, para não chamar acidentalmente, por exemplo, a função de excluir arquivos ou formatar o disco. O restante do intervalo de memória SRAM de 0x0200 a 0xFFFF (isso é mais do que um microcontrolador real) está disponível para o usuário para qualquer finalidade. Percebo imediatamente que existe uma proteção especial contra o acionamento acidental de um microcontrolador real (ou firmware de uma arquitetura diferente): antes de ativar as funções "perigosas", é necessário chamar uma função virtual complicada especial. Existem outros recursos de segurança.

Para criar programas para Nanonyam, você precisa usar bibliotecas especiais que implementam todas as funções virtuais atualmente disponíveis. Você pode baixar a máquina virtual Nanonyam e suas bibliotecas aqui . E aqui está a página para descrever funções virtuais . E sim, meu site é muito primitivo e não está adaptado para dispositivos móveis.

Nanonyam é gratuito para uso doméstico e comercial. Nanonyam está “como está”. Código fonte não fornecido.

No momento, o programa está em fase de testes. Foram implementadas cerca de 200 funções virtuais que permitem criar programas simples para o Windows.
Obviamente, criar algo complicado em uma máquina virtual não funcionará, pois a memória do código é de apenas 256 kB. Os dados podem ser armazenados em arquivos separados, um buffer para a parte gráfica é implementado externamente. Todas as funções são simplificadas e adaptadas para a arquitetura de 8 bits.

O que pode ser feito em Nanonyam? Eu vim com várias tarefas.

Desenvolvimento de blocos de programas


Uma vez eu precisei desenvolver um menu complexo para uma tela gráfica de 128x64 pontos. Eu realmente não queria baixar constantemente o firmware em um microcontrolador real para ver a aparência dos pixels. Assim nasceu a ideia de Nanonyam. Na figura abaixo, a imagem da tela OLED real de um dos itens no mesmo menu. Agora eu posso resolver isso sem um dispositivo real.



Nanonyam (em sua idéia final) é uma boa ferramenta para trabalhar blocos de software para microcontroladores, pois existem funções para trabalhar com gráficos (você pode simular visores e indicadores), com arquivos (você pode criar logs, ler dados de teste), com um teclado (você pode ler até 10 botões ao mesmo tempo), com portas COM (aqui é um item separado).

Crie programas rápidos


Por exemplo, você precisa processar rapidamente 100.500 arquivos de texto. Todo mundo precisa ser aberto, ligeiramente alterado de acordo com algum algoritmo simples, salvo e fechado. Se você é um mestre em Python, parabenizo você por tudo. Mas se você é um trabalhador inveterado do arduino (e há muitos deles), o Nanonyam o ajudará a resolver esse problema. Este é o meu segundo objetivo no Nanonyam: adicionar muitas funções úteis, como processamento de texto, criação de capturas de tela ou simulação de pressionamentos de tecla no sistema (a propósito, isso já existe), além de muitas outras funções para resolver tarefas de rotina.

Glândulas de teste através da porta COM


Nanonyam pode atuar como um terminal que funciona de acordo com o seu algoritmo. Você pode desenhar um pequeno menu para controlar o dispositivo e exibir os dados recebidos da porta. Você pode salvar e ler dados de arquivos para análise. Uma ferramenta conveniente para depuração e calibração simples de bucins, bem como para criar painéis de controle de instrumentos virtuais simples. Para estudantes e jovens cientistas, este projeto pode ser muito útil.

Treinamento de programação


No entanto, como em todo o projeto do Arduino, o principal utilitário do Nanonyam é a simplificação de suas funções, interface e gerenciador de inicialização. Portanto, este projeto deve ser de interesse para programadores iniciantes e para aqueles que estão satisfeitos com o nível do arduino. A propósito, eu mesmo ainda não estudei o arduino em detalhes, pois sempre usei o WinAVR ou o AVR Studio, mas comecei com o assembler. Portanto, o programa de exemplo abaixo estará um pouco errado, mas funcionará.

Olá Habr!


É hora de conhecer alguns dos recursos do Nanonyam e escrever um programa simples. Escreveremos no Arduino, mas não da maneira habitual, mas da maneira que posso agora (já disse que não lidei muito bem com esse ambiente). Primeiro, crie um novo esboço e selecione o painel Mega2560.



Salve o esboço em um arquivo e copie a biblioteca Nanonyam nas proximidades . Seria correto incluir os cabeçalhos da biblioteca, mas não sei como escrever a compilação de arquivos individuais no Arduino. Por enquanto, basta ativar as bibliotecas diretamente (e de uma só 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" 

Seria ainda mais correto criar um módulo especial "Nanonyam for Arduino", que pode ser instalado diretamente do Arduino. Assim que lidar com isso, farei isso, mas por enquanto apenas mostrarei a essência do trabalho com uma máquina virtual. Escrevemos o seguinte 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);//    } 

Um esboço com este programa pode ser baixado aqui . Procure uma descrição detalhada das funções no site . Espero que os comentários neste código sejam suficientes para entender o ponto. Aqui, a função sys_Nanonyam () desempenha o papel de uma "senha" para a máquina virtual, que remove as restrições nas funções virtuais. Sem essa função, o programa será fechado após 3 segundos de operação.

Clique no botão "Verificar" e não deve haver erros.



Agora você precisa obter o arquivo binário (firmware). Selecione o menu " Esboço >> Exportar arquivo binário (CTRL + ALT + S) ".



Nesse caso, dois arquivos HEX serão copiados para a pasta com o esboço. Tomamos apenas o arquivo sem o prefixo "with_bootloader.mega".

Existem várias maneiras de especificar um arquivo HEX para uma máquina virtual Nanonyam, todas descritas nesta página . Sugiro criar o arquivo Nanonyam.path ao lado do arquivo Nanonyam.exe , no qual escrever o caminho completo para o arquivo HEX. Então você pode executar o Nanonyam.exe . Temos uma janela com a nossa inscrição.



Da mesma forma, você pode criar programas em outros ambientes, por exemplo, no AVR Studio ou no WinAVR.

É aqui que terminamos o conhecimento com Nanonyam. A ideia básica deve ser clara. Mais exemplos estão no site . Se houver pessoas suficientes que desejam usar esse projeto, darei mais exemplos e continuarei a "preencher" as bibliotecas de funções virtuais. São aceitas idéias concretas para o desenvolvimento do projeto e relatórios sobre falhas, bugs e erros. É aconselhável enviá-los para os contatos listados no site . Uma discussão é bem-vinda nos comentários.

Obrigado a todos pela atenção e boa programação!

Source: https://habr.com/ru/post/pt472958/


All Articles