标题: 单片机看门狗与中断冲突问题 [打印本页]

作者: 同凨    时间: 2019-9-4 21:08
标题: 单片机看门狗与中断冲突问题
程序中添加了看门狗保护,防止死机。喂狗采用定时器中断实现,该中断设置了最高优先级。但该程序与源程序的定时器0中断、串口中断产生冲突,源程序定时器0中断用于产生时间,喂狗中断会导致计时不准确,串口通信不可靠等问题。求助,谢谢。

作者: aslin    时间: 2019-9-4 23:08
调整喂狗时间不就行了
作者: Y_G_G    时间: 2019-9-5 01:48
喂狗怎么用定时器中断来干呢?它会被更高等级的中断打断的,很有可能喂狗不成功而复位的
你可以设定看门狗的时间为几秒钟,放在主函数或者循环中,看门狗的时间要很长,但喂狗的时间大概是是几百毫秒喂一次,这样一来,多个中断被触发的时候,看门狗还有很长的时间
作者: 同凨    时间: 2019-9-5 09:16
Y_G_G 发表于 2019-9-5 01:48
喂狗怎么用定时器中断来干呢?它会被更高等级的中断打断的,很有可能喂狗不成功而复位的
你可以设定看门狗的 ...

用的是c8051f020单片机,22.1184MHZ晶振,看门狗的复位时长计算公式为[4^(3+WDTCN[2:0])] × TSYSCLK ,没办法实现很长时间的设置,最多几十毫秒
作者: Y_G_G    时间: 2019-9-5 22:27
这IC的看门狗时钟是不可调节的,用22M晶振的话,看门狗最多可以是50毫秒左右
但这么长的时间还不行吗?
如果还不行的话就只能是到处喂狗了,你可以在别的中断进入之后就喂狗一次,延时函数喂狗一次,这都没有关系的了,但你不能专门的一个中断来喂狗,这个中断一旦被更高等级的中断打断了,就很有可能会复位的
你可以这样:进入串口中断喂一次,进入定时器中断喂一次,保证在进入执行时间很长的函数之后,第一件事就是喂狗
作者: 同凨    时间: 2019-9-6 08:54
Y_G_G 发表于 2019-9-5 22:27
这IC的看门狗时钟是不可调节的,用22M晶振的话,看门狗最多可以是50毫秒左右
但这么长的时间还不行吗?
如果 ...

谢谢,也只能这样试试了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1