尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【嵌入式外设精学】Day18|看门狗:为什么能救死机、该在哪喂

【嵌入式外设精学】Day18|看门狗:为什么能救死机、该在哪喂 【嵌入式外设精学】Day18看门狗为什么能救死机、该在哪喂今天解决程序卡住为何能自动复位为什么不能在滴答里无脑喂目录问题 2. 原理 3. 代码 4. 误区 5. 自测 6. 答案1. 问题死循环后整机假活遥控也没反应开了看门狗仍然“卡死不复位”2. 原理2.1 看门狗本质独立的“倒计时”一直倒数 → 你必须在归零前“喂狗” 没喂到 → 硬件复位2.2 喂狗位置决定它保护什么在哪喂保护效果SysTick/滴答里一直喂主循环死了也可能不复位滴答还活着所有关键任务都正常时才喂主逻辑挂了才会复位推荐任务 A、B、C 都更新“新鲜时间戳”都在允许窗口内才reload。2.3 窗口型有的看门狗还要求“不能喂太早”用来抓“跑太快/节奏乱”。2.4 调试期调试器单步时容易误复位可临时关掉发布前再打开并测复位路径。3. 代码示例#includestm32f4xx.h#includestdbool.h#includestdint.hvoidwdt_init(uint32_treload){IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(IWDG_Prescaler_64);IWDG_SetReload(reload);/* 按 LSI 与预分频算超时查手册 */IWDG_ReloadCounter();IWDG_Enable();}voidwdt_feed(void){IWDG_ReloadCounter();}typedefstruct{uint32_tt0_ms,t1_ms,now_ms;uint32_twindow_ms;}health_t;boolsys_healthy(consthealth_t*h){return(h-now_ms-h-t0_msh-window_ms)(h-now_ms-h-t1_msh-window_ms);}voidmain_loop_step(consthealth_t*h){/* ... 各任务更新 t0/t1 ... */if(sys_healthy(h)){wdt_feed();}}4. 常见误区误区正解中断里无脑喂掩盖主逻辑挂死超时设得很短初始化没跑完就复位看门狗打开就万事大吉喂错地方等于没开调试不测复位上线后难查5. 自测为什么不在滴答里喂狗双任务都要活怎么喂6. 答案主循环死了滴答仍在喂系统假活不复位。两个任务的“健康戳”都在窗口内才喂。作者shuifanyu标签看门狗复位可靠性
返回列表