FreeRTOS看门狗任务设计---软件看门狗 + 硬件 IWDG 双保险实现

🎬 渡水无言个人主页渡水无言

专栏传送门 : 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》

专栏传送门 : 《freertos专栏》 《STM32 HAL库专栏》《linux裸机开发专栏

专栏传送门《产品测评专栏》《Ai智能体专栏

⭐️流水不争先,争的是滔滔不绝

📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生

| 省级优秀毕业生获得者 | csdn新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生

在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连

目录

前言

一、硬件独立看门狗与软件看门狗原理概述

1.1、硬件看门狗(IWDG)原理

1.2、软件看门狗原理

二、整体工作流程时序图

三、核心配置与数据结构

3.1、关键变量

3.2、关键接口函数

总结


前言

在前几期博客中,我们已经完成了机器人的下位机通信任务、运动控制任务、传感器采集任务、数据上报任务、MonitorTask系统监控任务、异步 LogTask日志任务的全业务多任务架构搭建。

在多任务系统中,我们得保证各关键任务都在正常运行。一般常用软件看门狗机制,让各任务周期性向专门的监测任务报告 "心跳" 状态,由监测任务汇总信号后刷新硬件看门狗。

本篇博客我们就来实现一下软件看门狗 + 硬件独立看门狗IWDG双保险方案,任何一个关键任务异常都会触发系统自动复位,同时配合LogTask的 PANIC 故障打印,实现死机可定位、故障可恢复。


一、硬件独立看门狗与软件看门狗原理概述

1.1、硬件看门狗(IWDG)原理

在 STM32 等 MCU 中,独立看门狗是一种专用硬件定时器模块,其核心特点与工作机制如下:

独立时钟源:自带低速RC时钟(LSI),即使CPU主时钟失效,看门狗仍可正常运行,不受系统时钟故障影响。

递减计数机制:内置12位递减计数器,若计数器递减至0前未执行 "喂狗"(刷新)操作,定时器将溢出并触发系统复位。

通俗理解:看门狗如同 "饥饿的狗",必须定期喂食(喂狗),否则将触发报警(复位 MCU),以此强制恢复系统运行状态。

1.2、软件看门狗原理

在 FreeRTOS 多任务系统中,为避免单一任务阻塞导致的误复位,常采用 任务心跳监测 + 硬件看门狗的软件看门狗机制,实现对所有关键任务的全面监控:

任务心跳上报:所有低优先级应用任务 定期向专门的监测任务发送 "心跳" 信号,报告自身存活状态。

集中监测与喂狗:最高优先级的监测任务 汇总所有心跳信号,仅当全部任务 均在规定时间内完成上报时,才调用 IWDG 刷新函数喂狗。

异常处理逻辑:若任一任务因卡死、阻塞或优先级过低无法执行心跳上报,监测任务将识别异常并停止喂狗,最终触发硬件看门狗复位。

该机制有效避免了单一任务短时延时导致的误复位,实现了对多任务运行状态的精准监控,大幅提升了系统可靠性。

二、整体工作流程时序图

三、核心配置与数据结构

cpp 复制代码
/* 看门狗-任务超时时间配置 */
#define IWDG_TIMEOUT_COMM_MS        (1000U)   // 通信任务
#define IWDG_TIMEOUT_CONTROL_MS     (300U)    // 控制任务(最严格)
#define IWDG_TIMEOUT_SENSOR_MS      (500U)    // 传感器任务
#define IWDG_TIMEOUT_UPLINK_MS      (1000U)   // 数据上报任务
#define IWDG_TIMEOUT_LOG_MS         (1000U)   // 日志任务
#define IWDG_TIMEOUT_MONITOR_MS     (1000U)   // 监控任务自身

这是每个任务允许的最大无响应间隔,若某任务心跳间隔超过了此值,系统就认为异常,触发复位。

3.1、关键变量

cpp 复制代码
g_lastKickTick[]:上次 "喂狗" 时间戳
g_timeoutTick[]:每个任务的超时上限(tick)
g_watchEnable[]:是否启用监控(避免初始化早期误判)
g_taskHandle[]:用于标识哪些任务被纳入监控范围

3.2、关键接口函数

cpp 复制代码
IWDG_TaskInit(...):系统初始化时注册各任务句柄,并设置超时时间与初始心跳时间。
IWDG_Heartbeat(id):被监控任务需定期调用此函数,报告 "我还活着"。
IWDG_WatchEnable(id, true/false):动态开启 / 关闭某个任务的监控功能,适合延迟初始化完成后的任务。

总结

本篇博客我们就来实现一下软件看门狗 + 硬件独立看门狗IWDG双保险方案,任何一个关键任务异常都会触发系统自动复位,同时配合LogTask的 PANIC 故障打印,实现死机可定位、故障可恢复。

相关推荐
都在酒里13 小时前
FreeRTOS 综合实战:串口命令控制 LED 闪烁模式与系统监控
stm32·单片机·嵌入式硬件·嵌入式·rtos·嵌入式软件
济61713 小时前
ROS2 Humble 开发专栏Ubuntu22.04|基于OpenCV 实现机器视觉人脸检测实验指南
嵌入式硬件·嵌入式·ros2·机器人方向
济61714 小时前
【ROS2 Humble 开发专栏】Ubuntu22.04 基于 OpenCV 实现颜色阈值分割与目标坐标定位|附完整工程源码
嵌入式硬件·嵌入式·ros2·机器人开发·机器人方向
2023自学中14 小时前
Linux虚拟机,VSCode + GDB 调试配置:launch.json 模板
linux·vscode·嵌入式
2023自学中14 小时前
Linux 解压命令速查表
linux·服务器·嵌入式·开发板
lularible1 天前
从沙子到车辙(5.2):实时操作系统
开源·嵌入式·汽车电子
2023自学中1 天前
Linux虚拟机 CMakeLists.txt:x86 与 ARM 双架构编译脚本
linux·c语言·c++·嵌入式
webmote331 天前
从零打造虚拟小智:用浏览器模拟 IoT 设备的实践之路
aigc·.net·嵌入式
FreakStudio1 天前
大话电容传感器和电容SOC芯片,看这一篇就够了
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
都在酒里1 天前
FreeRTOS 手动移植教程(七):软件定时器 —— 不占硬件 Timer 的定时回调
stm32·单片机·嵌入式·rtos·嵌入式软件