打印

程序运行了几个小时,但是突然死了,连中断都进不去。。

[复制链接]
2347|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ma1986|  楼主 | 2009-10-20 13:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序运行了几个小时,但是突然死了,连中断都进不去。。
我通过网络发送同一个命令,在接受中断中保存命令,然后用程序查询的方式查询保存的命令。
但是有时候一个命令完整的执行完成后,向pc发送一个数据,并且pc返回了一个ack应答。然后程序就突然死了。连网络中断、与另外一个外部中断都进不去。我在中断里面输出串口调试信息的。

这可能是因为什么原因呢???
沙发
香水城| | 2009-10-20 14:07 | 只看该作者
没头没脑的问题。

使用特权

评论回复
板凳
dfsa| | 2009-10-20 14:17 | 只看该作者
程序跑死了,可以加看门狗啊

使用特权

评论回复
地板
ma1986|  楼主 | 2009-10-21 10:23 | 只看该作者
3# dfsa
哎。。。程序挺大的。。出了问题,别人还能看看现象,然后人工处理一下。。但是加了看门狗,连看现象的机会都没有了。。。

使用特权

评论回复
5
winloop| | 2009-10-21 10:44 | 只看该作者
所以说刚开始开发出来产品,在实验室验证阶段的时候,不能加看门狗,如楼上所说“出了问题,别人还能看看现象,然后人工处理一下。。但是加了看门狗,连看现象的机会都没有了”,就是为了看看在没有看门狗的情况下,系统长时间运行会不会死机,如果死机就要查找原因,找到之后彻底解决了,验证通过后出产品的时候再加上。我现在做的系统就通过这个发现了STM32软件死了,仿真一看死在读PCF8563上了,有个while()等待,后来把I2C速度从400降到100就OK了,通过这么长时间的观察发现I2C远远没有SPI稳定,因为SPI只对沿儿敏感,不像I2C有复杂的时序,我个人比较倾向于能不用I2C就不用,实在找不到替换器件了没办法才用。当然,也很有可能是STM32的I2C接口我在软件上没用好。

使用特权

评论回复
6
ma1986|  楼主 | 2009-10-21 12:54 | 只看该作者
5# winloop
怎么用仿真看东西啊???我现在都是用串口来输出各种各样的数据。。如果要用jtag调试的话,我发现我的程序跑不了多久就挂了。。好像用jtag测试不适合在运行时间很长的条件下测试。。。
我的这个程序运气好能运行3天,运气不好的话,只能运行3、4个小时。因为是用串口在各种各样的函数里面输出调试数据,所以有时候死机都不知道具体死在了什么地方。

使用特权

评论回复
7
ma1986|  楼主 | 2009-10-21 12:58 | 只看该作者
5# winloop
另外,我iic也曾经死在那里我。因为我用了eeprom器件,另外还有其他单片机用iic进行通信。我使用主发模式发送几个字节,然后立即使用从收模式接收单片机发送的数据,对方如果不能及时收到我的应答,就释放iic总线,然后我就会在从收那里死等,后来改成while(i<50000)..这样的方式,不能在一定时间内返还则认为失败,就没有问题了。

使用特权

评论回复
8
pkat| | 2009-10-21 18:57 | 只看该作者
串口肯定是只能烧写,不能仿真的,建议你弄个仿真器,那样就可以看程序到底死在哪了

使用特权

评论回复
9
baidudz| | 2009-10-21 20:25 | 只看该作者
想查问题,最好弄个仿真器,仿真看,仿真器对于调试程序来说,可以说是必须的

使用特权

评论回复
10
baidudz| | 2009-10-21 20:26 | 只看该作者
想查问题,最好弄个仿真器,仿真看,仿真器对于调试程序来说,可以说是必须的

使用特权

评论回复
11
ma1986|  楼主 | 2009-10-27 10:06 | 只看该作者
谢谢各位朋友的解答~~~

使用特权

评论回复
12
vigia| | 2009-10-27 10:15 | 只看该作者
5# winloop  
怎么用仿真看东西啊???我现在都是用串口来输出各种各样的数据。。如果要用jtag调试的话,我发现我的程序跑不了多久就挂了。。好像用jtag测试不适合在运行时间很长的条件下测试。。。
我的这个程序 ...
ma1986 发表于 2009-10-21 12:54


JTAG只是帮你把代码下载到flash,然后让代码运行,在代码运行过程中,JTAG不会对你的程序有任何影响。

你用JTAG调试,发现程序挂了,你也不看看为什么挂了,就改用串口了,你的程序能正常跑么。。。。

使用特权

评论回复
13
秋天落叶| | 2009-10-27 20:42 | 只看该作者
用仿真器最好打断点测试,你说你的程序跑挂了,你看看死在哪了

使用特权

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

本版积分规则

48

主题

101

帖子

1

粉丝