Eliminación de bloqueo después de doble falta

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

Nota: uso automático de puntos de interrupción de hardware para direcciones de solo lectura.

stm32f2xxx.cpu: borrado del bloqueo después de una doble falla

Programa recibido señal SIGINT, Interrupción. 0xf8ad0300 en ?? ()

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

Por cierto, es posible que desee etiquetar esta pregunta con cortex-m3. No tiene casi nada que ver con stm32 directamente (a excepción de eso de stm32f2xxx.cpu).

Respuestas (1)

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

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

Una razón común para un bloqueo por doble falla sería un problema con su código de inicio. Consulte ¿Por qué mi Cortex-M3 se bloquea con una falla grave tres ciclos después del reinicio? para ver un ejemplo de una mala configuración común (tabla de vectores incorrecta) que provocará un bloqueo. La secuencia de eventos que conducen al encierro real no es obvia, por lo que es una lectura fascinante.

(Tenga en cuenta que el núcleo de Cortex-M es muy complejo y cualquier explicación que no sea el propio Manual de referencia necesariamente se simplifica en exceso. Siéntase libre de agregar puntos específicos a su pregunta sobre los que desea obtener más detalles).