¿Hay alguna manera de verificar si la semihosting está habilitada en tiempo de ejecución?

5

Los núcleos ARM Cortex tienen una función incorporada llamada semihosting que es una forma de interactuar con el depurador adjunto, por ejemplo, para hacer la depuración de printf () sin usar una unidad periférica.

Sin embargo, la implementación de semihosting es ejecutar una instrucción BKPT. Si el semiservicio no está habilitado, esto resultará en una excepción DebugMonitor. ¿Hay una mejor manera de verificar si la habilitación de semihosting está habilitada además de capturar la excepción? Lo molesto es que la ejecución de la instrucción BKPT detendrá la ejecución cuando el depurador esté conectado y siempre tendré que presionar continuar después de cada flash y reiniciar.

    
pregunta Trygve Laugstøl

1 respuesta

3

He utilizado el siguiente código para buscar un depurador conectado en el pasado con una MCU de la serie STM32F4xx (cuando la única opción era la biblioteca StdPeriph - quizás esto haya cambiado con HAL / LL, pero el hardware se registra y corresponde el bit es obviamente el mismo):

if (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk)
{
    // Debugger is connected
}
    
respondido por el swineone

Lea otras preguntas en las etiquetas