
Um dia tive a ideia maluca de trazer . Eu gastei muito tempo e fiz isso. Ficou espetacular e inútil, mas gostei. Seis meses atrás, tive outra ideia maluca. Desta vez, nada espetacular, mas muito mais útil. Eu também passei muito tempo nisso. E neste artigo, apresento uma versão beta da minha segunda ideia maluca.
Chamei o projeto de Nanonyam (Nanonyam) e até criei um logotipo para ele (desenhei por 5 minutos).

Para quem pensa em termos de Arduino, podemos dizer que o Nanonyam é um shield virtual para Arduino, usado para controle. Windows.
Em outras palavras, Nanonyam é uma máquina virtual que utiliza o firmware de um microcontrolador AVR (recomenda-se o ATMEGA2560) como bytecode. Esta máquina virtual contém um simulador de kernel AVR, mas em vez de periféricos localizados nos endereços SRAM de 0x0060 a 0x01FF, ela contém uma interface especial para funções virtuais (incluindo funções). Windows API). É crucial entender desde já: o código Nanonyam não deve acessar o intervalo de memória especificado de forma alguma, para evitar acionar acidentalmente, por exemplo, uma função de exclusão de arquivo ou formatação de disco. O restante da memória SRAM, de 0x0200 a 0xFFFF (que é maior do que a de um microcontrolador real), está disponível para o usuário para qualquer finalidade. Devo observar imediatamente que existe uma proteção especial contra a execução acidental do firmware de um microcontrolador real (ou firmware de uma arquitetura diferente): antes de ativar funções "perigosas", uma função virtual especial e inteligente deve ser chamada. Existem também outros recursos de segurança.
Para criar programas para Nanonyam, você precisa usar bibliotecas especiais que implementam todas as funções virtuais disponíveis no momento. Baixe a máquina virtual Nanonyam e as bibliotecas para ela . Mas o . E sim, meu site é muito primitivo e não adaptado para dispositivos móveis.
Nanonyam é gratuito para uso doméstico e comercial. O programa Nanonyam é fornecido "como está". O código-fonte não é fornecido.
O programa encontra-se atualmente em fase de testes. Cerca de 200 funções virtuais foram implementadas, permitindo a criação de programas simples para Windows.
Obviamente, criar algo complicado em uma máquina virtual dessas não funcionará, pois a memória para o código é de apenas 256 kB. Os dados podem ser armazenados em arquivos separados, o buffer para a parte gráfica é implementado externamente. Todas as funções são simplificadas e adaptadas para arquitetura de 8 bits.
O que você pode fazer em Nanonyam? Eu vim com alguns problemas.
Desenvolvimento de blocos de programa
Certa vez, precisei projetar um menu complexo para um display gráfico de 128 x 64 pontos. Eu realmente não queria carregar constantemente o firmware em um microcontrolador real para ver a aparência dos pixels. E assim nasceu a ideia de Nanonyam. A figura abaixo mostra uma imagem de um display OLED real de um dos itens do mesmo menu. Agora posso trabalhar com isso sem um dispositivo real.

O Nanonyam (em sua ideia final) é uma boa ferramenta para elaborar blocos de programas para microcontroladores, pois existem funções para trabalhar com gráficos (você pode simular displays e indicadores), com arquivos (você pode fazer logs, ler dados de teste), com um teclado (você pode ler até 10 botões ao mesmo tempo), com portas COM (aqui está um item separado).
Criando Programas Rápidos
Por exemplo, você precisa processar rapidamente 100500 arquivos de texto. Cada um precisa ser aberto, ligeiramente modificado de acordo com algum algoritmo simples, salvo e fechado. Se você é um mestre em Python, eu o parabenizo, você tem tudo. Mas se você é um arduino endurecido (e há muitos deles), o Nanonyam o ajudará a resolver esse problema. Este é meu segundo objetivo no Nanonyam: adicionar muitas funções úteis, como processamento de texto, captura de tela ou simulação de teclas digitadas no sistema (todas, aliás, já estão lá), além de muitas outras funções para resolver tarefas rotineiras .
Testando hardware via porta COM
O 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 útil para depuração e calibração simples de hardware, bem como para a criação de 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 Arduino, a principal utilidade do Nanonyam reside na simplificação de funções, interface e bootloader. Portanto, este projeto deve interessar aos programadores iniciantes e aos que estão satisfeitos com o nível de arduino. Aliás, eu mesmo ainda não estudei o arduino a fundo, pois sempre usei o WinAVR ou o AVR Studio, mas comecei com o assembler. Portanto, o programa de exemplo abaixo ficará um pouco errado, mas bastante funcional.
Olá Habr!
É hora de se familiarizar com alguns recursos do Nanonyam e escrever um programa simples. Vamos escrever em Arduino, mas não da forma usual, mas da forma que consigo agora (já disse que ainda não entendi muito bem esse ambiente). Primeiro, crie um novo esboço e selecione a placa Mega2560.

Salve o esboço em um arquivo e copie a seguir . Seria correto incluir os cabeçalhos das bibliotecas, mas não sei como escrever a compilação de arquivos individuais no Arduino, então por enquanto vamos apenas incluir as bibliotecas diretamente (e todas de uma vez):
#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"Seria ainda mais correto fazer um módulo especial “Nanonyam for Arduino”, que pode ser instalado diretamente do Arduino. Assim que descobrir, farei, mas por enquanto estou apenas mostrando a essência de trabalhar com uma máquina virtual. Escrevemos o seguinte 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);//Задержка и разгрузка процессора
}Esboce com este programa . Descrição detalhada das funções . Espero que os comentários neste código sejam suficientes para entender a essência dele. aqui função sys_Nanonyam() desempenha o papel de uma "senha" para a máquina virtual, que remove as restrições das funções virtuais. Sem esta função, o programa fechará após 3 segundos de operação.
Pressionamos o botão "Verificar" e não deve haver erros.

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

Isso copiará dois arquivos HEX para a pasta de esboço. Pegamos apenas o arquivo sem o prefixo "with_bootloader.mega".
Existem várias maneiras de especificar um arquivo HEX para a máquina virtual Nanonyam, todas elas são descritas . Sugiro criar ao lado do arquivo Nanonyam.exe arquivo caminho, no qual registrar o caminho completo para nosso arquivo HEX. Após o qual você pode correr Nanonyam.exe. Temos uma janela com nossa inscrição.

Da mesma forma, você pode criar programas em outros ambientes, como AVR Studio ou WinAVR.
É aqui que terminamos nosso conhecimento de Nanonyam. A ideia principal deve ser clara. . Se houver pessoas suficientes dispostas a usar este projeto, farei mais exemplos e continuarei a "preencher" as bibliotecas de funções virtuais. Aceitam-se ideias concretas para o desenvolvimento do projeto e relatórios de avarias, bugs e bugs. É aconselhável encaminhá-los para contatos, . E a discussão é bem-vinda nos comentários.
Obrigado a todos pela atenção e boa programação!
Fonte: habr.com
