你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
查看完整内容
举报
查看全部评分
奏奏奏 发表于 2016-12-28 19:03 看门狗需要用定时器来喂,你用while语句喂狗需要算里面的执行时间。 没用过窗口的类型,没办法给意见 ...
any012 发表于 2016-12-29 08:55 额,需要用定时器来喂,这句话什么意思?看门狗本来不就是个定时器吗? 我用的是HAL库,现在是这么用的: ...
andypanfan 发表于 2016-12-29 09:21 在循环里面 喂狗还是在定时器 里面喂狗 这个问题谈论了很久了。 1. 在循环里面喂狗 时间不固定 可 ...
ts2000 发表于 2016-12-29 09:26 看门狗不要用定时器来喂,某些程序跑飞了,但定时器硬件依然可以工作。最好在大循环里面喂。 ...
1. 在循环里面喂狗 时间不固定 可能比较浪费时间 是MCU 的效率比较低 。
2. 在定时器里面喂狗,有可能达不到喂狗的效果,因为有可能程序跑到一个死循环里面了,但是能够进入到定时器中断里面喂狗。
这些纯属于个人的意见,高手勿喷!各抒己见而已!!!讨论讨论!!!
评分
查看全部评分
评分
查看全部评分
没用过窗口的类型,没办法给意见
评分
查看全部评分
额,需要用定时器来喂,这句话什么意思?看门狗本来不就是个定时器吗?
我用的是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 */
}
评分
查看全部评分
跑实时操作系统的话,有任务调度的原因。
只要其中一个任务跑死了,就跑不到另外一个任务,所以我这么做。
调试程序的时候,主任务出问题,确实会因为没喂狗而引起MCU重启。
言之有理,顶