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?