恩智浦LPC55S28的条件观察点

Conditional watchpoint on NXP LPC55S28

提问人:DarkFranX 提问时间:11/16/2023 更新时间:11/16/2023 访问量:15

问:

我需要调试一个程序,该程序在运行时意外地将特定内存位置设置为 0,从而导致硬故障。我想用条件观察点来捕捉内存写入。

可悲的是,正如其他人在现有问题中指出的那样,调试工具(OpenOCD 或 pyOCD)似乎没有实现对条件观察点的支持:当观察点设置了一个条件时,无论条件是真还是假,它都会中断。

剩下的解决方案是直接使用 CPU 寄存器手动执行此操作。但是,我找不到一种直接的方法来实现它。更复杂的是,CPU 功能取决于实现,所以如果我理解正确的话,一些 MCU 会支持它,而另一些则可能不支持。(我可能错了,但这就是我通过浏览 Armv8-M 架构手册所理解的)。

它根据我在网上找到的内容尝试了一种基本方法:

DCB->DHCSR |= DCB_DHCSR_C_DEBUGEN_Msk;
DCB->DEMCR |= DCB_DEMCR_TRCENA_Msk | DCB_DEMCR_MON_EN_Msk | DCB_DEMCR_UMON_EN_Msk;

DWT->COMP2 = 0x2000CE58;
DWT->FUNCTION2 = 0;
DWT->COMP1 = (uint32_t)&void_var;
DWT->FUNCTION1 = 0x20B06;

但它不起作用。我希望当 0x2000CE58 的内存写入 0 时程序会中断。我还尝试将 COMP1 = 0 设置为无济于事(不确定它是否采用地址或值)。

这方面的资源非常有限,在这一点上,任何输入都会有所帮助。

C 调试 ARM Cortex-M

评论


答: 暂无答案