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

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

[复制链接]
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 */
}
小小超 回答时间: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
看门狗不要用定时器来喂,某些程序跑飞了,但定时器硬件依然可以工作。最好在大循环里面喂。 ...

言之有理,顶
斜阳 回答时间:2016-12-29 09:35:09
同意2楼说法
5265325 回答时间:2016-12-29 09:51:18
用ucos有时候会进入硬件中断,这时候定时器中断还是能进入喂狗,但是任务里面就无法再喂狗了

所属标签

相似问题

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