打印

奇怪的问题,硬件故障还是软件bug?

[复制链接]
1621|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
46621295|  楼主 | 2012-5-25 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 46621295 于 2012-5-25 16:51 编辑

PIC18F6720,4MHz晶振,开启了高级中断INT0、INT1,INT0接时钟IC每秒或每分产生的时间脉冲,INT1接按键脉冲。main()中首先初始化之后while(1)循环,该循环内首先扫描按键,然后处理时间脉冲标记,第三开启开门狗(1:16)进入休眠,第四关闭开门狗、使能高中断。

故障:绝大多数样机使用该程序运行正常,但个别样机在正常运行几天后出现假死状态,此时按下按键,设备恢复正常运行但不是从开机画面开始的那种运行,而是好像程序停在了某处之后再从此处运行的样子。为了检验while(1)是否停止,我特意在第二步处理时间脉冲标记处加入蜂鸣报警提示1,也在第四步开始加入了蜂鸣报警提示2,将程序烧入故障样机,有的连续正常运行一天有的两天不等后,又出现同样的问题,表现出来就是开始蜂鸣报警1和2均正常,一天或两天(不同设备不等)后没有了蜂鸣报警声,按下按键后恢复正常,蜂鸣报警声恢复并且读取到的时钟IC时间也正确,说明在没有蜂鸣报警期间时钟IC是正常工作的。

问题就来了,从表现来看,是正常运行一段时间后while(1)循环没有被执行。一、是硬件故障吗?比如晶振停振,但为何通过按下按键产生INT1中断可以恢复正常,并且不是彻底的重启(正常启动时设备会出现开始画面),还有时钟IC的INT0中断为何不能使设备恢复,如果晶振停振后再起振的话程序是从什么地方执行的。二、如果是软件故障,为什么大部分样机能正常运行?三、是进入休眠后未能唤醒吗?看门狗溢出和INT0每秒或没分中断应该都可以唤醒啊。

请各位帮我分析分析,谢谢!
沙发
NE5532| | 2012-5-26 09:23 | 只看该作者
按下按钮唤醒肯定是休眠唤醒,单片机休眠以后是停在SLEEP的下一条语句上的。从楼主的描述上来看,基本判断是软件问题,请重点检查进入休眠时是不是有什么状态没有保存,休眠唤醒后,中断内和中断外有没有什么操作相矛盾的,是不是有什么状态没有恢复。

使用特权

评论回复
板凳
46621295|  楼主 | 2012-5-26 17:44 | 只看该作者
本帖最后由 46621295 于 2012-5-26 17:46 编辑

看门狗的时钟是6720内部的RC振荡电路,和外部的晶振无关,所以即使休眠看门狗溢出应该也可以休眠唤醒的,为什么正常运行一段时间后就出问题了呢?再说INT0的每秒或每分的时钟中断也是应该将休眠唤醒的,前期长时间正常运行时也说明了这两个唤醒时正确的,可是运行一段时间后都不可以了,只有按下按钮才可以呢。
2# NE5532

使用特权

评论回复
地板
NE5532| | 2012-5-26 20:53 | 只看该作者
具体是怎么回事只有靠楼主你自己了,我们不在现场,方法我都写在本版精华帖《程序调试黑宝书》里面了,只是凭我搞了那么多年的直觉,觉得你这个是软件问题罢了。

使用特权

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

本版积分规则

56

主题

100

帖子

1

粉丝