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

1

Uso AVR Studio 4, JTAGIce MkII-CN, gcc para la depuración. Generalmente funciona bien, pero a veces sucede después de una interrupción inespecífica (reinicio, ciclo de alimentación, etc.) que el punto de interrupción de AVR Studio se transforma en instrucción BREAK y hace que el programa siempre se interrumpa con esta instrucción y no pueda realizarse de ninguna manera (visible en la ventana del Desensamblador ).

No puedo investigar dónde se escribe la instrucción porque sobrevive incluso al reinicio de MCU, AVR Studio y JTAGICE, el BREAK aún persiste. Solo volver a grabar 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 BREAK probablemente se ignora y las instrucciones originales que faltan son apenas detectables.

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

    
pregunta TMa

1 respuesta

3
  

¿El motor de depuración en chip modifica el flash y recuerda el original?   instrucción?

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

Sin embargo, si / cuando ha 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 del depurador reemplazará las instrucciones donde se establece su punto de interrupción con "BREAK" "instrucciones y las restauraré más tarde. No es de extrañar que una interrupción repentina de la sesión de depuración dejará al controlador un poco inutilizable hasta que lo vuelva a flashear, 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 suponer una carga adicional para la memoria flash: cada vez que se establece o elimina o golpea un punto de interrupción de este tipo, una parte del flash se reiniciará. -programado en segundo plano por el software del depurador.

Vea también aquí , por ejemplo.

    
respondido por el JimmyB

Lea otras preguntas en las etiquetas