你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教,如何决定看门狗的定时时间?两种看门狗的场合?

[复制链接]
any012 提问时间:2016-12-27 10:59 /
悬赏10ST金币已解决
1.如何决定看门狗的时间?
是根据程序执行一周所用的时间来确定个大概吗?
然后在while循环里喂一次狗?

2.独立看门狗和窗口看门狗各自的应用场合有哪些?
查了些资料,知道独立看门狗只有下限,有独立的40K左右时钟源;软件看门狗,有下限和上限,只有在下限和上限区间内,才能正常喂狗。

最佳答案

查看完整内容

在循环里面 喂狗还是在定时器 里面喂狗 这个问题谈论了很久了。 1. 在循环里面喂狗 时间不固定 可能比较浪费时间 是MCU 的效率比较低 。 2. 在定时器里面喂狗,有可能达不到喂狗的效果,因为有可能程序跑到一个死循环里面了,但是能够进入到定时器中断里面喂狗。 这些纯属于个人的意见,高手勿喷!各抒己见而已!!!讨论讨论!!! ...
收藏 2 评论11 发布时间:2016-12-27 10:59

举报

11个回答
andypanfan 回答时间:2016-12-27 10:59:50
在循环里面  喂狗还是在定时器  里面喂狗  这个问题谈论了很久了。

1.  在循环里面喂狗  时间不固定   可能比较浪费时间   是MCU 的效率比较低 。

2. 在定时器里面喂狗,有可能达不到喂狗的效果,因为有可能程序跑到一个死循环里面了,但是能够进入到定时器中断里面喂狗。

这些纯属于个人的意见,高手勿喷!各抒己见而已!!!讨论讨论!!!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

海迹天涯 回答时间:2016-12-28 18:03:12
当然是根据你程序运行的时间来算,比如你的while循环中有个任务大概运行10ms,超过10MS说明已经跑飞了,这个时候就把看门狗设置为10ms,如果跑飞了就不能喂狗了,然后就重启了

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

奏奏奏 回答时间:2016-12-28 19:03:27
看门狗需要用定时器来喂,你用while语句喂狗需要算里面的执行时间。
没用过窗口的类型,没办法给意见

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

五哥1 回答时间:2016-12-28 19:27:54
二楼回答正确
any012 回答时间:2016-12-29 08:55:52
奏奏奏 发表于 2016-12-28 19:03
看门狗需要用定时器来喂,你用while语句喂狗需要算里面的执行时间。
没用过窗口的类型,没办法给意见
...

额,需要用定时器来喂,这句话什么意思?看门狗本来不就是个定时器吗?
我用的是HAL库,现在是这么用的:
  1. ...
  2. MX_IWDG_Init();
  3. HAL_IWDG_Start(&hiwdg);
  4. ...
  5. while(1)
  6. {
  7.     ...
  8.     HAL_IWDG_Refresh(&hiwdg);
  9. }
复制代码
奏奏奏 回答时间:2016-12-29 09:13:54
any012 发表于 2016-12-29 08:55
额,需要用定时器来喂,这句话什么意思?看门狗本来不就是个定时器吗?
我用的是HAL库,现在是这么用的: ...

关键在于你的“HAL_IWDG_Refresh(&hiwdg);”前面的省略号是什么代码,是否是固定延时的语句。

我的做法是加载FreeRTOS,用单独的一个任务喂狗:

/* StartTask10 function */
void StartTask10(void const * argument)
{
  /* USER CODE BEGIN StartTask10 */
  /* Infinite loop */
  for(;;)
  {
                osDelay(500);
                HAL_IWDG_Refresh(&hiwdg);
                //        每隔        500        毫秒喂一次看门狗        看门狗设置        1000        毫秒重启
  }
  /* USER CODE END StartTask10 */
}
ts2000 回答时间:2016-12-29 09:26:23
看门狗不要用定时器来喂,某些程序跑飞了,但定时器硬件依然可以工作。最好在大循环里面喂。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

奏奏奏 回答时间:2016-12-29 09:28:48
andypanfan 发表于 2016-12-29 09:21
在循环里面  喂狗还是在定时器  里面喂狗  这个问题谈论了很久了。

1.  在循环里面喂狗  时间不固定   可 ...

跑实时操作系统的话,有任务调度的原因。
只要其中一个任务跑死了,就跑不到另外一个任务,所以我这么做。
调试程序的时候,主任务出问题,确实会因为没喂狗而引起MCU重启。
yhyeefocus 回答时间:2016-12-29 09:31:38
ts2000 发表于 2016-12-29 09:26
看门狗不要用定时器来喂,某些程序跑飞了,但定时器硬件依然可以工作。最好在大循环里面喂。 ...

言之有理,顶
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版