any012 发表于 2016-12-27 10:59:49

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

1.如何决定看门狗的时间?
是根据程序执行一周所用的时间来确定个大概吗?
然后在while循环里喂一次狗?

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

andypanfan 发表于 2016-12-27 10:59:50

在循环里面喂狗还是在定时器里面喂狗这个问题谈论了很久了。

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

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

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

海迹天涯 发表于 2016-12-28 18:03:12

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

奏奏奏 发表于 2016-12-28 19:03:27

看门狗需要用定时器来喂,你用while语句喂狗需要算里面的执行时间。
没用过窗口的类型,没办法给意见:L

五哥1 发表于 2016-12-28 19:27:54

二楼回答正确

any012 发表于 2016-12-29 08:55:52

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

额,需要用定时器来喂,这句话什么意思?看门狗本来不就是个定时器吗?
我用的是HAL库,现在是这么用的:
...
MX_IWDG_Init();
HAL_IWDG_Start(&hiwdg);
...
while(1)
{
    ...
    HAL_IWDG_Refresh(&hiwdg);
}

奏奏奏 发表于 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

看门狗不要用定时器来喂,某些程序跑飞了,但定时器硬件依然可以工作。最好在大循环里面喂。

奏奏奏 发表于 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
看门狗不要用定时器来喂,某些程序跑飞了,但定时器硬件依然可以工作。最好在大循环里面喂。 ...

言之有理,顶
页: [1] 2
查看完整版本: 请教,如何决定看门狗的定时时间?两种看门狗的场合?