OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8123|回复: 15

看门狗在哪喂好?

[复制链接]

145

主题

445

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-1-15
在线时间
350 小时
发表于 2015-2-4 17:32:18 | 显示全部楼层 |阅读模式
5金钱
我看到大家讨论的,都认为在主程序中好。可是我的主程序main()函数比较简单,检测到按钮1按下,就做A,检测到2按下就做B,无按下就什么都不干,无论做A或B时间都比较长,10ms左右,这个看门狗怎么加?尤其是无按下时怎样处理???

最佳答案

查看完整内容[请看2#楼]

可以开一个定时器,到点就喂狗。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11558
金钱
11558
注册时间
2014-4-1
在线时间
1318 小时
发表于 2015-2-4 17:32:19 | 显示全部楼层
可以开一个定时器,到点就喂狗。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-2-4 17:32:19 | 显示全部楼层
楼主是跑带OS的还是不带OS的

带OS的单独开个任务

不带OS的就丢主程序吧,反正你主程序也不复杂,更好,省得运行时间过长,导致喂不成狗
学无止境
回复

使用道具 举报

145

主题

445

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-1-15
在线时间
350 小时
 楼主| 发表于 2015-2-5 08:41:27 | 显示全部楼层
回复【2楼】xuande:
--------------------------------
我看到其他论坛里的人普遍不认同这种办法。21IC论坛的一个大牛说:尽量不要在定时器中断中喂狗。
万一主程序乱跳了,而中断却照样发生,看门狗就无法起到监控作用。http://bbs.21ic.com/icview-323575-1-1.html
回复

使用道具 举报

145

主题

445

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-1-15
在线时间
350 小时
 楼主| 发表于 2015-2-5 11:18:33 | 显示全部楼层
回复【4楼】jermy_z:
---------------------------------
不带OS。当程序不复杂时怎么加,尤其是这个类型的:平时MCU没事干,相当于空转,可是有事件触发时MCU就需要消耗比较长的时间处理,如果按最长时间计算喂狗时间的话,空转时怎么处理,主程序喂狗就很频繁了
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-1-9
在线时间
0 小时
发表于 2015-2-5 11:45:41 | 显示全部楼层
看门狗喂狗时要注意:不能在中断中喂狗,因为有些异常情况下中断也可以进入,最好是在主函数中喂狗。但是也可以在其他函数里喂狗啊,不一定非在主函数里。你这种情况可以在主函数外部喂狗,参考http://www.51hei.com/bbs/dpj-27579-1.html
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11558
金钱
11558
注册时间
2014-4-1
在线时间
1318 小时
发表于 2015-2-5 11:46:26 | 显示全部楼层
回复【3楼】Di诺:
---------------------------------

大牛说得有道理。方式有很多。
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-2-5 12:19:27 | 显示全部楼层
我这样做,设置一个变量作为计数器,一个变量为喂狗标志,先置位喂狗标志,在主函数和需要循环执行或者运行时间长的地方对计数器赋值,然后定时器中断中对这个值自减,这期间喂狗标志是置位的,就不断喂狗,如果程序跑死了,没有对计数器的赋值操作了,计数器减到0,喂狗标志清0,也就不喂狗了,然后自动重启.......
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11558
金钱
11558
注册时间
2014-4-1
在线时间
1318 小时
发表于 2015-2-5 14:00:57 | 显示全部楼层
忍不住说一句,
做过几十个产品,从没用过看门狗。
回复

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
512
金钱
512
注册时间
2012-11-18
在线时间
72 小时
发表于 2015-2-5 15:23:49 | 显示全部楼层
不是有窗口看门狗嘛。
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-2-5 18:15:32 | 显示全部楼层
回复【9楼】xuande:
---------------------------------
用了只是心理安慰罢了
回复

使用道具 举报

22

主题

2254

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4486
金钱
4486
注册时间
2013-4-22
在线时间
337 小时
发表于 2015-2-6 13:44:05 | 显示全部楼层
主程序置标志,定时器中断喂狗,不解释
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11558
金钱
11558
注册时间
2014-4-1
在线时间
1318 小时
发表于 2015-2-6 14:56:01 | 显示全部楼层
一定要加,可以设个变量 i,在 while 循环里,每循环一次 i 加 1;达到一定次数就喂狗。这样不用定时器和中断。

次数靠测试、分析共同决定。
回复

使用道具 举报

0

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2014-11-15
在线时间
9 小时
发表于 2015-2-6 17:23:50 | 显示全部楼层
为什么不关掉看门狗!没啥用。用的话,比较喜欢用定时器来喂狗。
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2013-11-27
在线时间
27 小时
发表于 2015-2-7 22:31:54 | 显示全部楼层
我一般使用一个硬件看门狗,一个软件看门狗,软件看门狗在main函数的末尾重置。用一个定时器作为系统时基,在该定时器中断中进行硬件喂狗,同时检测软件看门狗,如果软件看门狗超时,则产生复位。
原理:如果定时器不能中断,则硬件看门狗必然产生复位;如果主函数跑飞或陷入死循环,那么定时器中断中对软件看门狗的检测可以产生复位
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11558
金钱
11558
注册时间
2014-4-1
在线时间
1318 小时
发表于 2015-2-7 23:07:38 | 显示全部楼层
如果使用看门狗,实现起来很简单,难的是:复位之后怎么办?有多大意义?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 00:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表