1.如何决定看门狗的时间? 是根据程序执行一周所用的时间来确定个大概吗? 然后在while循环里喂一次狗? 2.独立看门狗和窗口看门狗各自的应用场合有哪些? 查了些资料,知道独立看门狗只有下限,有独立的40K左右时钟源;软件看门狗,有下限和上限,只有在下限和上限区间内,才能正常喂狗。
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重启。
言之有理,顶