4 votos

¿Cómo depurar el reinicio causado por la violación de la clave de seguridad WDTCTL en MSP430F1611?

Estoy trabajando en un proyecto sensor que utiliza TelosB basado en MSP430F1611 ejecución de TinyOS. Mi programa es restablecer algún tiempo después del arranque. Después de la PUC reset, IFG1 se encuentra con WDTIFG conjunto de bits, lo que indica que el temporizador de vigilancia, se inicia el reset. Esto puede ocurrir en dos casos:

1) temporizador de vigilancia de caducidad cuando vigilancia sólo en el modo. Pero temporizador de vigilancia es nunca comenzó, para que esto no suceda.

2) temporizador de vigilancia de la seguridad de la clave de la infracción. No hay ningún lugar en el que mi programa explícitamente escribe WDTCTL (es decir, 0x0120h). Así que debe haber algo de memoria de acceso error en mi código, que ilegalmente escribe WDTCTL y las causas de la clave de seguridad de la infracción.

¿Hay alguna herramienta de depuración para ayudar a localizar donde sucede esto? O cualquier sugerencia sobre cómo debería proceder a localizar el error? Mi programa es de miles de líneas, de manera manual verificación no es trivial.

8voto

Bernd Puntos 61

Si el problema es repetible va a ayudar muchísimo. El proceso de depuración puede ser abordado si usted tiene un par de claves incorporado herramientas de desarrollo disponibles. Estas herramientas incluyen un osciloscopio digital y dos de repuesto pines GPIO en su procesador. En la ausencia de los dos pasadores de repuesto es a menudo posible temporalmente re-implementar de dos en uso de pines para el propósito de la depuración de ejercicio.

El método de depuración es uno de divide y vencerás para descubrir en qué sección(s) de su código en uso cuando el errante restablecer sucede. El primer paso consiste en la adición de código en su rutina de inicio que establece uno de los pasadores de repuesto como salida y a un nivel de lógica que será cambiado por defecto cuando el MCU vuelve a restablecer. Este GPIO se utiliza como disparador de su ámbito digital tales que el "fin, el modo de disparo" va a ser utilizado. Es posible que usted ya tiene una e/S en el sistema que pueden servir como este evento de disparo. En algunos casos, el WDT reset también puede aparecer visibles directamente en el MCU pin reset. Si cualquiera de estos últimos casos se aplica entonces usted puede utilizar que en lugar de tener que añadir el uso de este primer pin GPIO.

El siguiente paso es definir el otro de repuesto GPIO pin como salida y, a continuación, establezca su defecto no nivel luego de regreso al otro estado dentro de una rama específica de su código de programa. El método más común para la mayoría de los Mcu es que los pines GPIO predeterminada para las entradas después de reiniciar, por lo que un externo pull-up está instalado para mantener el pin de alta, mientras que todavía es una entrada. El código de prueba sería, a continuación, establezca el pin como salida a la baja y, a continuación, después de un tiempo más tarde en el código de la sucursal configurar la salida a un alto nivel.

Re-compilar, enlazar y cargar la versión de prueba del código. Ahora pones el ámbito de aplicación a "fin de disparo" en la aparición de la primera mencionado GPIO que será señal de que el errante WDT restablecer ha sucedido. El otro GPIO en un segundo canal del osciloscopio. A continuación, iniciar el sistema y espere hasta que el errante restablecer sucede. Si usted nota que esta segunda GPIO conjuntos de baja y alta de la espalda antes de que el evento de disparo, entonces se sabe que el WDT evento no ocurra dentro de la rama de código donde se ha añadido el apretón de manos de la señal. Por otro lado, si este segundo GPIO devuelve a su estado predeterminado en conjunción con el WDT reset, entonces usted sabe que el culpable de código es en algún lugar entre los dos lugares en el código donde se establece y se borra el apretón de manos de la señal. (Tenga en cuenta que si usted no ve la segunda GPIO apretón de manos en el ámbito de aplicación, entonces usted sabe que rama particular de código, incluso, nunca se entró y por lo tanto probablemente no es el culpable de la región de el código).

Al evaluar el alcance huellas tomar nota de que el WDT restablecer pasará algún tiempo antes de que el ámbito de aplicación de gatillo ocurre debido al hecho de que el programa de instalación del ámbito gatillo GPIO en la ejecución de código justo después de que el código ha de volver a empezar -. Usted tendrá que evaluar cuánto retraso que hay aquí en el MCU y en su sistema de modo que usted puede juzgar con precisión si el segundo señalización GPIO sucede al WDT tiempo de restablecimiento o anterior en el tiempo. La práctica se ejecuta puede ayudar a perfeccionar la técnica.

El proceso de investigación ahora consiste en mover el ajuste y la eliminación de la segunda GPIO apretón de manos a su alrededor en varias partes de su ruta de ejecución de código para tratar de aislar la parte del código que están involucrados con el problema. Si usted encuentra una rama que se sospecha que puede, a continuación, reducir el área de enfoque....es decir, "divide y vencerás".

Una cosa muy agradable acerca de esta técnica es que el ajuste y la limpieza de la señalización GPIO lleva muy poco tiempo de ejecución en el procesador, y por lo tanto no tienen un grave impacto en el rendimiento en tiempo real de tiempo de código crítico. Hay otras técnicas de depuración disponibles, pero todos ellos generalmente implican mucho mayor ejecución de gastos generales de la técnica descrita.

2voto

Scott Puntos 138

De hecho, este es uno de los desafíos de la programación embebida. Veo varias opciones para tratar y reducir el problema:

1) Usar JTAG conectado a la TelosB y poner un breakpoint en el acceso a los temporizador de vigilancia. En algún momento espero que se manifiestan y se va a romper y se puede mirar.

2) utilice el FLASH (ya sea de información o de flash) para registro de estado de las operaciones por lo que estás haciendo con una marca de tiempo y otra información útil. A continuación, puede conectar usando JTAG (tenga cuidado de no borrar la Flash), extraer los datos y la mira. Tal vez incluso almacenar rudimentaria información de seguimiento que pueden ser útiles.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X