Bir gün getirmek için çılgın bir fikrim vardı
Projeye Nanonyam (Nanonyam) adını verdim ve hatta bunun için bir logo bile buldum (5 dakika çizdim).
Arduino açısından düşünenler için Nanonyam'ın Windows'u kontrol etmek için sanal bir Arduino kalkanı olduğunu söyleyebiliriz.
Diğer bir deyişle Nanonyam, bayt kodu olarak AVR mikrodenetleyicisi (ATMEGA2560 önerilir) için üretici yazılımı kullanan bir sanal makinedir. Bu sanal makinenin içinde bir AVR çekirdek simülatörü bulunur, ancak 0x0060 ila 0x01FF arasındaki SRAM adreslerinde bulunan çevre birimleri yerine, sanal işlevler (Windows API işlevleri dahil) için özel bir arabirim vardır. Ve burada hemen anlamak çok önemlidir: Nanonyam kodunun, örneğin dosyaları silme veya bir diski biçimlendirme işlevini yanlışlıkla çağırmamak için belirtilen bellek aralığına herhangi bir erişimi olmamalıdır. 0x0200 ile 0xFFFF arasındaki SRAM bellek aralığının geri kalanı (bu, gerçek bir mikrodenetleyiciden daha fazladır), herhangi bir amaç için kullanıcı tarafından kullanılabilir. Gerçek bir mikrodenetleyicinin (veya başka bir mimariden ürün yazılımının) yanlışlıkla başlatılmasına karşı özel bir koruma olduğunu hemen not ediyorum: "tehlikeli" işlevleri etkinleştirmeden önce, özel bir zor sanal işlevi çağırmanız gerekir. Diğer bazı güvenlik özellikleri de vardır.
Nanonyam için programlar oluşturmak için, mevcut tüm sanal işlevleri uygulayan özel kitaplıklar kullanmanız gerekir. Bunun için Nanonyam sanal makinesini ve kitaplıklarını indirin
Nanonyam ev ve ticari kullanım için ücretsizdir. Nanonyam programı "olduğu gibi" sağlanır. Kaynak kodu sağlanmaz.
Program şu anda test aşamasındadır. Windows için basit programlar oluşturmanıza izin veren yaklaşık 200 sanal işlev uygulandı.
Açıkçası, böyle bir sanal makinede karmaşık bir şey oluşturmak işe yaramayacaktır çünkü kod belleği yalnızca 256 kB'dir. Veriler ayrı dosyalarda saklanabilir, grafik kısmı için arabellek harici olarak uygulanır. Tüm işlevler basitleştirildi ve 8 bit mimariye uyarlandı.
Nanonyam'da ne yapabilirsiniz? Birkaç problem buldum.
Program bloklarının geliştirilmesi
Bir keresinde 128x64 noktalı bir grafik ekran için karmaşık bir menü tasarlamam gerekiyordu. Piksellerin nasıl göründüğünü görmek için ürün yazılımını sürekli olarak gerçek bir mikro denetleyiciye yüklemek istemedim. Ve böylece Nanonyam fikri doğdu. Aşağıdaki şekil, aynı menüdeki öğelerden birinin gerçek OLED ekranından bir görüntüsünü göstermektedir. Artık gerçek bir cihaz olmadan üzerinde çalışabilirim.
Nanonyam (nihai fikrinde), mikrodenetleyiciler için program blokları üzerinde çalışmak için iyi bir araçtır, çünkü grafiklerle (ekranları ve göstergeleri simüle edebilirsiniz), dosyalarla (günlükler oluşturabilir, test verilerini okuyabilirsiniz), COM bağlantı noktalarına sahip bir klavye (aynı anda 10 düğmeyi okuyabilirsiniz) (burada ayrı bir öğe).
Hızlı Programlar Oluşturma
Örneğin, 100500 metin dosyasını hızlı bir şekilde işlemeniz gerekiyor. Her birinin açılması, basit bir algoritmaya göre biraz değiştirilmesi, kaydedilmesi ve kapatılması gerekiyor. Python ustasıysanız sizi tebrik ederim, her şeye sahipsiniz. Ancak, sertleştirilmiş bir arduinoysanız (ve birçoğu varsa), Nanonyam bu sorunu çözmenize yardımcı olacaktır. Bu, Nanonyam'daki ikinci hedefim: metin işleme, ekran görüntüsü alma veya sistemde tuş vuruşlarını simüle etme (bu arada, hepsi zaten orada) gibi birçok yararlı işlevin yanı sıra rutin görevleri çözmek için diğer birçok işlevi eklemek. .
Donanımı COM bağlantı noktası üzerinden test etme
Nanonyam, algoritmanıza göre çalışan bir terminal görevi görebilir. Cihazı kontrol etmek ve porttan alınan verileri görüntülemek için küçük bir menü çizebilirsiniz. Analiz için dosyalardan veri kaydedebilir ve okuyabilirsiniz. Donanımda basit hata ayıklama ve kalibrasyonun yanı sıra basit sanal enstrüman kontrol panelleri oluşturmak için kullanışlı bir araç. Öğrenciler ve genç bilim insanları için bu proje çok faydalı olabilir.
programlama eğitimi
Bununla birlikte, tüm Arduino projesinde olduğu gibi, Nanonyam'ın ana faydası, işlevlerin, arayüzün ve önyükleyicinin basitleştirilmesinde yatmaktadır. Bu nedenle, bu proje acemi programcılar ve arduino seviyesinden memnun olanlar için ilgi çekici olmalıdır. Bu arada, arduino'yu hala ayrıntılı olarak çalışmadım çünkü her zaman WinAVR veya AVR Studio kullandım, ancak montajcı ile başladım. Bu nedenle, aşağıdaki örnek program biraz yanlış olacak, ancak oldukça çalışıyor.
Merhaba Habr!
Bazı Nanonyam özelliklerini tanımanın ve basit bir program yazmanın zamanı geldi. Arduino'da yazacağız ama her zamanki gibi değil ama şimdi yapabildiğim şekilde (bu ortamı henüz çok iyi çözemediğimi zaten söyledim). İlk olarak, yeni bir çizim oluşturun ve Mega2560 kartını seçin.
Çizimi bir dosyaya kaydedin ve ardından kopyalayın
#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"
Doğrudan Arduino'dan kurulabilen özel bir “Arduino için Nanonyam” modülü yapmak daha da doğru olacaktır. Çözer çözmez yapacağım ama şimdilik sadece sanal bir makine ile çalışmanın özünü gösteriyorum. Aşağıdaki kodu yazıyoruz:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}
Bu program ile eskiz
"Kontrol Et" düğmesine basıyoruz ve herhangi bir hata olmamalıdır.
Şimdi bir ikili dosya (ürün yazılımı) edinmeniz gerekiyor. menüyü seçin "Sketch>>İkili dosyayı dışa aktar (CTRL+ALT+S)".
Bu, iki HEX dosyasını çizim klasörüne kopyalayacaktır. Yalnızca "with_bootloader.mega" öneki olmayan dosyayı alıyoruz.
Nanonyam sanal makinesine bir HEX dosyası belirtmenin birkaç yolu vardır, bunların tümü açıklanmıştır.
Benzer şekilde, AVR Studio veya WinAVR gibi diğer ortamlarda da programlar oluşturabilirsiniz.
Nanonyam ile tanışıklığımızı burada bitiriyoruz. Ana fikir açık olmalıdır.
İlginiz ve iyi programlamanız için hepinize teşekkür ederim!
Kaynak: habr.com