2025-10-23 8:04 AM
Estoy trabajando con un STM32G0 que ejecuta ThreadX (Azure RTOS).
El UART del sistema está configurado en modo DMA circular con una interrupción de evento IDLE para la recepción de datos.
Síntomas:
De forma intermitente, tras cientos de recepciones exitosas, el sistema genera un error HardFault_Handler.
El fallo siempre ocurre en el mismo punto del código (en una instrucción de división de C, dentro de una función no relacionada con DMA).
Los valores de registro en HardFault se muestran en la Imagen 1.
Cuando se ejecuta sin provocar un fallo grave, los registros son:
xPSR = 0x01000000 y CONTROL = 2.
Cuando ocurre el fallo grave, estos registros son:
xPSR = 0x00000000 y CONTROL = 0.
El fallo no depende de los datos recibidos.
La pila de subprocesos (PSP) tiene suficiente espacio.
Creo que el HardFault intermitente no está relacionado con la operación en sí:
si modifico el código (agregando nuevas instrucciones o eliminando código), a veces se reproduce y otras veces todavía se reproduce, pero en diferentes partes del código.
Pregunta:
¿Qué puedo hacer para determinar la causa de este fallo grave? No logro identificar el problema.