Chinaunix首页 | 论坛 | 博客
  • 博客访问: 569280
  • 博文数量: 169
  • 博客积分: 2656
  • 博客等级: 少校
  • 技术积分: 1685
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-30 13:03
文章分类

全部博文(169)

文章存档

2011年(1)

2010年(135)

2009年(33)

我的朋友

分类: 嵌入式

2010-05-14 13:05:26

问题: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,结果代码中有一部分使用了小写,所以在编译库的时候,这行代码将永远不生效。
阅读(521) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~