
Pewnego razu wpadłem na szalony pomysł, aby połączyć . Poświęciłem na to dużo czasu i to zrobiłem. Wyszło spektakularnie i bezużytecznie, ale mi się spodobało. Pół roku temu wpadłem na kolejny szalony pomysł. Tym razem nie tak efektowny, ale o wiele bardziej użyteczny. Również poświęciłem na niego dużo czasu. W tym artykule przedstawiam wersję beta mojego drugiego szalonego pomysłu.
Projekt nazwałem Nanonyam i nawet stworzyłem dla niego logo (rysowałem przez całe 5 minut).

Dla tych, którzy myślą w kategoriach Arduino, można powiedzieć, że Nanonyam to wirtualny shield Arduino do zarządzania Windows.
Innymi słowy, Nanonyam to wirtualna maszyna, w której jako kod bajtowy używana jest firmware dla mikrokontrolera AVR (zaleca się ATMEGA2560). Wewnątrz tej wirtualnej maszyny znajduje się symulator rdzenia AVR, ale zamiast urządzeń peryferyjnych, które mieszczą się w adresach SRAM od 0x0060 do 0x01FF, znajduje się specjalny interfejs do wirtualnych funkcji (w tym funkcji Windows API). I tutaj ważne jest, aby zrozumieć: kod dla Nanonyam nie powinien mieć żadnych odniesień do podanego zakresu pamięci, aby przypadkiem nie wywołać, na przykład, funkcji usuwania plików lub formatowania dysku. Pozostały zakres pamięci SRAM od 0x0200 do 0xFFFF (to więcej niż w rzeczywistym mikrokontrolerze) jest dostępny dla użytkownika do dowolnych celów. Od razu podkreślam, że istnieje specjalna ochrona przed przypadkowym uruchomieniem firmware rzeczywistego mikrokontrolera (lub firmware z innej architektury): zanim aktywujesz „niebezpieczne” funkcje, musisz wywołać specjalną sprytną funkcję wirtualną. Istnieje także kilka innych elementów ochrony.
Aby tworzyć programy dla Nanonyam, należy używać specjalnych bibliotek, w których zrealizowane są wszystkie dostępne do tej pory wirtualne funkcje. Możesz pobrać wirtualną maszynę Nanonyam i biblioteki do niej . A teraz . Tak, moja strona jest bardzo prymitywna i nie jest dostosowana do urządzeń mobilnych.
Program Nanonyam jest bezpłatny do użytku domowego i komercyjnego. Program Nanonyam jest udostępniany na zasadzie „jak jest”. Kod źródłowy nie jest udostępniany.
Obecnie program jest w fazie testowania. Zrealizowano około 200 wirtualnych funkcji, które umożliwiają tworzenie prostych programów dla Windows.
Oczywiste jest, że w takiej maszynie wirtualnej nie uda się stworzyć nic skomplikowanego, ponieważ pamięć na kod wynosi zaledwie 256 kB. Dane można przechowywać w oddzielnych plikach, bufor dla części graficznej jest realizowany zewnętrznie. Wszystkie funkcje zostały uproszczone i dostosowane do architektury 8-bitowej.
Co można zrobić w Nanonyam? Wymyśliłem kilka zadań.
Praca nad blokami programowymi
Pewnego razu musiałem opracować skomplikowane menu dla wyświetlacza graficznego 128×64 pikseli. Nie chciało mi się ciągle wgrywać oprogramowania do prawdziwego mikrokomputera, aby zobaczyć, jak wyglądają piksele. Tak powstał pomysł Nanonyam. Na poniższym rysunku zobaczysz obrazek z rzeczywistego wyświetlacza OLED jednego z elementów tego menu. Teraz mogę nad nim pracować bez rzeczywistego urządzenia.

Nanonyam (w swojej ostatecznej formie) jest dobrym narzędziem do pracy nad blokami programowymi dla mikrokomputerów, ponieważ są funkcje do pracy z grafiką (można symulować wyświetlacze i wskaźniki), z plikami (można prowadzić logi, odczytywać dane testowe), z klawiaturą (można odczytywać do 10 przycisków jednocześnie), z portami COM (tutaj osobny punkt).
Tworzenie szybkich programów
Na przykład potrzebujesz szybko przetworzyć 100500 plików tekstowych. Każdy trzeba otworzyć, trochę zmienić według jakiegoś prostego algorytmu, zapisać i zamknąć. Jeśli jesteś mistrzem Pythona, to gratulacje, masz wszystko. Ale jeśli jesteś zapalonym programistą Arduina (a takich jest sporo), to Nanonyam pomoże ci w rozwiązaniu tego zadania. To jest moje drugie celem w Nanonyam: dodać wiele przydatnych funkcji, takich jak przetwarzanie tekstu, tworzenie zrzutów ekranu czy symulacja naciśnięć klawiszy w systemie (to wszystko, swoją drogą, już istnieje), a także wiele innych funkcji do rozwiązywania rutynowych zadań.
Testowanie sprzętu przez port COM
Nanonyam może działać jako terminal, który realizuje twój algorytm. Można stworzyć małe menu do zarządzania urządzeniem oraz wyświetlania danych otrzymywanych z portu. Można również zapisywać i odczytywać dane z plików w celach analizy. To wygodne narzędzie do prostego debugowania i kalibracji sprzętu, a także do tworzenia prostych wirtualnych paneli kontrolnych urządzenia. Dla studentów i młodych naukowców ten projekt może okazać się bardzo pomocny.
Nauka programowania
Jednak, jak w całym projekcie Arduino, główną wartością Nanonyam jest prostota funkcji, interfejsu i programatora. Dlatego ten projekt powinien być interesujący dla początkujących programistów oraz dla tych, którzy są zadowoleni z poziomu Arduino. Swoją drogą, sam do tej pory nie zgłębiłem Arduino szczegółowo, ponieważ zawsze korzystałem z WinAVR lub AVR Studio, a zaczynałem od asemblera. Dlatego poniższy przykład programu będzie nieco niepoprawny, ale w pełni funkcjonalny.
Cześć, Habr!
Nadszedł czas, aby zapoznać się z niektórymi funkcjami Nanonyam i napisać prosty program. Będziemy pisać w Arduino, ale nie tak, jak to zazwyczaj robi się, lecz tak, jak potrafię teraz (już mówiłem, że nie do końca opanowałem to środowisko). Na początek tworzymy nowy szkic i wybieramy płytkę Mega2560.

Zapisujemy szkic w pliku i obok kopiujemy . Poprawnie byłoby dołączyć nagłówki bibliotek, ale nie wiem, jak w Arduino ustawiać kompilację poszczególnych plików, więc na razie po prostu dołączę biblioteki bezpośrednio (i to wszystkie naraz):
#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"Jeszcze lepiej byłoby stworzyć specjalny moduł „Nanonyam dla Arduino”, który można instalować bezpośrednio z Arduino. Gdy tylko się z tym uporam, to zrobię, a na razie pokazuję, jak pracować z wirtualną maszyną. Piszę taki kod:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}Szkic z tym programem . Szczegółowy opis funkcji . Mam nadzieję, że komentarzy w tym kodzie jest wystarczająco dużo, aby zrozumieć jego istotę. Tutaj funkcja sys_Nanonyam() pełni rolę 'hasła' dla wirtualnej maszyny, które znosi ograniczenia na wirtualne funkcje. Bez tej funkcji program zamknie się po 3 sekundach działania.
Klikamy przycisk „Sprawdź” i nie powinno być żadnych błędów.

Teraz musimy uzyskać plik binarny (firmware). Wybieramy menu „Szkic>>Eksportuj plik binarny (CTRL+ALT+S)«.

W tym czasie do folderu ze szkicem skopiowane zostaną dwa pliki HEX. Przyjmujemy tylko plik bez prefixu „with_bootloader.mega”.
Istnieje kilka sposobów wskazania pliku HEX maszynie wirtualnej Nanonyam, wszystkie zostały opisane . Proponuję stworzyć obok pliku Nanonyam.exe pliku Nanonyam.path, w którym należy wpisać pełną ścieżkę do naszego pliku HEX. Po czym można uruchomić Nanonyam.exe. Pojawi się okno z naszym napisem.

Podobnie można tworzyć programy w innych środowiskach, na przykład w AVR Studio lub WinAVR.
Na tym kończymy nasze zapoznanie z Nanonyam. Główna idea powinna być jasna. . Jeśli będzie wystarczająco chętnych do korzystania z tego projektu, stworzę więcej przykładów i będę kontynuować „uzupełnianie” bibliotek funkcji wirtualnych. Przyjmuję konkretne pomysły na rozwój projektu oraz raporty o usterkach, błędach i niedociągnięciach. Preferowane jest przesyłanie ich za pośrednictwem kontaktów, . Dyskusje są mile widziane w komentarzach.
Dziękuję wszystkim za uwagę i udanego programowania!
Źródło: habr.com
