最近发现了 DWT 的比较器(就是 debug 的时候实现 watchpoint 功能的模块)是可以由软件控制并触发 Debug Monitor 异常的,
由此可以实现“当某个变量/内存地址被改写的时候触发一个中断”这样的功能。
测试代码:
/* 时钟和 printf 初始化略 */
/* data[10] 是初始为 0 的全局整型数组 */
/* Enable Trace and Debug Monitor exception */
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk |
CoreDebug_DEMCR_MON_EN_Msk;
// /* Number of comparators available */
// dwt_numcomp = _FLD2VAL(DWT_CTRL_NUMCOMP, DWT->CTRL);
/* Configure comparators */
DWT->FUNCTION0 = 0; /* Disable */
DWT->COMP0 = (uint32_t)&data[8]; /* Ta

本文介绍了如何利用STM32的Data Watchpoint and Trace (DWT)模块,在指定变量被改写时触发Debug Monitor异常,从而实现中断功能。通过设置DWT的比较器在特定地址变化时激活,实现在循环中监测数据数组的变化。然而,该方法存在限制,如仅提供4个比较器,不适用于debug状态,并且对于相同数据的重复写入需要额外处理。
最低0.47元/天 解锁文章
3730

被折叠的 条评论
为什么被折叠?



