TI中文支持网
TI专业的中文技术问题搜集分享网站

IAR Debug暂停后,跳不出中断

1)正常运行挺好,就是不能暂停,没法调试。

2)暂停后,老在两个时钟中断函数中运行,不能回到主函数。

3)主函数while的结束,用了LPM3, 就不能暂停了。如果不用LPM3,调试正常,暂停后可以回到主函数。

4)main函数第一句,关看门狗: WDTCTL = WDTPW + WDTHOLD;  应该不是看门狗的问题。

5)程序中有两个时钟中断,TA0 是1ms一次中断,是个毫秒的计数器:tim_num++;TB0是1秒一次中断,退出休眠:LPM3_EXIT

6)芯片: msp430f5310, 自己设计的板子。

  IAR 5.40, 软件中的Product Info 是 “IAR Embedded Workbench Common components, version: 6.3.11.2079”

  电脑是:Window XP

7)目前是测试阶段,我用这个芯片1年了。

8)怀疑: IAR bug,也可能是进中断后,把返回的地址覆盖了。也可能是暂停后TA0没停,所以老是不停的中断。

Sam Shen:

补充一下:

改变栈和堆的大小,没用。

看了栈的内容,发现暂停的时候:栈的数据错了。正常情况下,栈顶的地址:0x33FC,暂停后PC停止TA0中断末尾时,栈变为:0x3435 — 0x3404    

Hardy Hu:

1.进入LPM3后,MCU的MACLK,SMACLK会关闭;

2.如果定时器的时钟源来自SMCLK,则会造成程序进LPM3后,定时器就不能正常计数,当然调试的时候就会出现使用SMCALK的程序运行异常;

Sam Shen:

回复 Hardy Hu:

谢谢回应。

1) Timer 的时钟都是TASSEL_1, 即ACLK,是外接的32K的晶振。LPM3时,ACLK 是不关闭的。另外,一直运行时,只要不暂停,是正确的,TmerA0 的毫秒计数器的计数值一直是对的,表明不是这个问题。

2) 感觉是IAR 的问题。另外,我用IAR 在中断函数中设断点,然后单步,或“跳出函数”,想停在跳出中断后的主函数的那个语句,怎么都不行。

Hardy Hu:

回复 Sam Shen:

IAR的汇编单步是不是跳到reset那里去了,如果是就说明程序不再受IAR控制。

user4248791:

回复 Hardy Hu:

我发现在IAR仿真430时,如果暂停仿真,timer和RTC的计数寄存器会自动增加,等你单步跳出中断执行函数的时候,新的中断标识又产生了,所以你看到的是一直处于中断执行函数里面跳不出来。我的IAR是7.5版本,好像低版本的不会有这个问题。

Hao Mengzhen:

回复 Sam Shen:

有没有尝试使用CCS进行debug呢?这样可以看是不是仿真软件的问题

灰小子:

回复 user4248791:

仿真和实物还是有差距的,有条件建议还是在实物上验证

赞(0)
未经允许不得转载:TI中文支持网 » IAR Debug暂停后,跳不出中断
分享到: 更多 (0)