Μια μέρα μου ήρθε η τρελή ιδέα να φέρω
Ονόμασα το έργο Nanonyam (Nanonyam) και μάλιστα βρήκα ένα λογότυπο για αυτό (ζωγράφισα για 5 λεπτά).
Για όσους σκέφτονται με όρους Arduino, μπορούμε να πούμε ότι το Nanonyam είναι μια εικονική ασπίδα Arduino για τον έλεγχο των Windows.
Με άλλα λόγια, το Nanonyam είναι μια εικονική μηχανή που χρησιμοποιεί υλικολογισμικό για τον μικροελεγκτή AVR (συνιστάται το ATMEGA2560) ως bytecode. Μέσα σε αυτήν την εικονική μηχανή υπάρχει ένας προσομοιωτής πυρήνα AVR, αλλά αντί για περιφερειακά, τα οποία βρίσκονται σε διευθύνσεις SRAM από 0x0060 έως 0x01FF, υπάρχει μια ειδική διεπαφή για εικονικές λειτουργίες (συμπεριλαμβανομένων των λειτουργιών API των Windows). Και εδώ είναι πολύ σημαντικό να καταλάβετε αμέσως: ο κώδικας για το Nanonyam δεν πρέπει να έχει πρόσβαση στο καθορισμένο εύρος μνήμης, ώστε να μην καλέσετε κατά λάθος, για παράδειγμα, τη λειτουργία διαγραφής αρχείων ή μορφοποίησης ενός δίσκου. Το υπόλοιπο εύρος της μνήμης SRAM από 0x0200 έως 0xFFFF (αυτό είναι περισσότερο από ό,τι σε έναν πραγματικό μικροελεγκτή) είναι διαθέσιμο στο χρήστη για οποιονδήποτε σκοπό. Σημειώνω αμέσως ότι υπάρχει ειδική προστασία από τυχαία εκκίνηση του υλικολογισμικού ενός πραγματικού μικροελεγκτή (ή υλικολογισμικού από άλλη αρχιτεκτονική): πριν ενεργοποιήσετε "επικίνδυνες" λειτουργίες, πρέπει να καλέσετε μια ειδική δύσκολη εικονική λειτουργία. Υπάρχουν και κάποια άλλα χαρακτηριστικά ασφαλείας.
Για να δημιουργήσετε προγράμματα για το Nanonyam, πρέπει να χρησιμοποιήσετε ειδικές βιβλιοθήκες που υλοποιούν όλες τις τρέχουσες διαθέσιμες εικονικές λειτουργίες. Κατεβάστε την εικονική μηχανή Nanonyam και τις βιβλιοθήκες για αυτήν
Το Nanonyam είναι δωρεάν για οικιακή και εμπορική χρήση. Το πρόγραμμα Nanonyam παρέχεται σε βάση "ως έχει". Ο πηγαίος κώδικας δεν παρέχεται.
Το πρόγραμμα βρίσκεται αυτή τη στιγμή σε δοκιμαστική φάση. Υλοποιήθηκαν περίπου 200 εικονικές λειτουργίες που σας επιτρέπουν να δημιουργείτε απλά προγράμματα για Windows.
Προφανώς, η δημιουργία κάτι πολύπλοκου σε μια τέτοια εικονική μηχανή δεν θα λειτουργήσει, καθώς η μνήμη για τον κώδικα είναι μόνο 256 kB. Τα δεδομένα μπορούν να αποθηκευτούν σε ξεχωριστά αρχεία, το buffer για το γραφικό μέρος υλοποιείται εξωτερικά. Όλες οι λειτουργίες είναι απλοποιημένες και προσαρμοσμένες για αρχιτεκτονική 8-bit.
Τι μπορείτε να κάνετε στο Nanonyam; Βρήκα μερικά προβλήματα.
Ανάπτυξη μπλοκ προγράμματος
Κάποτε χρειάστηκε να σχεδιάσω ένα σύνθετο μενού για μια οθόνη γραφικών 128x64 κουκκίδων. Πραγματικά δεν ήθελα να φορτώνω συνεχώς το υλικολογισμικό σε έναν πραγματικό μικροελεγκτή για να δω πώς φαίνονται τα pixel. Και έτσι γεννήθηκε η ιδέα του Nanonyam. Το παρακάτω σχήμα δείχνει μια εικόνα από μια πραγματική οθόνη OLED ενός από τα στοιχεία του ίδιου μενού. Τώρα μπορώ να το δουλέψω χωρίς πραγματική συσκευή.
Το Nanonyam (στην τελική του ιδέα) είναι ένα καλό εργαλείο για την επεξεργασία μπλοκ προγραμμάτων για μικροελεγκτές, καθώς υπάρχουν λειτουργίες για εργασία με γραφικά (μπορείτε να προσομοιώσετε οθόνες και δείκτες), με αρχεία (μπορείτε να δημιουργήσετε αρχεία καταγραφής, να διαβάσετε δεδομένα δοκιμής), με ένα πληκτρολόγιο (μπορείτε να διαβάσετε έως και 10 κουμπιά ταυτόχρονα), με θύρες COM (εδώ υπάρχει ένα ξεχωριστό στοιχείο).
Δημιουργία Γρήγορων Προγραμμάτων
Για παράδειγμα, πρέπει να επεξεργαστείτε γρήγορα 100500 αρχεία κειμένου. Κάθε ένα πρέπει να ανοιχτεί, να τροποποιηθεί ελαφρώς σύμφωνα με κάποιον απλό αλγόριθμο, να αποθηκευτεί και να κλείσει. Αν είσαι κύριος της Python, τότε σε συγχαίρω, έχεις τα πάντα. Αλλά αν είστε ένα σκληρυμένο arduino (και υπάρχουν πολλά από αυτά), τότε το Nanonyam θα σας βοηθήσει να λύσετε αυτό το πρόβλημα. Αυτός είναι ο δεύτερος στόχος μου στο Nanonyam: να προσθέσω πολλές χρήσιμες λειτουργίες όπως επεξεργασία κειμένου, λήψη στιγμιότυπων οθόνης ή προσομοίωση πατημάτων πλήκτρων στο σύστημα (όλα αυτά, παρεμπιπτόντως, είναι ήδη εκεί), καθώς και πολλές άλλες λειτουργίες για την επίλυση εργασιών ρουτίνας .
Δοκιμή υλικού μέσω θύρας COM
Το Nanonyam μπορεί να λειτουργήσει ως τερματικό που λειτουργεί σύμφωνα με τον αλγόριθμό σας. Μπορείτε να σχεδιάσετε ένα μικρό μενού για να ελέγξετε τη συσκευή και να εμφανίσετε τα δεδομένα που λαμβάνονται από τη θύρα. Μπορείτε να αποθηκεύσετε και να διαβάσετε δεδομένα από αρχεία για ανάλυση. Ένα εύχρηστο εργαλείο για απλό εντοπισμό σφαλμάτων και βαθμονόμηση υλικού, καθώς και για τη δημιουργία απλών εικονικών πινάκων ελέγχου οργάνων. Για φοιτητές και νέους επιστήμονες, αυτό το έργο μπορεί να είναι πολύ χρήσιμο.
Εκπαίδευση προγραμματισμού
Ωστόσο, όπως και με ολόκληρο το έργο Arduino, η κύρια χρησιμότητα του Nanonyam έγκειται στην απλοποίηση των λειτουργιών, της διεπαφής και του bootloader. Επομένως, αυτό το έργο θα πρέπει να ενδιαφέρει τους αρχάριους προγραμματιστές και όσους είναι ικανοποιημένοι με το επίπεδο του arduino. Παρεμπιπτόντως, εγώ ο ίδιος ακόμα δεν έχω μελετήσει λεπτομερώς το arduino, γιατί πάντα χρησιμοποιούσα το WinAVR ή το AVR Studio, αλλά ξεκίνησα με το assembler. Επομένως, το παρακάτω παράδειγμα προγράμματος θα είναι λίγο λάθος, αλλά αρκετά λειτουργικό.
Γεια σου Χαμπρ!
Ήρθε η ώρα να εξοικειωθείτε με μερικές από τις δυνατότητες του Nanonyam και να γράψετε ένα απλό πρόγραμμα. Θα γράψουμε στο Arduino, αλλά όχι με τον συνηθισμένο τρόπο, αλλά με τον τρόπο που μπορώ τώρα (είπα ήδη ότι δεν έχω καταλάβει ακόμα πολύ καλά αυτό το περιβάλλον). Αρχικά, δημιουργήστε ένα νέο σκίτσο και επιλέξτε την πλακέτα Mega2560.
Αποθηκεύστε το σκίτσο σε ένα αρχείο και αντιγράψτε στη συνέχεια
#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"
Θα ήταν ακόμη πιο σωστό να φτιάξετε μια ειδική ενότητα "Nanonyam για Arduino", η οποία μπορεί να εγκατασταθεί απευθείας από το Arduino. Μόλις το καταλάβω, θα το κάνω, αλλά προς το παρόν δείχνω απλώς την ουσία της εργασίας με μια εικονική μηχανή. Γράφουμε τον παρακάτω κώδικα:
//Сразу после запуска рисуем текст в окне
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);//Задержка и разгрузка процессора
}
Σκίτσο με αυτό το πρόγραμμα
Πατάμε το κουμπί «Έλεγχος» και δεν πρέπει να υπάρχουν σφάλματα.
Τώρα πρέπει να αποκτήσετε ένα δυαδικό αρχείο (υλικολογισμικό). Επιλέξτε το μενού "Σκίτσο>>Εξαγωγή δυαδικού αρχείου (CTRL+ALT+S)".
Αυτό θα αντιγράψει δύο αρχεία HEX στο φάκελο σκίτσο. Παίρνουμε μόνο το αρχείο χωρίς το πρόθεμα "with_bootloader.mega".
Υπάρχουν διάφοροι τρόποι για να καθορίσετε ένα αρχείο HEX στην εικονική μηχανή Nanonyam, όλοι περιγράφονται
Ομοίως, μπορείτε να δημιουργήσετε προγράμματα σε άλλα περιβάλλοντα, όπως το AVR Studio ή το WinAVR.
Εδώ τελειώνουμε τη γνωριμία μας με τον Nanonyam. Η κύρια ιδέα πρέπει να είναι ξεκάθαρη.
Σας ευχαριστώ όλους για την προσοχή και τον καλό προγραμματισμό σας!
Πηγή: www.habr.com