问题:MPC8560能支持数据断点,但一旦中断之后除非把断点手工删除,否则无法调试,用c或s/so都是反复地断在当前指令上。而实际上调试功能是应该利用单步中断(或插入trap 模拟)把当前中断的指令执行完;至于数据断点应该是任务切换时设置寄存器而已。在852上测试一切正常,数据断点中断之后可以继续进行调试。
答复:这是风河在写代码时引入的一个bug,在PPC架构下的wdbDbgArchLib.c 中有一个函数是处理断点删除的,函数名是wdbDbgRegsClear。在这个函数中有如下代码:
void wdbDbgRegsClear (void)
{
。。。。。。
#elif ((CPU == PPC405) || (CPU == PPC405F) || (CPU == PPC440) || \
(CPU == PPC85xx))
wdbDbgDbcr0Set (0); /* clear DBCR0 register */
wdbDbgDbcr1Set (0); /* clear DBCR1 register */
# if ((CPU == PPC440) || (CPU == PPC85XX))
。。。。。。
}
其中红色的代码应该是全大写的PPC85XX,结果代码中有一部分使用了小写,所以在编译库的时候,这行代码将永远不生效。
阅读(562) | 评论(0) | 转发(0) |