Capturar registros y analizar fallos¶
Las guías debug_logging y crash_analysis del SDK se complementan: los registros muestran qué hacían ambos núcleos, mientras que una imagen de memoria permite al depurador recuperar el contexto de ejecución en el momento del fallo. Conserve junto a cada captura el ELF correspondiente, los archivos de mapa y símbolos, la revisión del SDK, el modelo del chip, la configuración y la revisión de la placa.
Elegir una conexión de depuración¶
Tabla: Conexiones de depuración y registro por familia SF32
| Familia | Métodos de depuración y registro |
|---|---|
| SF32LB52x, SF32LB56x, SF32LB58x | La guía oficial documenta la captura por UART, SifliUsartServer/AssertDumpUart y la recuperación con J-Link/Trace32. Use el transporte que siga disponible en el estado de suspensión seleccionado. |
| SF32LB55x | Se puede cambiar SWD entre HCPU y LCPU con $SDK_ROOT/tools/segger/jlink_hcpu_a0.bat y jlink_lcpu_a0.bat. La consola ROM de LCPU es UART3 a 1 000 000 baudios; HCPU puede usar UART1/2 o SWD. Como SWD utiliza PB IO, mantenga LPSYS activo o en Light Sleep mientras esté conectado. |
Cuando LPSYS sale del estado Standby, SWD vuelve a HCPU. Un reinicio de J-Link no cambia por sí solo el núcleo seleccionado. Si la salida asíncrona de registros está habilitada, el volcado de aserción puede quedar truncado. Para la ruta de fallo, use una captura síncrona o retenida.
Capturar datos en tiempo real o un paquete para el análisis posterior al fallo¶
En las versiones actuales del SDK, use sdk.py para capturar por UART o J-Link:
Ámbito del ejemplo
El comando siguiente es un ejemplo para SF32LB52/LB525. Mantenga su estructura, pero sustituya el chip/modelo, núcleo, transporte y ELF por valores admitidos por la familia y versión del SDK de destino.
sdk.py crash-dump capture-live --transport uart --probe /dev/ttyUSB0 \
--chip SF32LB52 --chip-model LB525 \
--output /tmp/live-crash --elf build_hcpu/main.elf
Añada --include-psram --psram-size 8MB si el destino utiliza PSRAM. Con una sonda J-Link se puede usar --transport jlink --jlink-ip 127.0.0.1:19025; seleccione el núcleo afectado con --core hcpu o --core lcpu. El directorio de salida debe contener el binario capturado, el ELF/AXF del núcleo correspondiente, log.txt, manifest.json y sdk_manifest.json.
En versiones antiguas del SDK, use el método específico de la familia descrito en la guía correspondiente:
- UART:
SifliUsartServeroAssertDumpUartpueden exportar un paquete de aserción mientras la consola esté disponible. - J-Link/SWD: añada J-Link a
PATHy ejecute el script de la familia de destino; por ejemplo, para SF32LB55x use$SDK_ROOT/tools/crash_dump_analyser/script/save_ram_55x.bat. El script correspondiente guarda RAM, registros EPIC y PSRAM. - Si necesita detectar fugas de memoria en el heap, habilite
RTOS → RT-Thread Kernel → Memory Management → Enable memory trace.
Al capturar con scripts, haga coincidir el archivo .jlink con la familia, la configuración de PSRAM y el método de conexión. Para la conexión IP a través de SifliUsartServer, use el script para IP; para una conexión J-Link directa por USB, use el script para USB. Una combinación incorrecta puede hacer que falle la captura.

La captura por UART normalmente requiere que coincidan la utilidad serie, la dirección del servidor y el núcleo de destino. Las capturas de pantalla siguientes, tomadas de la guía, ayudan a comprobar la conexión:



Restaurar y analizar el contexto¶
Convierta el paquete capturado en un archivo core que pueda leer el depurador y analícelo con el ELF correspondiente:
sdk.py crash-dump readcore --package /tmp/live-crash \
--elf build_hcpu/main.elf --output /tmp/live-crash/coredump.elf
sdk.py crash-dump analyze --core /tmp/live-crash/coredump.elf \
--elf build_hcpu/main.elf
El flujo antiguo de Trace32 carga un paquete de aserción HCPU con el botón HCPU assertion (HA) y run_next_step; para un volcado LCPU, use la configuración de recuperación LCPU. Si no aparece la pila de excepciones, compruebe qué núcleo seleccionó, el ELF y los rangos de memoria antes de interpretar los registros.


Detenerse al inicio o ante una posible condición de carrera¶
Para depurar la inicialización, descomente la primera instrucción del Reset_Handler correspondiente para que quede como B .:
Las rutas de los archivos de arranque siguientes corresponden a SF32LB55x; use los archivos equivalentes para otra familia.
- HCPU:
$SDK_ROOT/drivers/cmsis/sf32lb55x/Templates/arm/startup_bf0_hcpu.S - LCPU:
$SDK_ROOT/drivers/cmsis/sf32lb55x/Templates/arm/startup_bf0_lcpu.S
Conecte J-Link e incremente el PC en dos bytes para continuar. En C, _asm("B ."); crea la misma detención intencionada. No lo sustituya por while (1);: el compilador puede eliminar el código posterior al bucle.
Analizar la información capturada¶
Un volcado de aserción suele incluir la función y la línea de la aserción, la tabla de hilos, el estado de los buzones y las colas de mensajes, los mutexes, los semáforos, el uso del heap y los registros de CPU. Correlacione el PC del fallo con el ELF exacto y compruebe el margen de pila, la propiedad de cualquier recurso implicado en una espera bloqueada, las entradas de las colas y la última línea del registro antes del fallo. Conserve el volcado original antes de simbolizarlo.
Para inspección interactiva, Ozone puede cargar los ELF de HCPU/LCPU y el SVD correspondiente a Cortex-M33 con FPU desde $SDK_ROOT/tools/svd_external. Si la interfaz SWD no puede conectarse debido al estado del núcleo, use UART o SifliUsartServer. ULOG puede usar UART; para utilizar Segger RTT, habilite su soporte y seleccione segger como dispositivo de registro de RT-Thread.
Instrumentar fallos de bus y memoria¶
El monitor de bus del SDK puede capturar accesos que provoquen un fallo de bus (bus fault). Registre un callback con dbg_busmon_reg_callback y use dbg_busmon_read y dbg_busmon_write del ejemplo de la guía para inspeccionar el rango de direcciones relevante. Combine esta información con el seguimiento del heap y el paquete de fallo; un volcado de registros sin símbolos ni contexto de memoria rara vez basta.

Fuentes oficiales por familia: análisis de fallos SF32LB52x, SF32LB55x, SF32LB56x, SF32LB58x y la guía correspondiente de depuración y registro.
Última actualización: