Probablemente podría escribirse un libro sobre esto. Intentaré cubrir los puntos altos.
El WDT es una herramienta que se puede usar para ayudar a satisfacer algunos requisitos a nivel de sistema, y esos requisitos son la motivación principal. Pueden estar relacionados con la seguridad o surgir de un deseo de reducir algunas molestias para el usuario. Hay otras herramientas como monitores de reloj, WDT externos, redundancia, interrupciones en el acceso a ubicaciones de memoria incorrectas, interbloqueos de varios tipos, etc.
Un WDT no evitará nada, puede usarse para ayudar a recuperarse de un trastorno del sistema. Cuando se activa un tiempo de espera de WDT, sabes que algo realmente malo ha sucedido, pero no sabes exactamente qué, así que debes comenzar algún tipo de operación de recuperación. El procesador podría haberse apagado y haber hecho todo tipo de cosas: memoria dañada (RAM o EEPROM), reescrito SFR a valores incorrectos, establecer salidas a estados indeseables, etc. Lo primero que debe hacer es poner el sistema en una Estado "seguro" si eso es una preocupación, y si es posible. Por ejemplo, un calentador de 10kW se debe apagar en la mayoría de los casos (hay casos en los que "encendido" es mejor). Es posible que algunas cosas (considere un piloto automático de avión no tripulado) no tengan un estado pasivo seguro, y es posible que deba reanudar la operación e intentar recuperarse.
Antes de restablecer el WDT (como usted dice, debería suceder en la rutina principal) debe verificar tantas cosas como sea posible, no solo que llegó a la rutina de restablecimiento. Es posible que desee confirmar que los valores conocidos, como los SFR, no hayan cambiado (o volver a escribirlos si eso no perturba las cosas). Es una mala idea depender de los valores predeterminados de encendido. Es posible establecer indicadores que indican la finalización sin errores de operaciones importantes; puede hacer que los indicadores sean persistentes (marcar un error y nunca restablecerlo) luego, si su rutina de restablecimiento de WDT encuentra que el indicador ha sido configurado, tiene la opción de realizar una recuperación completa.
Es una buena práctica tener el reinicio de WDT cercado por saltos para que no pueda ejecutarlo accidentalmente (por ejemplo, ejecutando los NOP en la memoria no utilizada). Algunas implementaciones de WDT tienen una función de ventana que requiere un tiempo mínimo entre reinicios y un máximo, lo que evita que alguna rutina no anticipada se reinicie accidentalmente.
En cuanto al tiempo de espera de WDT, desea que sea lo suficientemente corto como para que no ocurra nada malo, o que la WDT no sea tan útil. En el caso de un sistema térmico, un par de segundos puede no ser un problema. En el caso del sistema de control de movimiento, los milisegundos podrían ser mejores. Demasiado frecuente y puede tener problemas para restablecerlo con la frecuencia suficiente.
Es mejor tener un WDT que no se puede desactivar desde el firmware y no se puede configurar a un tiempo de espera demasiado largo (que es casi lo mismo que estar desactivado). Por lo general, los procesadores bien diseñados tienen alguna protección contra un procesador errante que hace ese tipo de cosas.
En el caso de que tenga que restablecerlo con mucha frecuencia, pero tiene una ejecución de bucle de control muy lenta, puede usar una bandera o un temporizador para indicar un problema en la rutina lenta y restablecer el WDT si se agota el tiempo. Eso, esencialmente, agrega un software WDT a la rutina lenta.
Un ejemplo de eso podría ser un sistema de movimiento que realiza un algoritmo de autoajuste en el fondo. Necesita un WDT muy rápido para evitar que el sistema realice movimientos indeseables, pero el autoajuste lleva más tiempo.