I denne nye artikel skal vi se, hvad en vagthund, hvad det kan bruges til, og hvordan du bruger det i dine projekter Arduino. Alt hvad du behøver at vide om denne interessante, men ukendte funktion. Og ja, som navnet antyder (vagthund), kan den bruges til at spore nogle problemer.
Her vil vi se alt hvad du behøver at vide vedrørende…
Hvad er en vagthund?
Inden for databehandling, en vagthund er en overvågningsmekanisme, der bruges til at overvåge driften af et system eller program. Dens primære funktion er at opdage og reagere på unormale situationer eller systemfejl, såsom nedbrud eller fryser, og træffe korrigerende handlinger for at sikre fortsat drift eller systemgendannelse.
Vagthunden fungerer på en timer som er konfigureret til et bestemt tidsinterval. Hvis systemet eller programmet ikke udfører en specifik handling eller driver vagthunden (dvs. genstarter den) inden for det tidsinterval, antager vagthunden, at systemet er i en uønsket tilstand eller er holdt op med at reagere korrekt og foretager en forudbestemt handling. Denne handling kan variere alt efter implementering og kan omfatte genstart af systemet, generering af fejllogfiler, udløsning af alarmer eller udførelse af specifikke trin for at rette problemet.
Vagthunden bruges i en række forskellige computersystemer og enheder, fra operativsystemer og servere til enheder indlejrede og kritiske realtidssystemer, inklusive Arduino. Dets primære mål er at forbedre systemets pålidelighed og tilgængelighed ved automatisk at detektere og reagere på problemer og derved reducere behovet for manuel indgriben i fejlsituationer.
Hvad er Arduino-vagthunden?
Watchdog-timeren til Arduino skal justeres i henhold til applikationens behov. Han Watchdog timer gør brug af en intern 128 kHz clock-kilde (kan variere afhængigt af det anvendte kort og MCU). Når den er aktiveret, begynder den at tælle fra nul op til en bruger forudbestemt værdi. Hvis Watchdog-timeren ikke nulstilles, når den når denne værdi, nulstiller den mikrocontrolleren.
Watchdog-timeren ATmega328P, som er implementeret i Arduino UNO, tilbyder 10 forskellige tidsindstillinger, der hver bestemmer, hvornår timeren løber over og derfor forårsager en nulstilling. De forskellige tidsintervaller er følgende: 16 ms, 32 ms, 64 ms, 0.125 sekunder, 0.25 sekunder, 0.5 sekunder, 1 sekund, 2 sekunder, 4 sekunder og 8 sekunder, som vi vil se senere i tabellen, som jeg medtager.
Hvis det stadig ikke er klart for dig, hvad du kan gøre med Watchdog Timer Arduino UNO, vi får at se Et eksempel så du kan forstå det grafisk. I dette eksempel vil vi bruge et simpelt blink af LED'erne. LED'erne blinker i en bestemt periode, før de går ind i while()-løkken. Denne while()-løkke bruges som et alternativ til et blokeringssystem. Da Watchdog-timeren ikke nulstilles, mens den er i while()-løkken, vil den forårsage en systemgenstart, og LED'erne vil begynde at blinke igen, før systemet går ned og genstarter. Denne cyklus vil fortsætte...
Overvejelser og funktioner
Watchdog-timeren Den er deaktiveret i begyndelsen af koden. En forsinkelse på x sekunder er indarbejdet, før vagthunden aktiveres. Denne forsinkelse er afgørende for at give Arduino bootloaderen mulighed for at kontrollere, om ny kode indlæses, og for at give tilstrækkelig tid til at brænde koden til flashhukommelse. Dette aspekt er relevant som en sikkerhedsforanstaltning. Der kan opstå en situation, hvor den skrevne kode på grund af fejlkodning eller ukorrekte overvejelser nulstiller mikrocontrolleren uendeligt med meget korte intervaller. Dette kan beskadige Arduino-kortet og forhindre kode i at blive uploadet korrekt til det. Hvis dette sker, er det nødvendigt at brænde bootloaderen med en anden Arduino som internetudbyder på den låste Arduino...
Når vi bruger Arduino vagthund, er det nødvendigt at bruge bit registre at definere chippens opførsel. De relevante registre og deres betydning er detaljeret i mikrocontrollerdatabladet, der findes på Arduino-kortet. Arduinos integrerede udviklingsmiljø (IDE) kommer dog med nogle funktioner og makroer designet til at forenkle denne proces, som kan importeres ved at inkludere biblioteket #omfatte at bruge AVR-chip-vagthunden.
På denne måde kan vi konfigurere vagthunden aktivere den ved hjælp af wdt_enable()-funktionen. Argumentet til denne funktion bestemmer tiden før kortet nulstilles, hvis timeren ikke er blevet nulstillet. Med hensyn til de værdier, som du kan konfigurere i koden, inkluderer jeg dem her:
Tid før vagthund udløses | wtd_enable() argument |
15 ms | WDTO_15MS |
30 ms | WDTO_30MS |
60 ms | WDTO_60MS |
120 ms | WDTO_120MS |
250 ms | WDTO_250MS |
500 ms | WDTO_500MS |
1 s | WDTO_1S |
2 s | WDTO_2S |
4 s | WDTO_4S |
8 s | WDTO_8S |
Eksempel på brug af watchdog på Arduino
Lad os endelig se, hvordan vagthunden bruges praktisk med et eksempel i Arduino IDE. Som vi ser, er det ganske enkelt, du kan finde forskellige kildekoder som denne på internettet, for at kunne øve, modificere og oprette dine egne koder til at bruge watchdog i dine projekter. Lad os se vores eksempel:
#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... }
Som det kan ses i dette skitseeksempel til Arduino, er der tre funktioner af det bemærkelsesværdige programmeringssprog til styring af vagthunden, og disse er:
- wdt_disable() for at deaktivere timeren, mens du konfigurerer Arduino.
- wdt_enable(tid) at tildele et interval til timeren og starte den, med angivelse af den tilsvarende tid, som jeg har vist i den foregående tabel.
- wdt_reset() for at forny det tildelte interval og så programmet ikke genstarter.