Cara membuat program Windows di Arduino



Suatu ketika saya memiliki ide gila untuk membawa 500 laser pointer di satu tempat . Saya menghabiskan banyak waktu dan melakukannya. Ternyata spektakuler dan tidak berguna, tetapi saya menyukainya. Enam bulan lalu, ide gila lain datang kepada saya. Kali ini sama sekali tidak spektakuler, tetapi jauh lebih bermanfaat. Saya juga menghabiskan banyak waktu untuk itu. Dan dalam artikel ini saya menyajikan versi beta dari ide gila kedua saya.

Saya menyebut proyek Nanonyam (Nanonyam) dan bahkan muncul dengan logo untuk itu (saya melukis selama 5 menit).



Bagi mereka yang berpikir dalam hal Arduino, kita dapat mengatakan bahwa Nanonyam adalah perisai arduino virtual untuk mengelola Windows.

Dengan kata lain, Nanonyam adalah mesin virtual yang menggunakan firmware untuk mikrokontroler AVR sebagai bytecode (disarankan ATMEGA2560). Di dalam mesin virtual ini terdapat simulator kernel AVR, tetapi alih-alih perangkat periferal yang terletak di alamat SRAM dari 0x0060 hingga 0x01FF, ada antarmuka khusus untuk fungsi virtual (termasuk fungsi Windows API). Dan di sini sangat penting untuk segera memahami: kode untuk Nanonyam seharusnya tidak memiliki akses ke rentang memori yang ditentukan, agar tidak secara tidak sengaja memanggil, misalnya, fungsi menghapus file atau memformat disk. Sisa rentang memori SRAM dari 0x0200 hingga 0xFFFF (ini lebih banyak daripada mikrokontroler nyata) tersedia bagi pengguna untuk tujuan apa pun. Saya segera mencatat bahwa ada perlindungan khusus terhadap tidak sengaja memulai firmware dari mikrokontroler nyata (atau firmware dari arsitektur yang berbeda): sebelum mengaktifkan fungsi "berbahaya", Anda perlu memanggil fungsi virtual khusus yang rumit. Ada beberapa fitur keamanan lainnya.

Untuk membuat program untuk Nanonyam, Anda perlu menggunakan perpustakaan khusus yang mengimplementasikan semua fungsi virtual yang saat ini tersedia. Anda dapat mengunduh mesin virtual Nanonyam dan perpustakaannya di sini . Dan di sini adalah halaman untuk menggambarkan fungsi virtual . Dan ya, situs saya sangat primitif dan tidak disesuaikan untuk perangkat seluler.

Nanonyam gratis untuk penggunaan rumah dan komersial. Nanonyam didasarkan pada "sebagaimana adanya". Kode sumber tidak disediakan.

Saat ini, program sedang dalam tahap pengujian. Sekitar 200 fungsi virtual telah diterapkan 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 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 bisa dilakukan di Nanonyam? Saya datang dengan beberapa tugas.

Pengembangan blok program


Suatu kali saya perlu mengembangkan menu kompleks untuk tampilan grafik 128x64 dot. Saya benar-benar tidak ingin terus-menerus mengunduh firmware ke mikrokontroler nyata untuk melihat bagaimana pikselnya terlihat. Jadi ide Nanonyam lahir. Pada gambar di bawah ini, gambar dari tampilan OLED nyata dari salah satu item pada menu yang sama. Sekarang saya bisa menyelesaikannya tanpa perangkat nyata.



Nanonyam (dalam ide terakhirnya) adalah alat yang baik untuk mengerjakan blok perangkat lunak 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 secara bersamaan), dengan port COM (di sini adalah item terpisah).

Buat program cepat


Misalnya, Anda perlu memproses 100.500 file teks dengan cepat. Semua orang perlu dibuka, sedikit diubah sesuai dengan beberapa algoritma sederhana, disimpan dan ditutup. Jika Anda adalah master Python, maka saya mengucapkan selamat kepada Anda, Anda memiliki segalanya. Tetapi jika Anda adalah pekerja arduino yang lazim (dan ada banyak dari mereka), maka Nanonyam akan membantu Anda dalam memecahkan masalah ini. Ini adalah tujuan kedua saya di Nanonyam: untuk menambahkan banyak fungsi yang berguna seperti pengolah kata, membuat tangkapan layar atau mensimulasikan penekanan tombol dalam sistem (ini, omong-omong, sudah ada di sana), serta banyak fungsi lain untuk menyelesaikan tugas rutin.

Menguji kelenjar melalui COM-port


Nanonyam dapat bertindak sebagai terminal yang bekerja sesuai dengan algoritma 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 yang mudah digunakan untuk debugging dan kalibrasi kelenjar yang sederhana, serta untuk membuat panel kontrol instrumen virtual sederhana. Bagi siswa dan ilmuwan muda, proyek ini bisa sangat berguna.

Pelatihan pemrograman


Namun, seperti halnya seluruh proyek Arduino, utilitas utama Nanonyam adalah penyederhanaan fungsi, antarmuka, dan bootloader. Oleh karena itu, proyek ini harus menarik bagi programmer pemula dan mereka yang puas dengan tingkat Arduino. Omong-omong, saya sendiri belum mempelajari arduino secara rinci, karena saya selalu menggunakan WinAVR atau AVR Studio, tetapi saya mulai dengan assembler. Karena itu, contoh program di bawah ini akan sedikit salah, tetapi cukup berhasil.

Halo, Habr!


Saatnya untuk mengenal beberapa fitur Nanonyam dan menulis program sederhana. Kami akan menulis dalam bahasa Arduino, tetapi tidak dengan cara yang biasa, tetapi dengan cara yang saya bisa sekarang (saya sudah mengatakan bahwa saya belum menangani lingkungan ini dengan baik). Pertama, buat sketsa baru dan pilih papan Mega2560.



Simpan sketsa ke file dan salin perpustakaan Nanonyam di dekatnya . Adalah benar untuk memasukkan header perpustakaan, tetapi saya tidak tahu bagaimana menulis kompilasi file individual di Arduino, jadi untuk saat ini cukup aktifkan perpustakaan secara langsung (dan sekaligus):

#include <stdio.h> #include "Nanonyam\nN_System_lib.c" #include "Nanonyam\nN_Keyboard_lib.c" #include "Nanonyam\nN_File_lib.c" #include "Nanonyam\nN_Math_lib.c" #include "Nanonyam\nN_Text_lib.c" #include "Nanonyam\nN_Graphics_lib.c" #include "Nanonyam\nN_RS232_lib.c" 

Akan lebih benar lagi untuk membuat modul khusus "Nanonyam untuk Arduino", yang dapat diinstal langsung dari Arduino. Segera setelah saya berurusan dengan ini, saya akan melakukannya, tetapi untuk saat ini saya hanya akan menunjukkan esensi dari bekerja dengan mesin virtual. Kami menulis kode berikut:

 //       void setup() { sys_Nanonyam();//    g_SetScreenSize(400,200);//   400200  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 dapat diunduh di sini . Cari deskripsi terperinci dari fungsi-fungsi di situs . Saya harap komentar dalam kode ini cukup untuk memahami maksudnya. Di sini, fungsi sys_Nanonyam () memainkan peran "kata sandi" untuk mesin virtual, yang menghilangkan pembatasan pada fungsi virtual. Tanpa fungsi ini, program akan ditutup setelah 3 detik operasi.

Klik tombol "Periksa" dan seharusnya tidak ada kesalahan.



Sekarang Anda perlu mendapatkan file biner (firmware). Pilih menu " Sketsa >> Ekspor file biner (CTRL + ALT + S) ".



Dalam hal ini, dua file HEX akan disalin ke folder dengan sketsa. Kami hanya mengambil file tanpa awalan "with_bootloader.mega".

Ada beberapa cara untuk menentukan file HEX untuk mesin virtual Nanonyam, yang semuanya dijelaskan di halaman ini . Saya sarankan untuk membuat file Nanonyam.path di sebelah file Nanonyam.exe , untuk menulis path lengkap ke file HEX kami. Maka Anda dapat menjalankan Nanonyam.exe . Kami mendapatkan jendela dengan tulisan kami.



Demikian pula, Anda dapat membuat program di lingkungan lain, misalnya, di AVR Studio atau WinAVR.

Di sinilah kita menyelesaikan kenalan dengan Nanonyam. Ide dasarnya harus jelas. Lebih banyak contoh ada di situs . Jika ada cukup banyak orang yang ingin menggunakan proyek ini, maka saya akan membuat lebih banyak contoh dan terus "mengisi" perpustakaan fungsi virtual. Gagasan konkret untuk pengembangan proyek dan laporan tentang kegagalan fungsi, bug, dan kesalahan diterima. Dianjurkan untuk mengirim mereka ke kontak yang tercantum di situs . Diskusi disambut dalam komentar.

Terima kasih atas perhatian dan pemrogramannya!

Source: https://habr.com/ru/post/id472958/


All Articles