打印

为什么我用ICD2仿真时总是乱跑,结果却正确

[复制链接]
2403|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
46621295|  楼主 | 2009-9-7 20:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序是C语言写的。程序量小时,用ICD2仿真一切正常。但程序量一大,ICD2仿真时用单步跟踪的方式,总是乱跑,不是程序跑飞那种“跑”,结果却正确。
比如,调用的函数在第600行,如果程序量小时,单步执行,绿色箭头马上正确地指到第600行,然后单步绿色箭头就很正确地按着程序顺序走。如果程序量大,明明该指到第600行,绿色箭头却只想其它地方(比如第700行),再次单步绿色箭头有换了一个莫名其妙的地方(不是第701行),多按几次单步后就指到第600行,并且结果也是正确的没有出错。
不明白为什么会这样。
沙发
yewuyi| | 2009-9-8 20:55 | 只看该作者
ICD2根本就不适合用step to step的方式DEBUG。

就TIMER一个问题就足够乱的,因为ICD2采用的在芯片调试,然后通过软件的方式把数据发送出来,当你暂停后,TIMER依然继续跑,当你再次DEBUG的时候,TIMER和实际的值是不可能对上的,你想想怎么可能不乱?

另一个,C语言本身有优化,优化后的代码和你想看的往往对不上,所以,如果你要DEBUG,应该把优化关掉。

其它还有一些原因,尽量用RUN+断点的方式

使用特权

评论回复
板凳
NE5532| | 2009-9-8 22:17 | 只看该作者
BTSFx指令乱跑哇?恭喜恭喜,确实是这样。

建议不要用仿真器了。

使用特权

评论回复
地板
machunshui| | 2009-9-9 08:35 | 只看该作者
调试发生乱跑的时候,
降低一下优化级别,
PICC默认是最高优化级别。

调试好了,再改回去。

使用特权

评论回复
5
46621295|  楼主 | 2009-9-9 19:50 | 只看该作者
谢谢个位子指导。却是是优化的问题,我把优化关了就正常了,把优化打开就开始乱了。不过不优化程序量太大,没办法,乱就乱吧,正确就行。

使用特权

评论回复
6
usbcleaner| | 2010-4-6 12:26 | 只看该作者
非常感谢!
:handshake
为这个问题搞了四天了,
一直找不到原因。知道21IC上大虾多,所以,我就一篇篇的翻有关ICD的**,
终于功夫不负有心人,被我翻到了!:'(
我用的环境是ICD2+PICC18 V9.63 Pro+MPLAB V8.46,
调试很小的程序绿色箭头也总是乱跑,而且程序无法全速执行。单步更是无法运行下去。
但下载芯片后却可以正常执行程序。
按各位的建议把优化全部关闭后,Debug一切正常了!
再次谢谢大家!

使用特权

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

本版积分规则

56

主题

100

帖子

1

粉丝