你好,我用的16f77。单片机看门狗死机,看门狗是关着的。

21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 9526|回复: 26
请教下看门狗喂狗问题
&&已结帖(20)
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
主程序里面包含一个按键检查电路,发现按键按下,就进入参数设定模式,这种情况下,看门狗怎么处理呢?参数设定时间是因人而异的,一般都会超出看门狗设定的时间,所以我想请教下这种情况一般是怎么处理的?是不是要在参数设定程序里面选择合适的时间喂狗呢?
满意回复+20
先说题外话:“主程序里面包含一个按键检查电路”——程序里包含电路?第一句话就是错句。但愿你写程序不是如此不严谨。
再说正事:
编程首先要有好的编程思想 ...
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
喂饱是基本准则
主题帖子积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
先说题外话:“主程序里面包含一个按键检查电路”——程序里包含电路?第一句话就是错句。但愿你写程序不是如此不严谨。
再说正事:
编程首先要有好的编程思想。比如:
1、主程序中,不应该直接嵌入具体的功能性语句。应该以函数(或子程序)的形式。
2、函数(或子程序)中不应该有不必要的延时等待。应该有分时操作的概念。比如按键消抖的时候,或者等待按键释放的时候,应该退出按键检测程序,避免影响其他任务的执行。
3、喂狗语句,一般只需要一条,就是放在主程序中喂狗。
如果严格按上述思想去做,楼主的问题就不存在。
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
本帖最后由 szn1423 于
11:23 编辑
首先谢谢指点,我还是不太明白,我是个新手,我理解看门狗是这么用的:先给看门狗定时器设定一个时间,这个时间要稍大于主程序的执行时间,然后在主程序里面执行看门狗定时器清零,使其重新计数。可是如果主程序的执行时间不固定的话,看门狗定时器的设定时间也就很难保证大于主程序执行时间,我想不明白怎么处理这种情况。
我好像明白一点儿了,是不是说主程序在按键等待期间还是要继续循环的,这次主程序运行时有按键按下,可以在下次主程序运行时处理,这样的话只需要留出按键扫描的时间就够了,是这样吗?
主题帖子积分
高级技术员, 积分 741, 距离下一级还需 259 积分
高级技术员, 积分 741, 距离下一级还需 259 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 741, 距离下一级还需 259 积分
高级技术员, 积分 741, 距离下一级还需 259 积分
主题帖子积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
主题帖子积分
专家等级:结帖率:80%
主题帖子积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
本帖最后由 mindshare 于
11:22 编辑
使用看门狗的其中一个主要用处就是为了防止程序长时间不响应而导致的死机,如果你连主程序或者其调用的子程序/函数执行的最大时间都无法确定的话,是无法用看门狗的;因为当程序xxx时间内都不跑主程序时,你不知道是程序异常了(死机,out of control),还是处于正常执行状态。
碰到这种状况,你首先要将你的程序做一个梳理,画一个流程图,分析出流程图中可能会超过你设定的清狗时间的分支,那么在进入这些流程之前关闭看门狗,退出流程时再打开,不过这样做是有风险的,如果程序刚好挂在这个流程中,那么程序就死翘翘了,只能硬复位
主题帖子积分
高级技术员, 积分 741, 距离下一级还需 259 积分
高级技术员, 积分 741, 距离下一级还需 259 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 741, 距离下一级还需 259 积分
高级技术员, 积分 741, 距离下一级还需 259 积分
匠人说分时操作 意思是不是你进参数设定中的时间需要有个时间限制,比如1s无按键动作就自动退出参数设定 。。。
主题帖子积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
主题帖子积分
专家等级:结帖率:80%
主题帖子积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
按键检测/等待一定是要在主程序中做,参数设定那个子程序/子模块是由主程序给其传递按键值~~
不能在进入参数设定子程序/子模块后,就由参数设定子程序/子模块来检测/等待按键吧... 这是不合理的程序架构...&&:)
主题帖子积分
主题帖子积分
专家等级:结帖率:85%
主题帖子积分
提示: 作者被禁止或删除 内容自动屏蔽
主题帖子积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
主题帖子积分
专家等级:结帖率:80%
主题帖子积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
助理工程师, 积分 1385, 距离下一级还需 615 积分
示例代码:
& &&&clearWatchDog();
& &&&key = checkKeyStatus();
& & if(key!=invalid)& &&&
& && &ModuleManage(key);
& &……& && &
checkKeyStatus() 是获取按键值,关于按键的处理做在定时中断中才合理,按键去抖等并不是在哪里死等,而是靠定时中断次数计算已经等了多长时间....
主题帖子积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
3# 程序匠人
首先谢谢指点,我还是不太明白,我是个新手,我理解看门狗是这么用的:先给看门狗定时器设定一个时间,这个时间要稍大于主程序的执行时间,然后在主程序里面执行看门狗定时器清零,使其重新计数。可是 ...
szn1423 发表于
你的最后一段话就是答案。
分时操作。就是说所有要让MCU空等的时间,都要尽量避免。
建议看看匠人手记,哈哈。
主题帖子积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
4# szn1423&&
匠人说分时操作 意思是不是你进参数设定中的时间需要有个时间限制,比如1s无按键动作就自动退出参数设定 。。。
海川先生 发表于
你这句话,还没有正确讲出分时操作的概念。
不能等“1s无按键动作”才退出。而是应该不管有没有按键,都立即退出。
1S钟,对于MCU来说,意味着1000000条指令的执行时间(假设是1us一条的话)啊。
主题帖子积分
中级工程师, 积分 4964, 距离下一级还需 36 积分
中级工程师, 积分 4964, 距离下一级还需 36 积分
主题帖子积分
专家等级:结帖率:64%
主题帖子积分
中级工程师, 积分 4964, 距离下一级还需 36 积分
中级工程师, 积分 4964, 距离下一级还需 36 积分
hotpower中断喂狗论 你可以参考一下
主题帖子积分
中级工程师, 积分 4710, 距离下一级还需 290 积分
中级工程师, 积分 4710, 距离下一级还需 290 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级工程师, 积分 4710, 距离下一级还需 290 积分
中级工程师, 积分 4710, 距离下一级还需 290 积分
这个时间要稍大于主程序的执行时间
不是稍大于主程序执行时间,要远大于才对,稍大于的话你加几个语句或加些功能执行长了就得不停的改这个数据
主题帖子积分
助理工程师, 积分 1391, 距离下一级还需 609 积分
助理工程师, 积分 1391, 距离下一级还需 609 积分
主题帖子积分
专家等级:结帖率:92%
主题帖子积分
助理工程师, 积分 1391, 距离下一级还需 609 积分
助理工程师, 积分 1391, 距离下一级还需 609 积分
你参数设定程序要跑很长的时间,不退出?
主题帖子积分
助理工程师, 积分 1391, 距离下一级还需 609 积分
助理工程师, 积分 1391, 距离下一级还需 609 积分
主题帖子积分
专家等级:结帖率:92%
主题帖子积分
助理工程师, 积分 1391, 距离下一级还需 609 积分
助理工程师, 积分 1391, 距离下一级还需 609 积分
if(定时标识)
里面就是按键程序;
程序应该要不停地跑,而不是停在那里等!
主题帖子积分
主题帖子积分
专家等级:结帖率:92%
主题帖子积分
找点程序结构方面的文章看看& &或者干脆看《匠人手记》:lol
主题帖子积分
主题帖子积分
专家等级:结帖率:92%
主题帖子积分
找点程序结构方面的文章看看& &或者干脆看《匠人手记》:lol
主题帖子积分
助理工程师, 积分 1764, 距离下一级还需 236 积分
助理工程师, 积分 1764, 距离下一级还需 236 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
助理工程师, 积分 1764, 距离下一级还需 236 积分
助理工程师, 积分 1764, 距离下一级还需 236 积分
为啥不在定时器中断里喂狗
主题帖子积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
为啥不在定时器中断里喂狗
小z 发表于
尽量不要在定时器中断中喂狗。
万一主程序乱跳了,而中断却照样发生,看门狗就无法起到监控作用。
甘甜之泉水
发帖类勋章
技术奇才奖章
人才类勋章
时间类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
终身成就奖章
等级类勋章
涓涓之细流
发帖类勋章
时间类勋章
技术高手奖章
人才类勋章
社区建设奖章
等级类勋章
时间类勋章
技术新星奖章
人才类勋章
欢快之小溪
发帖类勋章
时间类勋章
突出贡献奖章
等级类勋章
沉静之湖泊
发帖类勋章
核心会员奖章
等级类勋章
时间类勋章
晶莹之水滴
发帖类勋章
热门推荐 /2AVR单片机看门狗的使用_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
AVR单片机看门狗的使用
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢您当前的位置:&>&&>&&>&
单片机死机问题
一 振荡器停止振荡
又可以分为电源电压不稳,或者强干扰引起的振荡器停振。
二 PC指针跑飞
电源电压不稳或强干扰引起PC跑飞,如果看门狗不好,也会引起死机。
三 设计上对长引出线的IO没有保护,静电打在IO口上引起单片机死锁,破坏了硬件逻辑功能,导致死机。
四. 复位收到干扰,引起反复复位,在反复复位当中有可能会导致死机。
综上所述:
设计电路时,应该注意:
1.电源稳定
3.振荡器PCB布线要注意
4.复位电路设计和PCB布线
5.电源,信号线干扰路径的保护,加滤波TVS等
6.高速信号输出远离信号输入端,如SPI总线,I2C总线布线要远离ADC,复位,时钟等布线处,以及其他模拟前端。
一家之言,欢迎纠正
电源电压 的地 不稳定
造成电源电压 瞬间负电压 导致单片机故障 程序不发运行
我的理解:
1、&跑飞&是因为程序隐患或外部干扰引起的误动作,致使PC被写入&出界&数据,跑到了RAM区,或者跑到了FLASH的空白区。如果PC指向了RAM区,哪情况就不好说了!因为程序译码器可能得到任意译码结果。如果PC指向了FLASH空白区,则可以事先将所有FLASH空白区填入某个你想要的数据,迫使程序译码器在这里翻译出你想要的指令,从而进行相应的处理。在IAR Workbench中好象有在空白区填充数据的设置。
2、&死机&是指PC进入了&死循环&,或者是MCLK等于近似为零的值。此时,要想救活MCU,非外狗不可。
*程序运行过程中,如果MCU电源出现问题(电源供电问题,或其它外部电路引起的电源扰动),比较容易出现&跑飞&现象
程序跑飞应该是PC出错;软件和硬件都可能出这样的问题.
死机应该是CPU根本没有运行,多是硬件方面的问题造成的,比如POR复位不成功,430比较容易出现掉电不完全后重新上电.
有了看门狗就不会死机
死机是指CPU的程序指针进入一个死循环,无法执行正常的程序流程。其外在表现常常是:正常功能丧失,按键无响应,显示凝固。单片机死机后,只有复全才能走出死循环,执行正常的程序流程。众所属知,克服死机的最有效手段是加看门狗(WatchDog)。
目前用得最广泛的看门狗实际上是一个特殊的定时器DogTimer。DogTimer按固定速率计时,计满预定时间就发出溢出脉冲使单片机复位。如果每次在DogTimer溢出前强行让DogTimer清零,就不会发出溢出脉冲。清零脉冲由CPU发出,在单片机程序中每隔一段语句放一个清DogTimer的语句--FeedDog语句,以保证程序正常运行时DogTimer不会溢出。一旦程序进入一个不含FeedDog语句的死循环,DogTimer将溢出,导致单片机复位,跳出这个死循环。本文称这种看门狗为典型看门狗,典型看门狗已被集成比,如MAX706、MAX791等[1];还有许多单片机本身集成了这种看门狗,如PIC16C57、MC68HC705等,
有一个错误观点:加了看门狗,单片机就不会死机。实际上,看门狗有时间会完全失效。当程序进入某个死循环,而这个死循环中又包含FeedDog语句,这时DogTimer始终不会溢出,单片机始终得不到复位信号,程序也就始终跳不出这个死循环。针对这一弊端,笔者设计了双对限看门狗和定时复位看门狗。
双时限看门狗有两个定时器;一个为短定时器,一个为长定时器。短定时器定时为T1,长定时器定时为T2,0
这样,当程序进入某个死循环,如果这个死循环包含短定时器FeedDog语句而不包含长定时器FeedDog语句,那么长定时顺终将溢出,使单片机复位。巧妙安排长定时器FeedDog语句的位置,可保证出现死机的概率根低。在水轮发电机组微机控制装置中的对比应用证明了这一点[3]。
目前几乎所有的看门狗都是依赖于CPU(依赖于CPU FeedDog)。这可以比作:一个保险设备能否起到保险作用还依赖于被它保护的对象的行为。显然,依赖于CPU的看门狗是不能保证单片机在分之百不死机的。
在绝对不允许死机的装置中,笔者设计了一种完全不依赖于CPU的看门狗--定时复位看门狗。定时复位看门狗的主体也是一个定时器,到预定时间就发出溢出脉冲,此溢出脉冲使单片机强行复位。定时复位看门狗不需要CPU FeedDog。
简言之,定时复位看门狗就是定时地让单片机强行复位。这样,即使装置死机,其最大死机时间也不会大于定时器定时时间。显然,只要硬件完好,这种看门狗百分之百地保证了单片机不会长时间死机。在智能电表(包括IC卡电能表、复费率电能表、多功能电能表[4])中采用了定时复位看门狗,每1秒让CPU强行复位,迄今数十万电表运行了近五年,无一例死机报告。
扩展阅读:}

我要回帖

更多关于 单片机死机的原因 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信