Eliminación del bloqueo después de una doble falla

2

Estoy depurando un STM32 con gdb. Por alguna razón, mi programa falla y gdb da lo siguiente.

  

Nota: utilizando automáticamente puntos de interrupción de hardware para solo lectura   direcciones.

     

stm32f2xxx.cpu: eliminar el bloqueo después de una doble falla

     

Señal recibida del programa SIGINT, Interrupción. 0xf8ad0300 en ?? ()

No entiendo lo que está diciendo. ¿Qué es un lockup ? ¿Qué es un double fault ? ¿Qué es un archivo .cpu ?

    
pregunta Randomblue

1 respuesta

5

.cpu no es un archivo, es un nombre AFAIK de JTAG TAP (una interfaz para el hardware de depuración en tu chip al que se conecta el depurador).

Un bloqueo de doble falla ocurre básicamente cuando se lanza una falla desde dentro de un controlador de prioridad -1 (falla dura). La CPU Cortex-M no permite que eso suceda y deja de ejecutar instrucciones (en términos generales). Consulte la sección B1.5.15 del Manual de referencia de arquitectura ARMv7-M (Casos de excepción irrecuperables) para conocer toda la historia. Tenga en cuenta que todas las fallas se escalan a una falla dura de manera predeterminada (es decir, justo después del reinicio); en esta situación, cualquier falla provocará un bloqueo si la CPU no puede ejecutar el controlador de falla dura por cualquier motivo.

Una razón común para un bloqueo de doble falla sería un problema con su código de inicio. Consulte ¿Por qué mi Cortex-M3 se bloquea con una falla dura? ¿Tres ciclos después de reiniciar? para ver un ejemplo de una configuración errónea común (tabla de vectores incorrecta) que causará un bloqueo. La secuencia de eventos que llevan al bloqueo real no es obvia, por lo que resulta una lectura fascinante.

(Tenga en cuenta que el núcleo de Cortex-M es muy complejo y que cualquier explicación que no sea el Manual de referencia es necesariamente simplificada. No dude en agregar puntos específicos a su pregunta sobre los que desee más detalles)

    
respondido por el Thorn

Lea otras preguntas en las etiquetas