¿Puede el punto de observación de datos de Cortex M4 desencadenar una interrupción sin un depurador?

2

Estoy intentando diagnosticar la corrupción de la memoria en un Cortex M4 (Kinetis K64). Con el depurador (J-Link) adjunto puedo establecer puntos de vigilancia de datos y el núcleo se detendrá cuando se escriba una dirección de memoria.

Quiero usar esta función para los diagnósticos de campo. Configuré mi punto de observación de esta manera:

uint32_t test_variable;
DWT->COMP1 = &test_variable;
DWT->MASK1 = 0; //match all comparator bits, don't ignore any
DWT->FUNCTION1 = (1 << 11)/*DATAVSIZE 1 - match whole word*/
           | (1 << 1) | (1 << 2)/*generate a watchpoint event on write*/;
test_variable = 5; // <<----- CPU stops after this line

Con el depurador conectado obtengo un punto de interrupción, la CPU simplemente se detiene. Cuando el depurador no está conectado, nada sucede, el código simplemente se ejecuta. Yo esperaría una falla de depuración o un reinicio del sistema (como con la instrucción BKPT sin un depurador).

¿Es posible configurar el DWT? (o quizás ETM) para generar una interrupción o falla cuando se encuentra un punto de vigilancia sin un depurador conectado?

    
pregunta filo

1 respuesta

3

Observé más a fondo la documentación y descubrí que DebugMon_Handler está habilitado por:

    CoreDebug->DEMCR = CoreDebug_DEMCR_TRCENA_Msk /*enable tracing*/ |
                       CoreDebug_DEMCR_MON_EN_Msk /*enable debug interrupt*/;

Ahora recibo DebugMon_Handler de interrupción cuando se alcanza el punto de observación.

    
respondido por el filo

Lea otras preguntas en las etiquetas