Si el problema es repetible, será de gran ayuda. El proceso de depuración se puede abordar si tiene un par de herramientas de desarrollo integradas clave disponibles. Estas herramientas incluirían un osciloscopio digital y dos pines GPIO de repuesto en su procesador. A falta de dos pines de repuesto, a menudo es posible volver a implementar temporalmente dos pines en uso para el ejercicio de depuración.
El método de depuración es uno de dividir y conquistar para descubrir qué secciones de su código están en uso cuando ocurre el reinicio errante. El primer paso consiste en agregar código en su rutina de inicio que establece uno de los pines de repuesto como salida y a un nivel lógico que luego volverá a su configuración predeterminada cuando la MCU vuelva a restablecerse. Este GPIO se utilizará como un activador para su alcance digital, de modo que se usará el "modo de finalización de disparo". Es posible que ya tenga una E / S en su sistema que pueda servir como este evento desencadenante. En algunos casos, el reinicio de WDT también puede aparecer directamente visible en el pin de reinicio de MCU. Si cualquiera de estos últimos casos se aplica, puede usar eso en lugar de tener que agregar el uso de este primer pin GPIO.
El siguiente paso es configurar el otro pin de GPIO de repuesto como una salida y luego establecerlo en su nivel no predeterminado seguido de volver a establecerlo en el otro estado dentro de una rama específica de su código de programa. El método común para la mayoría de las MCU es que los pines GPIO están predeterminados en las entradas después del restablecimiento, por lo que se instala un pullup externo para mantener el pin alto mientras aún es una entrada. Su código de prueba luego establecerá el pin como una salida a bajo y luego, un tiempo después, en la rama del código, establecerá la salida en un nivel alto.
Vuelva a compilar, vincular y cargar la versión de prueba del código. Ahora pones el alcance para "finalizar el activador" en la aparición del primer GPIO mencionado, lo que indicará que se ha producido el reinicio erróneo de WDT. Tenga el otro GPIO en un segundo canal del osciloscopio. Luego, inicie su sistema y espere hasta que ocurra el reinicio errante Si observa que este segundo GPIO se establece en nivel bajo y alto antes del evento desencadenante, sabrá que el evento WDT no ocurrió dentro de la rama de código en la que agregó la señal de protocolo de enlace. Por otro lado, si este segundo GPIO vuelve a su estado predeterminado junto con el restablecimiento de WDT, entonces sabrá que el código de culpabilidad está en algún lugar entre los dos lugares en el código donde estableció y borró la señal del protocolo de enlace. (Tenga en cuenta que si no ve el segundo saludo de GPIO en el alcance, entonces sabe que nunca se ingresó una rama de código en particular y, por lo tanto, probablemente no sea la región culpable del código) .
Al evaluar las trazas de alcance, tenga en cuenta que el restablecimiento de WDT se producirá algún tiempo antes de que se active el activador de alcance debido a que usted configuró el GPIO de activación de alcance en la ejecución del código justo después de que el código haya reiniciado. Deberá evaluar la cantidad de demora que hay aquí en su MCU y en su sistema para poder juzgar con precisión si el segundo GPIO de señalización se despeja al reiniciarse WDT o antes. Las carreras de práctica pueden ayudar a afinar la técnica.
El proceso de investigación ahora implica mover la configuración y borrar el segundo protocolo de enlace GPIO en varias partes de su ruta de ejecución de código para tratar de aislar las partes específicas del código que están involucradas con el problema. Si encuentra una rama que es sospechosa, puede entonces reducir el área de enfoque ... es decir. "divide y vencerás".
Una cosa muy buena sobre esta técnica es que la configuración y la eliminación de la señalización GPIO toma muy poco tiempo de ejecución en el procesador y, por lo tanto, no tiene un impacto serio en el rendimiento en tiempo real del código de tiempo crítico. Hay otras técnicas de depuración disponibles, pero en general todas implican una sobrecarga de ejecución mucho mayor que la técnica descrita.