打印
[开发工具]

请问:什么情况下会出现 Failed to halt cpu

[复制链接]
6954|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xhtwork|  楼主 | 2009-2-14 08:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


环境:IAR ewarm 5.2 + J-link + stm32

现象:
      今天刚把ewarm4.4改为5.2,程序在4.4下仿真及实际运行都正常
      5.2下仿真运行,正常运行中,执行NVIC_GenerateSystemReset()后死机
      (死机未必跟软件复位有关,不排除时间上的巧合)
      死机后仿真机无法下载程序,下载时出现Failed to halt cpu提示
      重新上电无效

另外:直接运行j-link,能正常显示目标板电压,CM3内核

这种现象是什么原因?应该怎样解决?
沙发
香水城| | 2009-2-14 09:34 | 只看该作者

怀疑是调用的函数有问题

详细原因要看它的反汇编代码,和单步执行情况才能判断。

可以先擦除FLASH解决。

使用特权

评论回复
板凳
xhtwork|  楼主 | 2009-2-14 10:02 | 只看该作者

版主答非所问啊


函数是st的库文件,没改过,而且在4.4上一直正常运行的。

另外,包含多个跟定时器有关的嵌套中断的场合,根本是没办法单步执行程序的,当然这是另外的事儿,跟现在的问题无关。

我没想让大家帮我查程序,只是想知道j-link什么情况下会控制不了cpu(重新上电也一样控制不了cup),原因是什么,这种情况下应该怎么处理。(正规的处理方式是什么?有哪些处理方式?)

另外,单独运行j-link能正常读到电压和内核,说明cpu,j-link都是好的。

使用特权

评论回复
地板
香水城| | 2009-2-14 10:52 | 只看该作者

这种情况的根本原因是程序中某些自动运行模块干扰了调试

请参考下面这个文档第68页的说明。


楼主位并没有给出3楼给出的那些信息,所以我无法判断你遇到错误的大致原因,我只能怀疑是调用的函数有问题。但不管怎样,按照下面这个文档第68页的说明,我建议先擦除FLASH解决是有针对性的,因此我并没有“答非所问”。

使用特权

评论回复
5
xhtwork|  楼主 | 2009-2-14 11:30 | 只看该作者

谢谢版主,我仔细看了

仔细看了第68页,看了好几遍。

好像只有DMA算是合理的解释,定时器、ADC连续转换如果不是通过DMA而是通过中断响应的,似乎应该对调试监控程序没有影响。监控程序显然是应该能够通过控制cpu寄存器来控制中断响应的。

不过,也许IAR或者j-link这里没彻底做成熟,反正就是现象存在、原因不明,不必追究了。

68页提到的那几个办法,应该都是尝试,谈不上一定有效,最正式的办法可能就是版主说的擦除flash,用isp。

======================================
另外,如果没有ISP接口,用j-link怎样直接擦除flash?
当然,这是侯IAR已经不能用了,好像有个j-flash arm,谁知道怎么用?

使用特权

评论回复
6
香水城| | 2009-2-14 11:45 | 只看该作者

一般只需要设置BOOT0/BOOT1为从RAM启动再进行正常下载调试

IAR软件允许在从RAM启动的模式下,在Flash中下载程序和调试;这种方式下载程序和调试可以防止Flash中已有程序的运行;当然在开始之前需要手动复位MCU,因为IAR软件上的复位操作不能传递到芯片上产生硬件复位信号。

使用特权

评论回复
7
xhtwork|  楼主 | 2009-2-14 12:40 | 只看该作者

实际的产品,哪有boot0/1是活动的啊

手动复位也很少有必要装啊,有手动复位、boot0/1能活动的,都是开发板了。

使用特权

评论回复
8
香水城| | 2009-2-14 12:46 | 只看该作者

既然要调试就需要有一些基本的调试手段

实际的产品是不适合调试的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

154

帖子

4

粉丝