Suatu hari saya punya ide gila untuk dibawa
Saya menamai proyek tersebut Nanonyam (Nanonyam) dan bahkan membuat logo untuknya (saya menggambar selama 5 menit).
Bagi mereka yang berpikir tentang Arduino, kita dapat mengatakan bahwa Nanonyam adalah perisai Arduino virtual untuk mengontrol Windows.
Dengan kata lain, Nanonyam adalah mesin virtual yang menggunakan firmware untuk mikrokontroler AVR (disarankan ATMEGA2560) sebagai bytecode. Di dalam mesin virtual ini terdapat simulator inti AVR, tetapi alih-alih perangkat periferal, yang terletak di alamat SRAM dari 0x0060 hingga 0x01FF, terdapat antarmuka khusus untuk fungsi virtual (termasuk fungsi Windows API). Dan di sini sangat penting untuk segera dipahami: kode untuk Nanonyam tidak boleh memiliki akses apa pun ke rentang memori yang ditentukan, agar tidak memanggil secara tidak sengaja, misalnya, fungsi menghapus file atau memformat disk. Rentang memori SRAM lainnya dari 0x0200 hingga 0xFFFF (ini lebih dari mikrokontroler asli) tersedia untuk pengguna untuk tujuan apa pun. Saya segera mencatat bahwa ada perlindungan khusus terhadap peluncuran firmware yang tidak disengaja dari mikrokontroler asli (atau firmware dari arsitektur lain): sebelum mengaktifkan fungsi "berbahaya", Anda perlu memanggil fungsi virtual rumit khusus. Ada beberapa fitur keamanan lainnya juga.
Untuk membuat program untuk Nanonyam, Anda perlu menggunakan pustaka khusus yang mengimplementasikan semua fungsi virtual yang tersedia saat ini. Unduh mesin virtual dan perpustakaan Nanonyam untuk itu
Nanonyam gratis untuk penggunaan rumah dan komersial. Program Nanonyam disediakan berdasarkan "sebagaimana adanya". Kode sumber tidak disediakan.
Program ini sedang dalam tahap pengujian. Menerapkan sekitar 200 fungsi virtual yang memungkinkan Anda membuat program sederhana untuk Windows.
Jelas, membuat sesuatu yang rumit dalam mesin virtual seperti itu tidak akan berhasil, karena memori untuk kode tersebut hanya 256 kB. Data dapat disimpan dalam file terpisah, buffer untuk bagian grafik diimplementasikan secara eksternal. Semua fungsi disederhanakan dan diadaptasi untuk arsitektur 8-bit.
Apa yang dapat Anda lakukan di Nanonyam? Saya datang dengan beberapa masalah.
Pengembangan blok program
Saya pernah perlu mendesain menu yang kompleks untuk tampilan grafis 128x64 dot. Saya benar-benar tidak ingin terus-menerus memuat firmware ke mikrokontroler asli untuk melihat tampilan pikselnya. Maka lahirlah ide Nanonyam. Gambar di bawah menunjukkan gambar dari tampilan OLED asli dari salah satu item di menu yang sama. Sekarang saya dapat mengerjakannya tanpa perangkat nyata.
Nanonyam (dalam ide terakhirnya) adalah alat yang bagus untuk mengerjakan blok program untuk mikrokontroler, karena ada fungsi untuk bekerja dengan grafik (Anda dapat mensimulasikan tampilan dan indikator), dengan file (Anda dapat membuat log, membaca data uji), dengan keyboard (Anda dapat membaca hingga 10 tombol sekaligus), dengan port COM (ini adalah item terpisah).
Membuat Program Cepat
Misalnya, Anda perlu memproses 100500 file teks dengan cepat. Masing-masing perlu dibuka, sedikit dimodifikasi menurut beberapa algoritme sederhana, disimpan dan ditutup. Jika Anda seorang master Python, maka saya mengucapkan selamat kepada Anda, Anda memiliki segalanya. Tetapi jika Anda seorang arduino yang tangguh (dan jumlahnya banyak), maka Nanonyam akan membantu Anda dalam menyelesaikan masalah ini. Ini adalah tujuan kedua saya di Nanonyam: untuk menambahkan banyak fungsi berguna seperti pemrosesan teks, mengambil tangkapan layar, atau mensimulasikan penekanan tombol dalam sistem (yang semuanya sudah ada), serta banyak fungsi lain untuk menyelesaikan tugas rutin .
Menguji perangkat keras melalui port COM
Nanonyam dapat bertindak sebagai terminal yang bekerja sesuai dengan algoritme Anda. Anda dapat menggambar menu kecil untuk mengontrol perangkat dan menampilkan data yang diterima dari port. Anda dapat menyimpan dan membaca data dari file untuk dianalisis. Alat praktis untuk debugging dan kalibrasi perangkat keras sederhana, serta untuk membuat panel kontrol instrumen virtual sederhana. Bagi mahasiswa dan ilmuwan muda, proyek ini bisa sangat bermanfaat.
Pelatihan pemrograman
Namun, seperti halnya seluruh proyek Arduino, kegunaan utama Nanonyam terletak pada penyederhanaan fungsi, antarmuka, dan bootloader. Oleh karena itu, proyek ini harus menarik bagi pemrogram pemula dan mereka yang puas dengan level arduino. Ngomong-ngomong, saya sendiri masih belum mempelajari arduino secara detail, karena saya selalu menggunakan WinAVR atau AVR Studio, tetapi memulai dengan assembler. Oleh karena itu, contoh program di bawah ini akan sedikit salah, tetapi cukup berhasil.
Halo Habr!
Saatnya mengenal beberapa fitur Nanonyam dan menulis program sederhana. Kami akan menulis di Arduino, tetapi tidak dengan cara yang biasa, tetapi dengan cara yang saya bisa sekarang (saya sudah mengatakan bahwa saya belum menemukan lingkungan ini dengan baik). Pertama, buat sketsa baru dan pilih papan Mega2560.
Simpan sketsa ke file dan salin berikutnya
#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"
Akan lebih tepat lagi jika dibuatkan modul khusus βNanonyam for Arduinoβ yang bisa dipasang langsung dari Arduino. Segera setelah saya mengetahuinya, saya akan melakukannya, tetapi untuk saat ini saya hanya menunjukkan esensi bekerja dengan mesin virtual. Kami menulis kode berikut:
//Π‘ΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ Π² ΠΎΠΊΠ½Π΅
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);//ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° ΠΈ ΡΠ°Π·Π³ΡΡΠ·ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°
}
Sketsa dengan program ini
Kami menekan tombol "Periksa" dan seharusnya tidak ada kesalahan.
Sekarang Anda perlu mendapatkan file biner (firmware). Pilih menu"Sketsa>>Ekspor file biner (CTRL+ALT+S)".
Ini akan menyalin dua file HEX ke folder sketsa. Kami hanya mengambil file tanpa awalan "with_bootloader.mega".
Ada beberapa cara untuk menentukan file HEX ke mesin virtual Nanonyam, semuanya dijelaskan
Demikian pula, Anda dapat membuat program di lingkungan lain, seperti AVR Studio atau WinAVR.
Di sinilah kita mengakhiri perkenalan kita dengan Nanonyam. Gagasan utama harus jelas.
Terima kasih atas perhatian Anda dan pemrograman yang bagus!
Sumber: www.habr.com