áá
áºáá±á·ááŸá¬ áá»áœááºáá±á¬áº áá°áá±á¬ááºáá¬ááá¯á· á¡ááŒá¶á¡á
ááºáá
áºáᯠááŸááá²á·áá«áááºá
ááá±á¬áá»ááºááᯠNanonyam (Nanonyam) ááá¯á· áá±á«áºááŒá®áž á¡á²áá«á¡ááœáẠááá¯ááá¯áá
áºáá¯áá±á¬áẠáá«áá¬ááẠ(á
áááá
áºáá±á¬ááºááœá²áááº)á
Arduino áá²á· áááºáááºáá¬ááẠNanonyam áᬠWindows ááᯠááááºážáá»á¯ááºááá¯á·á¡ááœáẠvirtual Arduino á¡áá¬á¡áá¶áá
áºáá¯ááá¯á· ááŒá±á¬ááá¯á·ááá«áááºá
áá áºáááºážá¡á¬ážááŒáá·áºá Nanonyam ááẠbytecode á¡ááŒá ẠAVR microcontroller á¡ááœáẠfirmware ááá¯á¡áá¯á¶ážááŒá¯ááá·áº virtual machine áá áºáᯠ(ATMEGA2560 ááá¯á¡ááŒá¶ááŒá¯áá¬ážáááº)á ဠvirtual machine á¡ááœááºážááœáẠAVR core simulator ááŒá áºáááºá ááá¯á·áá±á¬áº SRAM ááááºá á¬áá»á¬ážááœáẠ0x0060 á០0x01FF ááœááºááŸááá±á¬ á¡áá¶áá»á¬ážá¡á á¬ážá virtual functions (Windows API áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡áá«á¡áááº) á¡ááœáẠá¡áá°áž interface áá áºáá¯ááŸááááºá á€áá±áá¬ááœáẠáá»ááºáá»ááºážáá¬ážáááºáááºááŸá¬ á¡ááœááºá¡áá±ážááŒá®ážáááº- Nanonyam á¡ááœáẠáá¯ááºááẠáááºááŸááºáá¬ážáá±á¬ ááŸááºáá¬ááºá¡ááá¯ááºážá¡ááŒá¬ážááá¯á· áááºáá±á¬ááºááœáá·áºáááŸáá á±áá¬áá°á á¥ááá¬á ááá¯ááºáá»á¬ážááᯠáá»ááºááŒááºáž ááá¯á·ááá¯áẠáá áºááºááᯠáá±á¬áºáááºáá»ááŒááºážá áá¯ááºáá±á¬ááºáá»ááºááᯠááá±á¬áºáááá±á«áºááá¯ááŒááºážáá»áá¯áž áááŒá áºá á±áááºá SRAM áááºááá¯áá®ááá»ááºá¡ááœá¬á¡áá±ážááẠ0x0200 á០0xFFFF (áááºážááẠáááá·áºááá¯ááºáááá¯ááœááºáááá¯áá¬áá áºáá¯ááẠááá¯áá±áááº) ááᯠáááºááá·áºáááºááœááºáá»ááºá¡ááœááºáááᯠá¡áá¯á¶ážááŒá¯áá°á០áááŸáááá¯ááºáá«áááºá áááá·áºááá¯ááºáááá¯ááœááºáááá¯áᬠ(ááá¯á·ááá¯áẠá¡ááŒá¬ážáááá¯áá¬áá áºáá¯á០firmware) á firmware ááᯠááá±á¬áºáá áá áºááœáŸááºááŒááºážá០á¡áá°ážáá¬ááœááºááŸá¯áá áºáá¯ááŸáááŒá±á¬ááºáž áá»áœááºá¯ááºáá»ááºáá»ááºážáááááŒá¯áááá«áááº- "á¡áá¹ááá¬ááºááŸááá±á¬" áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áááºáááœááºážáá®á áááºááẠá¡áá°ážáááºážáá»ááºáá±á¬ virtual function ááᯠáá±á«áºááẠááá¯á¡ááºáá«áááºá á¡ááŒá¬ážáá¯á¶ááŒá¯á¶áá±ážá¡ááºá¹áá«áááºáá»á¬ážáááºáž ááŸááá±ážáááºá
Nanonyam á¡ááœáẠáááá¯ááááºáá»á¬ážáááºáá®ážáááºá áááºááŸááááŸáááá¯ááºááá·áº virtual functions á¡á¬ážáá¯á¶ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº á¡áá°ážá
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáááºá¡áá¯á¶ážááŒá¯ááẠááá¯á¡ááºáá«áááºá áááºážá¡ááœáẠNanonyam virtual machine ááŸáá·áº library áá»á¬ážááᯠáá±á«ááºážáá¯ááºáá¯ááºáá«á
Nanonyam ááẠá¡áááºááŸáá·áº áá¯ááºáááºážáá¯á¶ážá¡ááœáẠá¡ááá²á·ááŒá áºáááºá Nanonyam áááá¯ááááºááᯠ"á¡ááŒá áº" á¡ááŒá±áá¶ááŒáá·áº áá¶á·ááá¯ážáá¬ážáááºá á¡áááºážá¡ááŒá áºáá¯ááºááᯠááá±ážáá¬ážáá«á
áááá¯ááááºááẠáááºááŸáááœáẠá
ááºážáááºáá²á¡ááá·áºááœáẠááŸááá±áááºá Windows á¡ááœáẠááá¯ážááŸááºážáá±á¬ áááá¯ááááºáá»á¬ážááᯠáááºáá®ážááá¯ááºá
á±ááá·áº virtual function 200 ááá·áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá
áá¯ááºá¡ááœáẠáááºááá¯áá®ááẠ256 kB áá¬ááŸááá±á¬ááŒá±á¬áá·áº ááá¯ááá¯á·áá±á¬ virtual machine ááœáẠááŸá¯ááºááœá±ážáá±á¬á¡áá¬áá
áºáá¯ááᯠáááºáá®ážááŒááºážááẠá¡áá¯ááºáááŒá
áºáá«á áá±áá¬áá»á¬ážááᯠáá®ážááŒá¬ážááá¯ááºáá»á¬ážááœáẠááááºážáááºážáá¬ážááá¯ááºááŒá®áž ááááºáá
áºá¡ááá¯ááºážá¡ááœáẠááŒá¬ážáá¶ááᯠááŒááºáááœáẠáá¯ááºáá±á¬ááºáá¬ážáááºá áá¯ááºáá±á¬ááºáá»ááºá¡á¬ážáá¯á¶ážááᯠ8-bit áááá¯áá¬á¡ááœáẠááá¯ážááŸááºážááŒá®áž ááá¯ááºáá»á±á¬áá®ááœá±ááŒá
áºá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážáááºá
Nanonyam ááŸá¬ áááºáá¬áá¯ááºááá¯ááºáá²á ááŒá¿áá¬á¡áááºážáááºáá²á· áááºáá¬áá²á·áááºá
áááá¯ááááºáá¯ááºááœááºáá»á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž
128x64 á¡á ááºááááºáá áºááŒáááŸá¯á¡ááœáẠááŸá¯ááºááœá±ážáá±á¬áá®áá°ážáá áºáá¯ááᯠáá áºááŒááẠáá®ááá¯ááºážááœá²ááẠááá¯á¡ááºáá«áááºá pixels ááœá±áá²á·áá¯á¶áááºážááá¹áá¬ááºááá¯ááŒáá·áºááá¯á· firmware ááᯠáááá·áº microcontroller ááŸá¬ á¡áááºáááŒááºááááºáá»ááºáá«áá°ážá ááá¯á·ááŒá±á¬áá·áº áááœááºáááºá á¡ááœá±ážá¡ááŒááºááᯠááœá±ážááœá¬ážáá²á·áááºá á¡á±á¬ááºáá«áá¯á¶ááẠáá°áá®áá±á¬ áá®áá°ážááŸá á¡áá¬áá»á¬ážáá²á០áá áºáá¯á áááá·áº OLED áááºáá¬ážááŒááºá០áá¯ááºáá¯á¶áá áºáá¯á¶ááᯠááŒááá¬ážáááºá ááᯠáá»áœááºá¯ááºááẠáááºážááᯠá á áºááŸááºáá±á¬ á ááºááá«áá² áá¯ááºáá±á¬ááºááá¯ááºáá«ááŒá®á
Nanonyam (áááºážááá±á¬ááºáá¯á¶ážá¡ááŒá¶ááœááº) ááẠááá¯ááºáááá¯ááœááºáááá¯áá¬áá»á¬ážá¡ááœáẠáááá¯ááááºááá±á¬ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠáá±á¬ááºážááœááºáá±á¬ tool áá
áºáá¯ááŒá
áºááŒá®ážá ááááºáá
áºááŒáá·áºá¡áá¯ááºáá¯ááºáááºáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž (áááºááŒáááŸá¯áá»á¬ážááŸáá·áºááœáŸááºážááááºážáá»á¬ážááá¯áá¯á¶áá°á¡á±á¬ááºáá¯ááºááá¯ááºáááº)á ááá¯ááºáá»á¬áž (ááŸááºáááºážáá»á¬ážáááºáá®ážááá¯ááºáááºá á
ááºážáááºáá±áá¬áááºááá¯ááºáááº) ááŸáá·áºá¡áá°á COM áá±á«ááºáá»á¬ážáá«áá±á¬ áá®ážáá¯áẠ(áááºááẠáá
áºáá»áááºáááºážááœáẠááá¯áẠáá áá¯á¡áá áááºááá¯ááºáááº)á
á¡ááŒááºáááá¯ááááºáá»á¬áž áááºáá®ážááŒááºážá
á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠ100500 á á¬áá¬ážááá¯ááºáá»á¬ážááᯠá¡ááŒááºáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá áá áºáá¯áá»ááºážá á®ááᯠááœáá·áºááẠááá¯á¡ááºáááºá á¡áá»áá¯á·áá±á¬ ááá¯ážááŸááºážáá±á¬ algorithm á¡áá ááááºážáááºážááŒá®áž ááááºááẠááá¯á¡ááºáá«áááºá á¡áááºá áááºááẠPython master ááŒá áºáá«áá áá»áœááºá¯ááºááẠááá·áºá¡á¬áž áá¯ááºááŒá¯áá«áááºá ááá·áºááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááŸááááºá áá«áá±ááá·áº áááºáᬠáá¬áá»á±á¬áá²á· arduino áá áºáá±á¬ááºááá¯ááẠ(áá«ááœá± á¡áá»á¬ážááŒá®ážááŸááá«áááº)á Nanonyam á áá®ááŒá¿áá¬ááᯠááŒá±ááŸááºážáá¬ááŸá¬ ááá·áºááᯠáá°áá®áá«áááá·áºáááºá Nanonyam ááœáẠáá»áœááºá¯ááºá áá¯ááááááºážááá¯ááºááŒá áºáááº- á á¬áá¬ážáá¯ááºáá±á¬ááºááŒááºážá áááºáá¬ážááŒááºáá¬ááºáá¯á¶áá»á¬ážááá¯ááºááŒááºáž ááá¯á·ááá¯áẠáá±á¬á·áááºááŒááºážáá»á¬ážááᯠáá¯á¶áá±á¬áºááŒááºážáá²á·ááá¯á·áá±á¬ á¡áá¯á¶ážáááºááá·áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áœá¬ááᯠááá·áºááœááºážááẠ(ááá¯á¡áá¬á¡á¬ážáá¯á¶ážááŸá¬ ááŸáááŸáá·áºááŒá®ážáá¬ážááŒá áºáááº) á¡ááŒáẠáá¯á¶ááŸááºáá¯ááºáá±á¬ááºá áá¬áá»á¬ážááᯠááŒá±ááŸááºážáááºá¡ááœáẠá¡ááŒá¬ážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áœá¬ááᯠááá·áºááœááºážáááºá .
COM á¡áá±á«ááºááŸáá áºááá·áº áá¬á·ááºáá²ááᯠá ááºážáááºááŒááºážá
Nanonyam ááẠááá·áº algorithm á¡á á¡áá¯ááºáá¯ááºáá±á¬ terminal áá áºáá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºááá¯ááºáááºá á ááºáá á¹á ááºážááᯠááááºážáá»á¯ááºáááºááŸáá·áº ááááºáááºážááŸáááŸáááá·áºáá±áá¬ááá¯ááŒáááẠáá®áá°ážá¡áá±ážáá áºáá¯ááᯠáááºááœá²ááá¯ááºáááºá ááœá²ááŒááºážá áááºááŒá¬áááºá¡ááœáẠááá¯ááºáá»á¬ážá០á¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážááŒá®áž áááºááá¯ááºáááºá ááá¯ážááŸááºážáá±á¬ á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážááŸáá·áº áá¬á·ááºáá²ááᯠáá»áááºááŸáááŒááºážá¡ááœáẠá¡áá¯á¶ážáááºááá·áºáááááá¬áá áºáá¯á¡ááŒáẠááá¯ážááŸááºážáá±á¬ virtual áá°áááá¬ááááºážáá»á¯ááºááŸá¯ panel áá»á¬ážáááºáá®ážáááºá¡ááœáẠá¡áá¯á¶ážáááºáá±á¬áááááá¬áá áºáá¯ááŒá áºáááºá áá»á±á¬ááºážáá¬ážáá»á¬ážááŸáá·áº áá°áááºáááá¹áá¶ááá¬ááŸááºáá»á¬ážá¡ááœáẠá€ááá±á¬áá»ááºááẠá¡ááœááºá¡áá¯á¶ážáááºáá«áááºá
Programming áááºáááºáž
ááá¯á·áá±á¬áºáááºážá Arduino ááá±á¬áá»ááºáá áºáá¯áá¯á¶ážáá²á·ááá¯á·áááºá Nanonyam á á¡áááá¡áá¯á¶ážáááºááŸá¯ááẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá interface ááŸáá·áº bootloader ááá¯á·ááᯠááá¯ážááŸááºážá á±ááŒááºážááœáẠáááºááŸááááºá ááá¯á·ááŒá±á¬áá·áºá á€ááá±á¬áá»ááºááẠá¡ááœá±á·á¡ááŒá¯á¶áááŸááá±ážáá±á¬ áááá¯ááááºáá¬áá»á¬ážááŸáá·áº arduino á¡ááá·áºááᯠáá»á±áááºáá±áá°áá»á¬ážá¡ááœáẠá áááºáááºá á¬ážááœááºááŒá áºááá·áºáááºá á áá¬ážáá ááºá áá»áœááºá¯ááºááá¯ááºááá¯áẠWinAVR ááá¯á·ááá¯áẠAVR Studio ááᯠá¡ááŒá²áá¯á¶ážáá±á¬ááŒá±á¬áá·áº arduino ááᯠáá»áœááºá¯ááºááá¯ááºááá¯áẠá¡áá±ážá ááẠááá±á·áá¬ááá±ážáá«á ááá¯á·ááŒá±á¬áá·áºá á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬á¥ááá¬áááá¯ááááºáááºá¡áááºážáááºááŸá¬ážáá±á¬áºáááºážá¡áá¯ááºáá¯ááºáááºá
áááºá¹ááá¬áá« Habrá
Nanonyam á¡ááºá¹áá«áááºá¡áá»áá¯á·ááŸáá·áº áááºážááŸá®ážááŒá®áž ááá¯ážááŸááºážáá±á¬ áááá¯ááááºáá áºáá¯ááᯠáá±ážáá¬ážááẠá¡áá»áááºáá»áá±á¬ááºááŒá®ááŒá áºáááºá Arduino áá²á· áá±ážáá«áááºá áá«áá±ááá·áº áá¯á¶ááŸááºáááºážáá²á·áá±á¬á· ááá¯ááºáá«áá°ážá áá«áá±ááá·áº á¡áᯠáááºááá¯ááºááá±á¬ááºáá±á¬á· (áá®áááºáááºážáá»ááºááᯠáá±á¬ááºážáá±á¬ááºážáá ááºážá á¬ážááá±ážáá°ážááá¯á· ááŒá±á¬áá¬ážááŒá®ážáá¬ážáá«)á ááááŠážá áœá¬ áá¯á¶ááŒááºážá¡áá áºáá áºáá¯áááºáá®ážááŒá®áž Mega2560 áá¯ááºááá¯ááœá±ážáá»ááºáá«á
áá¯á¶ááŒááºážááᯠááá¯ááºáá
áºáá¯ááœáẠááááºážáááºážááŒá®áž áá±á¬ááºááœáẠáá±á¬áºáá®áá°ážáá«á
#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"
Arduino ááŸááá¯ááºááá¯ááºááá·áºááœááºážááá¯ááºáá±á¬ á¡áá°áž module âNanonyam for Arduinoâ ááᯠááŒá¯áá¯ááºááŒááºážááẠááá¯ááááºááŸááºáá±áááá·áºáááºá áá«áá¬ážáááºááŒá®ážáá¬áá²á· áá«á¡á²áá«ááᯠáá«áá¯ááºáááºá áá«áá±ááá·áº á¡áá¯áá±á¬áá±á¬áááºááŸá¬ virtual machine áá²á· á¡áá¯ááºáá¯ááºááŒááºážáá²á· á¡ááŸá áºáá¬áááᯠáá«ááŒáá±áá¬á áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«áá¯ááºááᯠáá±ážáááºá
//СÑÐ°Ð·Ñ Ð¿ÐŸÑле запÑÑка ÑОÑÑеЌ ÑекÑÑ Ð² ПкМе
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);//ÐаЎеÑжка О ÑазгÑÑзка пÑПÑеÑÑПÑа
}
á€á¡á
á®á¡á
ááºááŒáá·áº áá¯á¶ááŒááºáž
áá»áœááºá¯ááºááá¯á·ááẠ"Check" ááá¯ááºááá¯ááŸáááºááŒá®áž áááºááá·áºá¡ááŸá¬ážá¡ááœááºážáá»áŸ áááŒá áºááá·áºáá«á
ááá¯áááºááẠbinary ááá¯áẠ(firmware) ááá¯ááááºááá¯á¡ááºáááºá áá®áá°ážááá¯ááœá±ážáá»ááºáá«"áá¯á¶ááŒááºáž>>ááœáááá¯ááºááᯠáá¯ááºáá°áá« (CTRL+ALT+S)"á
áááºážááẠHEX ááá¯ááºááŸá
áºáá¯ááᯠáá¯á¶ááŒááºážááá¯ááºááœá²ááá¯á· áá°ážáá°áááºááŒá
áºáááºá ááŸá±á·ááẠ"with_bootloader.mega" ááá«áá² ááá¯ááºááá¯áᬠáá°áá«áááºá
Nanonyam virtual machine ááá¯á· HEX ááá¯ááºááᯠáááºááŸááºááẠáááºážáááºážáá»á¬ážá
áœá¬ ááŸáááŒá®áž áááºážááá¯á·á¡á¬ážáá¯á¶ážááᯠáá±á¬áºááŒáá¬ážáá«áááºá
á¡áá¬ážáá°á áááºááẠAVR Studio ááá¯á·ááá¯áẠWinAVR áá²á·ááá¯á·áá±á¬ á¡ááŒá¬ážáááºáááºážáá»ááºáá»á¬ážááœáẠáááá¯ááááºáá»á¬ážááᯠáááºáá®ážááá¯ááºáááºá
á€áá±áá¬á áá»áœááºá¯ááºááá¯á·á á¡ááá¡áá»áœááºážááᯠNanonyam ááŸáá·áº ááŒá®ážáá¯á¶ážá
á±áá«áááºá á¡ááá á¡áá°á¡áááá±á¬á· ááŸááºážáá«áááºá
áááºá á¡á¬áá¯á¶á
áá¯ááºááŸá¯ááŸáá·áº áá±á¬ááºážááœááºáá±á¬ á¡á
á®á¡á
ááºá¡ááœáẠá¡á¬ážáá¯á¶ážááᯠáá»á±ážáá°ážáááºáá«áááºá
source: www.habr.com