Arduino Watchdog: jak to działa

pies stróżujący Arduino

W tym nowym artykule zobaczymy, co to jest a Watchdog, do czego można go używać i jak go używać w swoich projektach Arduino. Wszystko, co musisz wiedzieć o tej interesującej, ale nieznanej funkcji. I tak, jak sama nazwa wskazuje (watchdog), można go używać do śledzenia niektórych problemów.

Tutaj zobaczymy wszystko, co musisz wiedzieć w sprawie…

Co to jest watchdog?

W informatyce, a pies podwórzowy Jest to mechanizm nadzorczy używany do monitorowania wydajności systemu lub programu. Jego podstawową funkcją jest wykrywanie i reagowanie na nietypowe sytuacje lub awarie systemu, takie jak awarie lub zawieszanie się, oraz podejmowanie działań naprawczych w celu zapewnienia ciągłości działania lub przywrócenia systemu.

Pies stróżujący działa na timerze który jest skonfigurowany na określony przedział czasu. Jeśli system lub program nie wykona określonej akcji lub nie zasili watchdoga (tj. nie uruchomi go ponownie) w tym przedziale czasu, watchdog zakłada, że ​​system znajduje się w niepożądanym stanie lub przestał poprawnie odpowiadać i podejmuje z góry określone działanie. To działanie może się różnić w zależności od implementacji i może obejmować ponowne uruchomienie systemu, wygenerowanie dzienników błędów, wyzwolenie alarmów lub podjęcie określonych kroków w celu rozwiązania problemu.

Watchdog jest używany w różnych systemach komputerowych i urządzeniach, od systemów operacyjnych i serwerów po urządzenia wbudowane i krytyczne systemy czasu rzeczywistego, w tym Arduino. Jego głównym celem jest poprawa niezawodności i dostępności systemu poprzez automatyczne wykrywanie problemów i reagowanie na nie, zmniejszając w ten sposób potrzebę ręcznej interwencji w sytuacjach awaryjnych.

Co to jest watchdog Arduino?

książki o arduino

Timer watchdog Arduino należy dostosować do potrzeb aplikacji. On Zegar kontrolny wykorzystuje wewnętrzne źródło zegara 128 kHz (może się różnić w zależności od użytej płyty i MCU). Po aktywacji rozpoczyna odliczanie od zera do wartości określonej przez użytkownika. Jeśli licznik czasu Watchdog nie zostanie zresetowany po osiągnięciu tej wartości, resetuje mikrokontroler.

Mikrokontroler, czyli MCU, to małe urządzenie elektroniczne, które integruje jednostkę centralną (CPU), pamięć, urządzenia peryferyjne wejścia/wyjścia, a czasami interfejsy komunikacyjne w jednym chipie. Przeznaczony jest do kontrolowania i wykonywania określonych zadań.

Zegar Watchdoga ATmega328P, który jest realizowany w Arduino UNO, oferuje 10 różnych ustawień czasu, z których każde określa, kiedy licznik czasu zostanie przepełniony i w związku z tym spowoduje reset. Różne przedziały czasowe są następujące: 16 ms, 32 ms, 64 ms, 0.125 sekundy, 0.25 sekundy, 0.5 sekundy, 1 sekunda, 2 sekundy, 4 sekundy i 8 sekund, jak zobaczymy później w tabeli, którą załączam.

Jeśli nadal nie jest dla Ciebie jasne, co możesz zrobić z zegarem Watchdog Arduino UNO, zobaczymy Przykład żebyś mógł to zrozumieć graficznie. W tym przykładzie użyjemy prostego migania diody LED (migania). Diody LED migają przez określony czas przed wejściem do pętli while(). Ta pętla while() jest używana jako alternatywa dla systemu blokującego. Ponieważ licznik czasu Watchdog nie jest resetowany w pętli while(), spowoduje to ponowne uruchomienie systemu, a diody LED zaczną ponownie migać, zanim system ulegnie awarii i ponownym uruchomieniu. Ten cykl będzie kontynuowany…

Rozważania i funkcje

Zegar Watchdoga Jest wyłączony na początku kodu. Przed włączeniem Watchdoga włączane jest opóźnienie x sekund. To opóźnienie jest kluczowe, aby program ładujący Arduino mógł sprawdzić, czy ładowany jest nowy kod i aby zapewnić wystarczającą ilość czasu na wypalenie kodu w pamięci flash. Ten aspekt jest istotny jako środek ostrożności. Może zaistnieć sytuacja, w której z powodu błędnego kodowania lub niewłaściwych rozważań napisany kod resetuje mikrokontroler w bardzo krótkich odstępach czasu w nieskończoność. Może to spowodować uszkodzenie płytki Arduino i uniemożliwić prawidłowe przesłanie do niej kodów. Jeśli tak się stanie, musisz wypalić program ładujący, używając innego Arduino jako dostawcy usług internetowych na zablokowanym Arduino...

Kiedy korzystamy z watchdoga Arduino, konieczne jest użycie rejestry bitowe określić zachowanie chipa. Odpowiednie rejestry i ich znaczenie są szczegółowo opisane w arkuszu danych mikrokontrolera znajdującym się na płytce Arduino. Jednakże zintegrowane środowisko programistyczne Arduino (IDE) zawiera pewne funkcje i makra zaprojektowane w celu uproszczenia tego procesu, które można zaimportować poprzez dołączenie biblioteki #włączać aby użyć watchdoga chipa AVR.

W ten sposób możemy skonfigurować watchdoga aktywując go za pomocą funkcji wdt_enable().. Argument tej funkcji określa czas, po którym nastąpi reset karty, jeśli timer nie został zresetowany. Jeśli chodzi o wartości, które możesz skonfigurować w kodzie, zamieszczam je tutaj:

Czas przed uruchomieniem watchdoga argument wtd_enable().
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
Więcej informacji można znaleźć w arkuszu danych Arduino, w którym można znaleźć więcej szczegółów na temat samego zintegrowanego mikrokontrolera, rejestrów, których można używać z watchdogiem, pinoutów, urządzeń peryferyjnych, specyfikacji technicznych, napięć, zużycia energii itp.

Przykład użycia watchdoga na Arduino

Arduino IDE, typy danych, programowanie

Na koniec zobaczmy, jak watchdog jest używany w praktyce na przykładzie w Arduino IDE. Jak widzimy, jest to dość proste, w Internecie można znaleźć różne tego typu kody źródłowe, aby móc ćwiczyć, modyfikować i tworzyć własne kody, aby używać watchdoga w swoich projektach. Zobaczmy nasz przykład:

#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...
}

Jak widać na tym przykładzie szkicu dla Arduino, są trzy funkcje z godnych uwagi języków programowania do zarządzania watchdogiem, a są to:

  • wdt_disable() aby wyłączyć timer podczas konfiguracji Arduino.
  • wdt_enable(czas) aby przypisać interwał do timera i uruchomić go, określając odpowiedni czas, jak pokazałem w poprzedniej tabeli.
  • wdt_reset() aby odnowić przypisany interwał i aby program nie uruchomił się ponownie.

Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.