Neste novo artigo vamos ver o que é um cão de guarda, para que pode ser usado e como usá-lo em seus projetos Arduino. Tudo o que você precisa saber sobre esta função interessante, mas desconhecida. E sim, como o próprio nome sugere (watchdog), pode ser usado para rastrear alguns problemas.
Aqui veremos tudo que você precisa saber a respeito de…
O que é um cão de guarda?
Na computação, um cão de guarda é um mecanismo de supervisão usado para monitorar a operação de um sistema ou programa. A sua principal função é detectar e responder a situações anormais ou falhas no sistema, como travamentos ou congelamentos, e tomar medidas corretivas para garantir a continuidade do funcionamento ou a recuperação do sistema.
O cão de guarda funciona com um temporizador que está configurado para um intervalo de tempo específico. Se o sistema ou programa não executa uma ação específica ou não liga o watchdog (ou seja, não o reinicia) dentro desse intervalo de tempo, o watchdog assume que o sistema está em um estado indesejado ou parou de responder corretamente e toma uma decisão predeterminada. Ação. Esta ação pode variar de acordo com a implementação e pode incluir a reinicialização do sistema, a geração de logs de erros, o acionamento de alarmes ou a tomada de ações específicas para corrigir o problema.
O watchdog é usado em uma variedade de sistemas e dispositivos de computador, desde sistemas operacionais e servidores até dispositivos sistemas embarcados e críticos em tempo real, incluindo Arduino. Seu principal objetivo é melhorar a confiabilidade e a disponibilidade do sistema, detectando e respondendo automaticamente aos problemas, reduzindo assim a necessidade de intervenção manual em situações de falha.
O que é o cão de guarda do Arduino?
O temporizador watchdog do Arduino deve ser ajustado de acordo com as necessidades da aplicação. Ele Cronômetro de vigilância faz uso de uma fonte de clock interna de 128 kHz (pode variar dependendo da placa e do MCU utilizado). Quando ativado, inicia a contagem de zero até um valor pré-determinado pelo usuário. Se o Watchdog Timer não for zerado ao atingir esse valor, ele zera o microcontrolador.
O temporizador do cão de guarda ATmega328P, que é implementado em Arduino UNO, oferece 10 configurações de tempo diferentes, cada uma determinando quando o cronômetro irá transbordar e, portanto, causar uma reinicialização. Os diferentes intervalos de tempo são os seguintes: 16 ms, 32 ms, 64 ms, 0.125 segundos, 0.25 segundos, 0.5 segundos, 1 segundo, 2 segundos, 4 segundos e 8 segundos, como veremos mais adiante na tabela que incluo.
Se ainda não está claro para você o que você pode fazer com Watchdog Timer Arduino UNO, vamos a ver um exemplo para que você entenda graficamente. Neste exemplo, usaremos um simples LED piscando (piscando). Os LEDs piscam por um período definido antes de entrar no loop while(). Este loop while() é usado como uma alternativa a um sistema de bloqueio. Como o Watchdog Timer não é redefinido durante o loop while(), isso causará uma reinicialização do sistema e os LEDs começarão a piscar novamente antes que o sistema trave e reinicie. Este ciclo continuará…
Considerações e recursos
O temporizador do cão de guarda está desativado no início do código. Um atraso de x segundos é incorporado antes de ativar o Watchdog. Esse atraso é crucial para permitir que o bootloader do Arduino verifique se um novo código está sendo carregado e para permitir tempo suficiente para gravar o código na memória flash. Este aspecto é relevante por precaução. Pode surgir uma situação em que, devido a codificação defeituosa ou considerações inadequadas, o código escrito reinicializa o microcontrolador infinitamente em intervalos muito curtos. Isso pode danificar a placa Arduino e impedir que os códigos sejam carregados corretamente nela. Se isso acontecer, você precisa gravar o bootloader usando outro Arduino como ISP no Arduino bloqueado...
Quando utilizamos o watchdog do Arduino, é necessário utilizar registradores de bits para definir o comportamento do chip. Os registros relevantes e seu significado estão detalhados na ficha técnica do microcontrolador que está presente na placa Arduino. Porém, o Ambiente de Desenvolvimento Integrado (IDE) Arduino vem com algumas funções e macros destinadas a simplificar esse processo, que podem ser importadas incluindo a biblioteca #incluir para usar o watchdog do chip AVR.
Desta forma, podemos configurar o watchdog ativando-o usando a função wdt_enable(). O argumento desta função determina o tempo antes do reset da placa se o temporizador não tiver sido zerado. Quanto aos valores que você pode configurar no código, incluo-os aqui:
Tempo antes do watchdog ser acionado | Argumento 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 |
Exemplo de uso de watchdog no Arduino
Por fim, vamos ver como o watchdog é usado na prática com um exemplo no IDE do Arduino. Como podemos ver, é bastante simples, você pode encontrar vários códigos-fonte como este na Internet, para poder praticar, modificar e criar seus próprios códigos para usar o watchdog em seus projetos. Vamos ver nosso exemplo:
#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... }
Como pode ser visto neste exemplo de esboço para Arduino, existem três funções das linguagens de programação notáveis para gerenciar o watchdog, e estas são:
- wdt_disable() para desativar o temporizador durante a configuração do Arduino.
- wdt_enable(tempo) atribuir um intervalo ao cronômetro e iniciá-lo, especificando o tempo correspondente conforme mostrei na tabela anterior.
- wdt_reset() para renovar o intervalo atribuído e para que o programa não reinicie.