Pewnego dnia wpadłem na szalony pomysł, żeby zabrać ze sobą
Nazwałem projekt Nanonyam (Nanonyam), a nawet wymyśliłem dla niego logo (rysowałem przez 5 minut).
Dla tych, którzy myślą w kategoriach Arduino, możemy powiedzieć, że Nanonyam to wirtualna tarcza Arduino do sterowania systemem Windows.
Innymi słowy, Nanonyam to maszyna wirtualna, która jako kod bajtowy wykorzystuje oprogramowanie układowe mikrokontrolera AVR (zaleca się ATMEGA2560). Wewnątrz tej maszyny wirtualnej znajduje się symulator rdzenia AVR, ale zamiast peryferiów, które znajdują się pod adresami SRAM od 0x0060 do 0x01FF, znajduje się specjalny interfejs do funkcji wirtualnych (w tym funkcji Windows API). I tutaj bardzo ważne jest, aby od razu zrozumieć: kod dla Nanonyam nie powinien mieć żadnego dostępu do określonego zakresu pamięci, aby przypadkowo nie wywołać np. funkcji usuwania plików lub formatowania dysku. Reszta pamięci SRAM w zakresie od 0x0200 do 0xFFFF (to więcej niż w prawdziwym mikrokontrolerze) jest dostępna dla użytkownika w dowolnym celu. Od razu zauważam, że istnieje specjalna ochrona przed przypadkowym uruchomieniem oprogramowania układowego prawdziwego mikrokontrolera (lub oprogramowania układowego z innej architektury): przed aktywacją „niebezpiecznych” funkcji należy wywołać specjalną podstępną funkcję wirtualną. Istnieją również inne funkcje bezpieczeństwa.
Aby tworzyć programy dla Nanonyam, musisz użyć specjalnych bibliotek, które implementują wszystkie dostępne obecnie funkcje wirtualne. Pobierz maszynę wirtualną Nanonyam i biblioteki dla niej
Nanonyam jest darmowy do użytku domowego i komercyjnego. Program Nanonyam jest dostarczany na zasadzie „taki, jaki jest”. Nie podano kodu źródłowego.
Program jest obecnie w fazie testów. Zaimplementowano około 200 wirtualnych funkcji, które pozwalają na tworzenie prostych programów dla Windows.
Oczywiście stworzenie czegoś skomplikowanego na takiej maszynie wirtualnej nie zadziała, ponieważ pamięć na kod to tylko 256 kB. Dane mogą być przechowywane w osobnych plikach, bufor dla części graficznej jest realizowany zewnętrznie. Wszystkie funkcje są uproszczone i dostosowane do architektury 8-bitowej.
Co można robić w Nanonyam? Wymyśliłem kilka problemów.
Opracowanie bloków programowych
Kiedyś musiałem zaprojektować złożone menu dla wyświetlacza graficznego o rozdzielczości 128x64 punktów. Naprawdę nie chciałem ciągle ładować oprogramowania układowego do prawdziwego mikrokontrolera, aby zobaczyć, jak wyglądają piksele. I tak narodził się pomysł Nanonyam. Poniższy rysunek przedstawia obraz z rzeczywistego wyświetlacza OLED jednego z elementów tego samego menu. Teraz mogę to zrobić bez prawdziwego urządzenia.
Nanonyam (w swoim ostatecznym pomyśle) jest dobrym narzędziem do opracowywania bloków programowych dla mikrokontrolerów, ponieważ istnieją funkcje do pracy z grafiką (można symulować wyświetlacze i wskaźniki), z plikami (można tworzyć logi, odczytywać dane testowe), z klawiatura (można czytać do 10 przycisków jednocześnie), z portami COM (tu osobna pozycja).
Tworzenie szybkich programów
Na przykład musisz szybko przetworzyć 100500 plików tekstowych. Każdy trzeba otworzyć, nieco zmodyfikować według jakiegoś prostego algorytmu, zapisać i zamknąć. Jeśli jesteś mistrzem Pythona, gratuluję ci, masz wszystko. Ale jeśli jesteś zahartowanym arduino (a jest ich wielu), to Nanonyam pomoże ci w rozwiązaniu tego problemu. To jest mój drugi cel w Nanonyam: dodać wiele przydatnych funkcji, takich jak przetwarzanie tekstu, robienie zrzutów ekranu lub symulowanie naciśnięć klawiszy w systemie (które, nawiasem mówiąc, już tam są), 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 działa zgodnie z Twoim algorytmem. Możesz narysować małe menu do sterowania urządzeniem i wyświetlania danych otrzymanych z portu. Możesz zapisywać i odczytywać dane z plików do analizy. Poręczne narzędzie do prostego debugowania i kalibracji sprzętu, a także do tworzenia prostych wirtualnych paneli kontrolnych przyrządów. Dla studentów i młodych naukowców ten projekt może być bardzo przydatny.
Szkolenie z programowania
Jednak, podobnie jak w przypadku całego projektu Arduino, główna użyteczność Nanonyam polega na uproszczeniu funkcji, interfejsu i bootloadera. Dlatego tym projektem powinni zainteresować się początkujący programiści oraz ci, którzy są zadowoleni z poziomu arduino. Nawiasem mówiąc, sam nadal nie studiowałem szczegółowo arduino, ponieważ zawsze korzystałem z WinAVR lub AVR Studio, ale zaczynałem od asemblera. Dlatego poniższy przykładowy program będzie trochę błędny, ale całkiem działający.
Witaj Habra!
Czas zapoznać się z niektórymi funkcjami Nanonyam i napisać prosty program. Będziemy pisać w Arduino, ale nie w zwykły sposób, ale w sposób, w jaki teraz mogę (już powiedziałem, że nie rozgryzłem jeszcze dobrze tego środowiska). Najpierw utwórz nowy szkic i wybierz płytkę Mega2560.
Zapisz szkic do pliku i skopiuj dalej
#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 bardziej poprawne byłoby stworzenie specjalnego modułu „Nanonyam dla Arduino”, który można zainstalować bezpośrednio z Arduino. Jak tylko ogarnę to zrobię, ale na razie pokazuję tylko esencję pracy z maszyną wirtualną. Piszemy następujący 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);//Задержка и разгрузка процессора
}
Szkicuj tym programem
Wciskamy przycisk „Sprawdź” i nie powinno być żadnych błędów.
Teraz musisz pobrać plik binarny (oprogramowanie układowe). Wybierz menu "Szkic>>Eksportuj plik binarny (CTRL+ALT+S)".
Spowoduje to skopiowanie dwóch plików HEX do folderu szkicu. Bierzemy tylko plik bez prefiksu „with_bootloader.mega”.
Istnieje kilka sposobów podania pliku HEX do maszyny wirtualnej Nanonyam, wszystkie są opisane
Podobnie możesz tworzyć programy w innych środowiskach, takich jak AVR Studio lub WinAVR.
Na tym kończymy naszą znajomość z Nanonyam. Główna idea powinna być jasna.
Dziękuję wszystkim za uwagę i dobry program!
Źródło: www.habr.com