Puntos de interrupción AVR ATmega e instrucción BREAK

Uso AVR Studio 4, JTAGIce MkII-CN, gcc para la depuración. Generalmente funciona bien, pero a veces sucede después de alguna interrupción no específica (restablecimiento, ciclo de encendido, etc.) que el punto de interrupción de AVR Studio permanece transformado en la instrucción BREAK y hace que el programa siempre se interrumpa en esta instrucción y no pueda pasar de ninguna manera (visible en la ventana del desensamblador). ).

No puedo investigar dónde está escrita la instrucción porque sobrevive incluso al reinicio de MCU, AVR Studio y el depurador JTAGICE, el BREAK aún persiste allí. Solo volver a flashear MCU ayuda y puedo continuar.

¿El motor de depuración en chip modifica el flash y recuerda las instrucciones originales? No estoy seguro de si funciona más allá de la depuración porque probablemente se ignore BREAK y la instrucción original faltante apenas se detecte.

Nota: No estoy seguro en este momento cuál fue el resultado de leer flash y verificar con el original.

Respuestas (1)

¿El motor de depuración en chip modifica el flash y recuerda las instrucciones originales?

Si y no. Algunos controladores AVR tienen un número limitado (3?) de puntos de interrupción de "hardware" que se pueden configurar dinámicamente en tiempo de ejecución y no vivirán más allá del final de la sesión de depuración (restablecimiento, apagado, ...).

Sin embargo, si/cuando haya establecido más puntos de interrupción de los que están disponibles a través de estos "hardware", o si tiene un controlador sin ninguno de ellos, el software de depuración reemplazará las instrucciones donde se establece su punto de interrupción con instrucciones "BREAK" y los restaurará más tarde. No es de extrañar que una interrupción repentina de la sesión de depuración deje el controlador algo inutilizable hasta que lo vuelva a actualizar, sobrescribiendo los "BREAK" introducidos artificialmente.

Este mecanismo también se menciona en los documentos de AVR, donde afirman que este tipo de depuración puede generar un estrés adicional en la memoria flash: cada vez que se establece, elimina o golpea uno de esos puntos de interrupción, una parte de la memoria flash se reprogramará en el fondo por el software de depuración.

Véase también aquí , por ejemplo.