Arduino Watchdog: Sådan fungerer det

vagthund Arduino

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?

bøger om arduino

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.

En mikrocontroller, eller MCU, er en lille elektronisk enhed, der integrerer en central processing unit (CPU), hukommelse, input/output periferiudstyr og nogle gange kommunikationsgrænseflader på en enkelt chip. Det er designet til at kontrollere og udføre specifikke opgaver.

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
For mere information kan du konsultere Arduino databladet, hvor du kan finde flere detaljer om selve den integrerede mikrocontroller, de registre, der kan bruges med vagthunden, pinout, perifere enheder, tekniske specifikationer, spændinger, strømforbrug osv.

Eksempel på brug af watchdog på Arduino

Arduino IDE, datatyper, programmering

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.

Vær den første til at kommentere

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.