【秋招】嵌入式面试八股文 - 看门狗 篇
【秋招】嵌入式面试八股文 - 最全专栏
一、基本概念
1. 什么是看门狗?
- 看门狗是一个独立的定时器,用于监测系统是否正常运行
- 当系统运行异常时,看门狗会自动复位系统,使其恢复正常状态
- 看门狗通常由独立的时钟源驱动,与主系统时钟相互独立
2. 看门狗的基本工作原理
// 看门狗基本工作流程 void WDT_Process(void) { // 初始化看门狗 WDT_Init(); while(1) { // 执行正常任务 DoNormalTask(); // 喂狗(重置看门狗计数器) WDT_Feed(); // 如果系统死机,无法执行到这里 // 看门狗计数器溢出,系统将被复位 } }
二、看门狗类型
1. 独立看门狗(IWDG)
- 由独立的低速时钟源(LSI)驱动
- 完全独立于主时钟系统
- 即使主时钟失效也能正常工作
- 适用于对可靠性要求高的场合
// STM32独立看门狗配置示例 void IWDG_Config(uint8_t prescaler, uint16_t reload) { // 使能对IWDG寄存器的访问 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); // 设置IWDG预分频值 IWDG_SetPrescaler(prescaler); // 设置IWDG重装载值 IWDG_SetReload(reload); // 重载IWDG计数器 IWDG_ReloadCounter(); // 使能IWDG IWDG_Enable(); } // 喂狗函数 void IWDG_Feed(void) { IWDG_ReloadCounter(); }
2. 窗口看门狗(WWDG)
- 具有可配置的时间窗口
- 必须在特定时间窗口内喂狗,过早或过晚都会导致复位
- 可以检测程序执行时序是否正常
- 适用于需要严格控制程序执行时序的场合
// STM32窗口看门狗配置示例 void WWDG_Config(uint8_t counter, uint8_t window) { // 配置WWDG时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // 设置WWDG预分频值 WWDG_SetPrescaler(WWDG_Prescaler_8); // 设置窗口值 WWDG_SetWindowValue(window); // 设置计数器值 WWDG_Enable(counter); // 清除早期唤醒中断标志 WWDG_ClearFlag(); // 使能WWDG中断 WWDG_EnableIT(); } // 窗口看门狗喂狗函数 void WWDG_Feed(uint8_t counter) { // 确保当前计数值在窗口内 if((WWDG_GetCounter() < WWDG_WINDOW_VALUE) && (WWDG_GetCounter() > WWDG_CR_T)) { WWDG_SetCounter(counter); } }
3. 软件看门狗
- 由软件定时器实现
- 依赖于系统时钟和中断系统
- 实现简单,灵活性高
- 可靠性较低,不适用于关键系统
// 软件看门狗实现示例 typedef struct { uint32_t timeout; uint32_t counter; bool enabled; } SoftWDT_TypeDef; SoftWDT_TypeDef SoftWDT; // 初始化软件看门狗 void SoftWDT_Init(uint32_t timeout) { SoftWDT.timeout = timeout; SoftWDT.counter = 0; SoftWDT.enabled = true; } // 在系统滴答定时器中调用 void SoftWDT_Update(void) { if(SoftWDT.enabled) { SoftWDT.counter++; if(SoftWDT.counter >= SoftWDT.timeout) { // 看门狗超时,执行复位 NVIC_SystemReset(); } } } // 喂狗函数 void SoftWDT_Feed(void) { SoftWDT.counter = 0; }
三、常见面试题与解答
1. 为什么需要使用看门狗?
解答:使用看门狗的主要原因:
- 防止系统死机:当程序因为各种原因(如死循环、硬件故障等)导致系统无响应时,看门狗可以自动复位系统
- 抵抗电磁干扰:在强电磁环境下,MCU可能会受到干扰导致程序跑飞,看门狗可以使系统恢复正常
- 处理软件异常:对于未预见的软件异常(如栈溢出、野指针等),看门狗提供了最后的保护机制
- 提高系统可靠性:在无人值守的嵌入式系统中,看门狗是保证系统长期稳定运行的重要手段
2. 如何正确设置看门狗超时时间?
解答:设置看门狗超时时间需要考虑以下因素:
- 任务执行时间:超时时间应大于系统中最长任务的执行时间
- 系统启动时间:确保超时时间大于系统启动所需时间
- 外部设备响应时间:如果系统依赖外部设备(如Flash、网络设备等),需考虑其最大响应时间
- 安全裕度:通常设置为正常执行时间的2-3倍,既不能太短(误触发),也不能太长(影响恢复时间)
3. 如何在多任务系统中正确使用看门狗?
解答:多任务系统中使用看门狗的策略:
- 集中式喂狗
- 分散式喂狗
- 任务监控机制
4. 看门狗复位和其他复位方式有什么区别?如何区
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【秋招】嵌入式八股文最全总结 文章被收录于专栏
双非本,211硕。本硕均为机械工程,自学嵌入式,在校招过程中拿到小米、格力、美的、比亚迪、海信、海康、大华、江波龙等offer。八股文本质是需要大家理解,因此里面的内容一定要详细、深刻!这个专栏是我个人的学习笔记总结,是对很多面试问题进行的知识点分析,专栏保证高质量,让大家可以高效率理解与吸收里面的知识点!掌握这里面的知识,面试绝对无障碍!