Σε αυτό το νέο άρθρο θα δούμε τι α φρουρός, σε τι μπορεί να χρησιμοποιηθεί και πώς να το χρησιμοποιήσετε στα έργα σας Arduino. Όλα όσα πρέπει να γνωρίζετε για αυτήν την ενδιαφέρουσα αλλά άγνωστη λειτουργία. Και ναι, όπως υποδηλώνει το όνομά του (watchdog), μπορεί να χρησιμοποιηθεί για τον εντοπισμό ορισμένων προβλημάτων.
Εδώ θα δούμε το μόνο που χρειάζεται να γνωρίζετε Σχετικά με…
Τι είναι ο φύλακας;
Στην πληροφορική, α φρουρός Είναι ένας εποπτικός μηχανισμός που χρησιμοποιείται για την παρακολούθηση της απόδοσης ενός συστήματος ή ενός προγράμματος. Η κύρια λειτουργία του είναι να ανιχνεύει και να ανταποκρίνεται σε μη φυσιολογικές καταστάσεις ή αστοχίες συστήματος, όπως κολλήματα ή παγώματα, και να λαμβάνει διορθωτικά μέτρα για να διασφαλίσει τη συνεχή λειτουργία ή την ανάκτηση του συστήματος.
Ο φύλακας λειτουργεί με χρονοδιακόπτη που έχει ρυθμιστεί για συγκεκριμένο χρονικό διάστημα. Εάν το σύστημα ή το πρόγραμμα δεν εκτελέσει μια συγκεκριμένη ενέργεια ή δεν τροφοδοτήσει το Watchdog (δηλαδή, το επανεκκινήσει) εντός αυτού του χρονικού διαστήματος, το Watchdog υποθέτει ότι το σύστημα βρίσκεται σε ανεπιθύμητη κατάσταση ή έχει σταματήσει να ανταποκρίνεται σωστά και προβαίνει σε μια προκαθορισμένη ενέργεια. Αυτή η ενέργεια μπορεί να διαφέρει ανάλογα με την υλοποίηση και μπορεί να περιλαμβάνει επανεκκίνηση του συστήματος, δημιουργία αρχείων καταγραφής σφαλμάτων, ενεργοποίηση συναγερμών ή λήψη συγκεκριμένων βημάτων για τη διόρθωση του προβλήματος.
Το Watchdog χρησιμοποιείται σε μια ποικιλία συστημάτων και συσκευών υπολογιστών, από λειτουργικά συστήματα και διακομιστές έως συσκευές ενσωματωμένα και κρίσιμα συστήματα σε πραγματικό χρόνο, συμπεριλαμβανομένου του Arduino. Ο πρωταρχικός του στόχος είναι να βελτιώσει την αξιοπιστία και τη διαθεσιμότητα του συστήματος με αυτόματη ανίχνευση και απόκριση σε προβλήματα, μειώνοντας έτσι την ανάγκη για χειροκίνητη παρέμβαση σε καταστάσεις αστοχίας.
Τι είναι το Arduino Watchdog;

Το χρονόμετρο Watchdog του Arduino πρέπει να ρυθμιστεί ανάλογα με τις ανάγκες της εφαρμογής. Αυτός Χρονόμετρο Watchdog κάνει χρήση μιας εσωτερικής πηγής ρολογιού 128 kHz (μπορεί να διαφέρει ανάλογα με την πλακέτα και το MCU που χρησιμοποιείται). Όταν ενεργοποιηθεί, αρχίζει να μετράει από το μηδέν μέχρι μια προκαθορισμένη τιμή από τον χρήστη. Εάν το Watchdog Timer δεν επαναφέρει όταν φτάσει σε αυτήν την τιμή, επαναφέρει τον μικροελεγκτή.
The Watchdog Timer ATmega328P, το οποίο υλοποιείται στο Arduino UNO, προσφέρει 10 διαφορετικές ρυθμίσεις ώρας, καθεμία από τις οποίες καθορίζει πότε ο χρονοδιακόπτης θα ξεχειλίσει και επομένως θα προκαλέσει επαναφορά. Τα διαφορετικά χρονικά διαστήματα είναι τα εξής: 16 ms, 32 ms, 64 ms, 0.125 δευτερόλεπτα, 0.25 δευτερόλεπτα, 0.5 δευτερόλεπτα, 1 δευτερόλεπτο, 2 δευτερόλεπτα, 4 δευτερόλεπτα και 8 δευτερόλεπτα, όπως θα δούμε αργότερα στον πίνακα που συμπεριλαμβάνω.
Εάν ακόμα δεν σας είναι ξεκάθαρο τι μπορείτε να κάνετε με το Watchdog Timer Arduino UNO, θα δούμε Ενα παράδειγμα ώστε να μπορείτε να το καταλάβετε γραφικά. Σε αυτό το παράδειγμα, θα χρησιμοποιήσουμε ένα απλό LED που αναβοσβήνει (αναβοσβήνει). Οι λυχνίες LED αναβοσβήνουν για μια καθορισμένη περίοδο πριν εισέλθουν στον βρόχο while(). Αυτός ο βρόχος while() χρησιμοποιείται ως εναλλακτική λύση σε ένα σύστημα αποκλεισμού. Δεδομένου ότι το Watchdog Timer δεν επαναφέρεται ενώ βρίσκεται στον βρόχο while(), θα προκαλέσει επανεκκίνηση του συστήματος και οι λυχνίες LED θα αρχίσουν να αναβοσβήνουν ξανά πριν κολλήσει το σύστημα και επανεκκινηθεί. Αυτός ο κύκλος θα συνεχιστεί…
Σκέψεις και χαρακτηριστικά
The Watchdog Timer είναι απενεργοποιημένο στην αρχή του κωδικού. Ενσωματώνεται μια καθυστέρηση x δευτερολέπτων πριν από την ενεργοποίηση του Watchdog. Αυτή η καθυστέρηση είναι ζωτικής σημασίας για να επιτρέψει στον bootloader του Arduino να ελέγξει εάν φορτώνεται νέος κώδικας και να αφήσει αρκετό χρόνο για την εγγραφή του κώδικα στη μνήμη flash. Αυτή η πτυχή είναι σχετική ως προληπτικό μέτρο. Μπορεί να προκύψει μια κατάσταση όπου, λόγω λανθασμένης κωδικοποίησης ή ακατάλληλων εκτιμήσεων, ο γραπτός κώδικας επαναφέρει τον μικροελεγκτή σε πολύ σύντομα διαστήματα απεριόριστα. Αυτό μπορεί να βλάψει την πλακέτα Arduino και να αποτρέψει τη σωστή μεταφόρτωση κώδικα σε αυτήν. Εάν συμβεί αυτό, είναι απαραίτητο να κάψετε τον bootloader χρησιμοποιώντας ένα άλλο Arduino ως ISP στο κλειδωμένο Arduino...
Όταν χρησιμοποιούμε το Arduino Watchdog, είναι απαραίτητο να το χρησιμοποιήσουμε καταχωρητές bit για να ορίσετε τη συμπεριφορά του τσιπ. Οι σχετικοί καταχωρητές και η σημασία τους περιγράφονται λεπτομερώς στο φύλλο δεδομένων του μικροελεγκτή που υπάρχει στην πλακέτα του Arduino. Ωστόσο, το Arduino Integrated Development Environment (IDE) συνοδεύεται από ορισμένες λειτουργίες και μακροεντολές που έχουν σχεδιαστεί για την απλοποίηση αυτής της διαδικασίας, οι οποίες μπορούν να εισαχθούν συμπεριλαμβάνοντας τη βιβλιοθήκη #περιλαμβάνω για να χρησιμοποιήσετε το AVR chip watchdog.
Με αυτόν τον τρόπο, μπορούμε να διαμορφώσουμε το watchdog ενεργοποιώντας το μέσω της συνάρτησης wdt_enable().. Το όρισμα αυτής της συνάρτησης καθορίζει το χρόνο πριν από την επαναφορά της πλακέτας σε περίπτωση που δεν έχει γίνει επαναφορά του χρονοδιακόπτη. Όσον αφορά τις τιμές που μπορείτε να διαμορφώσετε στον κώδικα, εδώ τις συμπεριλαμβάνω:
| Χρόνος πριν από την ενεργοποίηση του φύλακα | όρισμα wtd_enable(). |
| ms 15 | WDTO_15MS |
| ms 30 | WDTO_30MS |
| ms 60 | WDTO_60MS |
| ms 120 | WDTO_120MS |
| ms 250 | WDTO_250MS |
| ms 500 | WDTO_500MS |
| 1 s | WDTO_1S |
| 2 s | WDTO_2S |
| 4 s | WDTO_4S |
| 8 s | WDTO_8S |
Παράδειγμα χρήσης του watchdog στο Arduino

Τέλος, ας δούμε πώς χρησιμοποιείται πρακτικά το watchdog με ένα παράδειγμα στο Arduino IDE. Όπως βλέπουμε, είναι αρκετά απλό, μπορείτε να βρείτε διάφορους πηγαίους κώδικες όπως αυτός στο Διαδίκτυο, για να μπορείτε να εξασκήσετε, να τροποποιήσετε και να δημιουργήσετε τους δικούς σας κώδικες για να χρησιμοποιήσετε το watchdog στα έργα σας. Ας δούμε το παράδειγμά μας:
#include <avr/wdt.h> // Incluir la biblioteca watchdog (wdt.h)
void setup()
{
wdt_disable(); // Desactivar el watchdog mientras se configura, para que no se resetee
wdt_enable(WDTO_2S); // Configurar watchdog a dos segundos
}
void loop()
{
wdt_reset(); // Actualizar el watchdog para que no produzca un reinicio
//Aquí iría el código de tu programa...
}
Όπως φαίνεται σε αυτό το παράδειγμα σκίτσου για το Arduino, υπάρχουν τρεις λειτουργίες της αξιοσημείωτης γλώσσας προγραμματισμού για τη διαχείριση του φύλακα και αυτές είναι:
- wdt_disable () για να απενεργοποιήσετε το χρονόμετρο κατά τη διαμόρφωση του Arduino.
- wdt_enable (χρόνο) για να ορίσετε ένα διάστημα στο χρονόμετρο και να το ξεκινήσετε, προσδιορίζοντας τον αντίστοιχο χρόνο όπως έχω δείξει στον παραπάνω πίνακα.
- wdt_reset () για να ανανεώσετε το εκχωρημένο διάστημα και για να μην επανεκκινήσει το πρόγραμμα.