Một ngày nọ, tôi có một ý tưởng điên rồ là mang
Tôi gọi dự án là Nanonyam (Nanonyam) và thậm chí còn nghĩ ra logo cho nó (tôi đã vẽ trong 5 phút).
Đối với những người nghĩ về Arduino, chúng ta có thể nói rằng Nanonyam là một lá chắn Arduino ảo để điều khiển Windows.
Nói cách khác, Nanonyam là một máy ảo sử dụng phần sụn cho bộ vi điều khiển AVR (ATMEGA2560 được khuyến nghị) làm mã byte. Bên trong máy ảo này là một trình giả lập lõi AVR, nhưng thay vì các thiết bị ngoại vi, được đặt tại các địa chỉ SRAM từ 0x0060 đến 0x01FF, có một giao diện đặc biệt cho các chức năng ảo (bao gồm các chức năng API của Windows). Và ở đây, điều rất quan trọng là phải hiểu ngay: mã cho Nanonyam không được có bất kỳ quyền truy cập nào vào phạm vi bộ nhớ đã chỉ định, để không vô tình gọi, chẳng hạn như chức năng xóa tệp hoặc định dạng đĩa. Phần còn lại của bộ nhớ SRAM nằm trong khoảng từ 0x0200 đến 0xFFFF (điều này còn hơn cả trong một bộ vi điều khiển thực) có sẵn cho người dùng cho bất kỳ mục đích nào. Tôi lưu ý ngay rằng có một biện pháp bảo vệ đặc biệt chống lại việc vô tình khởi chạy phần sụn của bộ vi điều khiển thực (hoặc phần sụn từ kiến trúc khác): trước khi kích hoạt các chức năng "nguy hiểm", bạn cần gọi một chức năng ảo phức tạp đặc biệt. Ngoài ra còn có một số tính năng bảo mật khác.
Để tạo các chương trình cho Nanonyam, bạn cần sử dụng các thư viện đặc biệt triển khai tất cả các chức năng ảo hiện có. Tải xuống máy ảo Nanonyam và các thư viện cho nó
Nanonyam miễn phí cho mục đích sử dụng gia đình và thương mại. Chương trình Nanonyam được cung cấp trên cơ sở "nguyên trạng". Mã nguồn không được cung cấp.
Chương trình hiện đang trong giai đoạn thử nghiệm. Đã triển khai khoảng 200 chức năng ảo cho phép bạn tạo các chương trình đơn giản cho Windows.
Rõ ràng, việc tạo một thứ gì đó phức tạp trong một máy ảo như vậy sẽ không hiệu quả, vì bộ nhớ dành cho mã chỉ là 256 kB. Dữ liệu có thể được lưu trữ trong các tệp riêng biệt, bộ đệm cho phần đồ họa được triển khai bên ngoài. Tất cả các chức năng được đơn giản hóa và thích nghi với kiến trúc 8-bit.
Bạn có thể làm gì ở Nanonyam? Tôi đã đưa ra một vài vấn đề.
Phát triển các khối chương trình
Tôi đã từng cần thiết kế một menu phức tạp cho màn hình đồ họa 128x64 điểm. Tôi thực sự không muốn liên tục tải phần sụn vào một bộ vi điều khiển thực để xem các pixel trông như thế nào. Và thế là ý tưởng về Nanonyam ra đời. Hình bên dưới hiển thị hình ảnh từ màn hình OLED thực của một trong các mục trên cùng một menu. Bây giờ tôi có thể làm việc với nó mà không cần thiết bị thực.
Nanonyam (theo ý tưởng cuối cùng của nó) là một công cụ tốt để xử lý các khối chương trình cho vi điều khiển, vì có các chức năng làm việc với đồ họa (bạn có thể mô phỏng màn hình và chỉ báo), với các tệp (bạn có thể tạo nhật ký, đọc dữ liệu thử nghiệm), với bàn phím (bạn có thể đọc tối đa 10 nút cùng lúc), có cổng COM (ở đây có mục riêng).
Tạo chương trình nhanh
Ví dụ: bạn cần xử lý nhanh 100500 tệp văn bản. Mỗi cái cần được mở, sửa đổi một chút theo một số thuật toán đơn giản, được lưu và đóng. Nếu bạn là một bậc thầy Python, thì tôi xin chúc mừng bạn, bạn có tất cả mọi thứ. Nhưng nếu bạn là một arduino cứng (và có rất nhiều người trong số họ), thì Nanonyam sẽ giúp bạn giải quyết vấn đề này. Đây là mục tiêu thứ hai của tôi trong Nanonyam: thêm nhiều chức năng hữu ích như xử lý văn bản, chụp ảnh màn hình hoặc mô phỏng thao tác gõ phím trong hệ thống (nhân tiện, tất cả đều đã có), cũng như nhiều chức năng khác để giải quyết các công việc thường ngày .
Kiểm tra phần cứng qua cổng COM
Nanonyam có thể hoạt động như một thiết bị đầu cuối hoạt động theo thuật toán của bạn. Bạn có thể vẽ một menu nhỏ để điều khiển thiết bị và hiển thị dữ liệu nhận được từ cổng. Bạn có thể lưu và đọc dữ liệu từ các tệp để phân tích. Một công cụ tiện dụng để gỡ lỗi và hiệu chỉnh phần cứng đơn giản, cũng như để tạo các bảng điều khiển thiết bị ảo đơn giản. Đối với sinh viên và các nhà khoa học trẻ, dự án này có thể rất hữu ích.
Đào tạo lập trình
Tuy nhiên, như với toàn bộ dự án Arduino, tính hữu ích chính của Nanonyam nằm ở việc đơn giản hóa các chức năng, giao diện và bộ tải khởi động. Do đó, dự án này nên được các lập trình viên mới làm quen và những người hài lòng với mức độ của arduino quan tâm. Nhân tiện, bản thân tôi vẫn chưa nghiên cứu chi tiết về arduino, vì tôi luôn sử dụng WinAVR hoặc AVR Studio, nhưng bắt đầu với trình biên dịch chương trình. Do đó, chương trình ví dụ dưới đây sẽ sai một chút, nhưng khá hiệu quả.
Xin chào Habr!
Đã đến lúc làm quen với một số tính năng của Nanonyam và viết một chương trình đơn giản. Chúng tôi sẽ viết bằng Arduino, nhưng không phải theo cách thông thường mà theo cách tôi có thể làm bây giờ (tôi đã nói rằng tôi vẫn chưa hiểu rõ về môi trường này). Đầu tiên, tạo một bản phác thảo mới và chọn bảng Mega2560.
Lưu bản phác thảo vào một tệp và sao chép tiếp theo
#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"
Sẽ đúng hơn nếu tạo ra một mô-đun đặc biệt “Nanonyam cho Arduino”, có thể được cài đặt trực tiếp từ Arduino. Ngay khi tôi tìm ra nó, tôi sẽ làm điều đó, nhưng hiện tại tôi chỉ đang trình bày bản chất của việc làm việc với một máy ảo. Chúng tôi viết đoạn mã sau:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}
Phác thảo với chương trình này
Chúng tôi nhấn nút "Kiểm tra" và sẽ không có bất kỳ lỗi nào.
Bây giờ bạn cần lấy một tệp nhị phân (phần sụn). Chọn menu "Phác thảo>>Xuất tệp nhị phân (CTRL+ALT+S)".
Thao tác này sẽ sao chép hai tệp HEX vào thư mục phác thảo. Chúng tôi chỉ lấy tệp không có tiền tố "with_bootloader.mega".
Có một số cách để chỉ định tệp HEX cho máy ảo Nanonyam, tất cả chúng đều được mô tả
Tương tự, bạn có thể tạo chương trình trong các môi trường khác, chẳng hạn như AVR Studio hoặc WinAVR.
Đây là nơi chúng ta kết thúc quá trình làm quen với Nanonyam. Ý chính phải rõ ràng.
Cảm ơn tất cả các bạn đã chú ý và lập trình tốt!
Nguồn: www.habr.com