TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
03 de Septiembre de 2010, 05:25:06

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
257111 Mensajes en 28437 Temas por 27916 Usuarios
Último usuario: zororyuzaki
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  Todo en microcontroladores PIC (Moderadores: marmatar, MGLSOFT, Modulay, pocher, Sasián, Suky)
| | |-+  ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Marcar como favorito Imprimir
Autor Tema: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.  (Leído 897 veces)
RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 4876



WWW
« : 27 de Febrero de 2009, 05:53:01 »

El "Watch Dog Timer" o "Temporizador Perro guardián" es un artificio que se utiliza de antiguo para evitar que los microprocesadores se queden "colgados".

No es extraño que en microelectrónica se den circunstancias de hardware o firmware no previstas por el diseñador en las que un microprocesador se quede en un estado indeterminado del que le sea imposible salir sin una ayuda externa.

El WDT lo que hace fundamentalmente es resetear el micro tras un periodo de tiempo determinado. Su funcionamiento es similar a la Interrupción por Desbordamiento de un Timer, que se produce cuando un Timer que es incrementado continuamente pasa de su valor máximo al mínimo para comenzar de nuevo a contar.

En el caso del WDT en lugar de saltar una interrupción se genera un reset automático en el momento de producirse dicho desbordamiento.

Pero evidentemente en condiciones normales, nuestro micro funcionando correctamente, no debería producirse dicho reset automático.

Para evitar que el reset se dispare es para lo que aplicamos el restart_wdt(); o sea que "restauramos" el timer del WDT, o lo que es lo mismo: lo volvemos a poner a 0 "a mano" y vuelve de nuevo a iniciar su cuenta para acercarse al abismo y amenazarnos con resetear el micro si antes no lo "restauramos" de nuevo.

Un ejemplo tonto:

Configuramos nuestro WDT para que salte cada 5 ms, por ejemplo.

Entramos en una rutina que espera a que le lleguen una docena de caracteres vía rs232, y cada vez que le llega uno hace un restart_wdt().

Al recibir el doceavo carácter sale de la rutina y continua su ejecución normal.

Por manos del demonio se nos escapa el hacha que con la que estábamos haciendo juegos malabares y corta accidentalmente el cable de la rs232, justo cuando el PIC había recibido el carácter número 11 de los 12 que esperaba.

Por lo tanto nuestro programa se queda esperando un carácter que nunca le va a llegar, al menos durante el tiempo en que tardemos en sustituir el cable accidentado.

¿Y qué ocurre entonces con el resto de del programa que debía estar funcionando? pues que todo está detenido indefinidamente.

Pero, para eso está el WDT. Como restaurábamos el contador cada vez que recibíamos un carácter y estos iban llegando, uno a uno en su cadencia natural, el WDT no se desbordaba y todo iba bien. Pero tras recibir nuestro 11 carácter y quedarse esperando el 12 nadie ha restaurado el WDT por lo que este camina, paso a paso, tick a tick, hasta el temible desbordamiento ... y éste se produce indefectiblemente 5 ms después de haber recibido el onceavo carácter.

El PIC se resetea y todo vuelve a comenzar de nuevo.

Si hemos sido lo suficientemente inteligentes como para escribir un 1 en la EEPROM al iniciar la recepción de los susodichos 12 bytes, y teníamos previsto escribir un 0 en la EEPROM en el mismo sitio para indicar que la última recepción de 12 bytes fue un completo éxito tendremos disponible un indicador veraz y seguro de que al reiniciarse nuestro PIC sabremos fehacientemente que la última recepción fue bien o por el contrario se convirtió en un completo, total y rotundo fracaso y, por lo menos, nos tomaremos con precaución el asunto de la RS232.

Nuestro programa podrá seguir su curso evitando los terrenos pantanosos y habilitando los medios para solventar los problemas que nos hemos encontrado.

Un saludo. Mañana más.  Mr. Green
En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
RICHI777
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 812


« Respuesta #1 : 28 de Febrero de 2009, 01:16:14 »

Hola Maestro, perdon pero me parece que el ejemplo que pusiste del Watch Dog no es la mejor manera de hacer eso, todas las rutinas series deberan manejar la no llegada de caracteres via time-out y no restearse por Wacth-Dog.

Saludos !
En línea
Cryn
Colaborador
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 3914


ahora con C18 C30 C32


« Respuesta #2 : 28 de Febrero de 2009, 02:11:54 »

me parece que ya leí esto por algún lado Mr. Green

que rutinas son las típicas para colocar el WDT?
En línea

El peor día, cuando te fuiste.
Cuando estabas a nuestro lado, los mejores
todopic
Administrador
DsPIC30
*******
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 2610


Norberto Pellegrini


WWW
« Respuesta #3 : 28 de Febrero de 2009, 02:48:47 »

Hola Diego, interesante aporte!
En lenguage ensamblador, seria  CLRWDT  la instrucción que borra al WDT, y ya que estamos, creo que es valido indicar que es un oscilador RC que está independiente del oscilador del micro....

Un abrazo!

Norberto
En línea

Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...
RICHI777
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 812


« Respuesta #4 : 28 de Febrero de 2009, 03:45:23 »

Hola, segun mi entender ninguna rutina deberia manejar watch-dog, las llamadas al reset del mismo solo deberian colocarse en lugares estrategicos del código y que se ejecuten en forma periodica para garantizar el refresco del mismo, pero esto solo es para garantizar la estabilidad del sistema.

Saludos !
En línea
Cryn
Colaborador
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 3914


ahora con C18 C30 C32


« Respuesta #5 : 28 de Febrero de 2009, 04:12:36 »

yo siempre encuentro solo un lugar estratégico Mr. Green, pero me queda la duda de que si debe estar por lo menos 2 o 3 veces para que funcione mejor
En línea

El peor día, cuando te fuiste.
Cuando estabas a nuestro lado, los mejores
RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 4876



WWW
« Respuesta #6 : 28 de Febrero de 2009, 04:53:53 »

No. El ejemplo que he puesto es como dije un "ejemplo tonto" para ver cómo nuestro programa puede quedarse dentro de un bucle sin salida y cómo el Watchdog puede sacarlo de ahí.

Es muy importante depurar al límite el programa antes de activar el Wachtdog. Éste puede enmascarar errores de diseño de nuestro programa que deberían contemplarse por si mismos y no recurrir al Watchdog para sacarnos de ellos.

En mis programas solo activo el Watchdog solo cuando estoy razonablemente seguro de que no tengo trozos de programa como pozos donde si entro no salgo.

En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
Nocturno
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 12825



WWW
« Respuesta #7 : 01 de Marzo de 2009, 02:32:52 »

A mí no me parece equivocado usar un reset a propósito si la aplicación así lo requiere. Una vez vi un dimmer que se reseteaba 50 veces por segundo para gestionar el encendido del triac y luego se ponía en SLEEP. Y era un ejemplo de la propia Microchip.

En tu ejemplo "tonto", que no lo es tanto Don Diego, podríamos incluso usar una variable RAM en vez de la eeprom como marcador de tarea incompleta puesto que al resetear no se inicializan.
En línea

Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ
RICHI777
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 812


« Respuesta #8 : 01 de Marzo de 2009, 06:44:37 »

Bueno, esta bien, no es lo que haria yo pero tambien reconozco que es una buena solución.

Saludos !
En línea
TODOPIC
   

 En línea
Páginas: [1] Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC XHTML 1.0 válido! CSS válido!
Página creada en 0.083 segundos con 22 consultas.