quarta-feira, 16 de maio de 2012

Watchdog TIMER (WDT)


Vou começar a postar um pouco de material que eu já produzi. Eis aqui uma explanação sobre watchdog timer, que é um tema um tanto obscuro, mas muito útil e simples de entender e usar!

“Um microprocessador executa instruções da memória. Se ocorrer uma descarga elétrica próxima ao sistema, o barramento de dados do processador pode ser momentaneamente perturbado e fazer com que o processador leia algum byte errado da memória. Pode ocorrer ainda um bug do software que resulte em um estouro de pilha, então o processador pega lixo quando tenta voltar de uma sub-rotina. Nestes dois casos, o processador se perde e passa a executar o programa de forma equivocada.

Se estes problemas acontecerem em um computador, a solução seria simplesmente resetá-lo que ele voltaria a executar o programa normalmente. Porém, em sistemas embarcados, normalmente não existe este botão de reset e para prevenir estes problemas muitos sistemas utilizam o Watchdog Timer (WDT). O WDT é um contador que deve ser resetado pelo microprocessador em um tempo regular. Se isto não acontece, o WDT reseta o microcontrolador.

O Watchdog Timer é incrementado automaticamente com base em um clock independente (o PIC possui um oscilador RC interno exclusivo para o WDT) (Souza, 2000, pg 22). Se o WDT não for zerado pelo programa antes de estourar sua contagem (passar de 0xFF para 0x00), o microcontrolador é resetado. O contador do WDT estoura tipicamente em 18ms, mas pode variar de acordo com a tensão de alimentação, temperatura (SOUZA, 2000, pg 23) ou ainda configurado via prescaler. O prescaler é um divisor que pode ser aplicado ao contador TMR0 ou ao WDT. Com o prescaler o tempo de estouro do WDT pode ser aumentado em 2, 4, 8, 16, 32, 64, 128 ou 256 vezes. O oscilador interno do WDT torna este contador independente da freqüência do oscilador externo e garante o tempo de incremento constante.

A função do WDT é "acompanhar" a execução do código para identificar algum problema (BCL, 2002, pg 17). Se o programa em execução falha e não zera o contador do WDT ele interpreta que o sistema não está operando corretamente e reseta o microcontrolador (BCL, 2002, pg 37).

O programador não tem acesso ao WDT, tanto para leitura quanto para escrita. O programador apenas pode zerá-lo utilizando o comando 'CLRWDT', para evitar que o contador estoure e o sistema seja resetado.

A importância do WDT está no fato de que ele pode identificar quando o sistema opera erroneamente logo que isto acontece. Com o sistema fora de sua execução normal o programa deixa de zerar o contador e este estoura, então o WDT reseta o microcontrolador.

Um problema que envolve o uso do WDT é ter certeza que o programa está rodando corretamente. Por exemplo, um bug de softwarepode colocar erroneamente o processador em um looping infinito, sem fazer nada, mas servindo as interrupções. Se o reset do WDT estiver em uma rotina de interrupção, ele não vai estourar a contagem e não irá gerar o reset do microcontrolador, apesar deste estar funcionando de maneira irregular. De forma contrária, se o reset do WDT estiver dentro de um looping no programa, um bug de softwarepode desabilitar as interrupções e estas não mais serão servidas, mas o WDT “entenderá” que o sistema está executando de forma correta e não ativará o reset.

O WDT pode ser desabilitado no momento da gravação do PIC, mas não pode ser ligado ou desligado em tempo de execução (SOUZA, 2000, pg 23).”

Fonte:
Duarte, Rafael Lindemann. SISTEMA INTELIGENTE DE MONITORAMENTO E CONTROLE DE IRRIGAÇÃO. São José: UNIVALI, 2006. (TCC Ciência da Computação)

Nenhum comentário:

Postar um comentário