ESP32 看门狗:保障系统稳定运行的重要机制

2024-01-31 04:52

本文主要是介绍ESP32 看门狗:保障系统稳定运行的重要机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ESP32 看门狗:保障系统稳定运行的重要机制


导言:

在嵌入式系统开发中,系统稳定性是至关重要的。为了应对系统出现异常情况或者死锁等问题,ESP32提供了看门狗(Watchdog)机制。本文将深入探讨ESP32看门狗的工作原理、用途以及如何在ESP32开发中合理使用看门狗来确保系统的稳定运行。


看门狗的工作原理

看门狗是一种硬件计时器,其工作原理类似于一个定时器。系统在正常运行时会周期性地喂狗(重置看门狗定时器),以表示系统正常运行。如果系统出现故障或者停止响应,看门狗定时器将超时,系统会执行预定义的故障处理程序,例如重启系统,从而使系统恢复到正常状态。


ESP32 看门狗的功能

ESP32提供了丰富的功能来支持看门狗:

  • 初始化:通过 esp_task_wdt_init() 函数进行初始化,可以设置超时时间和是否在超时时触发系统重启。
  • 配置:通过esp_task_wdt_add(taskHandle);将看门狗监视添加到任务中
  • 重置:通过 esp_task_wdt_reset() 函数定期重置看门狗定时器,以防止系统超时。

实例演示

以下是一个简单的ESP32看门狗示例代码:

#include <Arduino.h>
#include "esp_task_wdt.h"// 定义看门狗超时时间(单位:毫秒)
#define WDT_TIMEOUT 5000 // 5秒// 定义任务句柄
TaskHandle_t taskHandle = NULL;// 看门狗喂狗任务
void watchdogTask(void *pvParameters) {while (true) {// 喂狗esp_task_wdt_reset();// 任务....Serial.println(".....");}
}void setup() {Serial.begin(115200);// 初始化看门狗定时器esp_task_wdt_init(WDT_TIMEOUT, true);// 创建任务xTaskCreate(watchdogTask, "Watchdog Task", 2048, NULL, 1, &taskHandle);//将看门狗加到任务esp_task_wdt_add(taskHandle);}void loop() {// 在主循环中可以执行其他任务}

经过我的一些测试和查询资料发现,如果使用esp_task_wdt_init(WDT_TIMEOUT, true);初始化了看门狗,就算不写esp_task_wdt_add(taskHandle);也是可以的FreeRTOS 中,默认情况下,任务创建时会自动加入看门狗的监视列表中,因此手动添加任务到看门狗监视列表并不是必需的。

并且在任务中esp_task_wdt_reset();也不是必须要写的,在FreeRTOS中,ESP32的任务默认会定期重置任务看门狗。这意味着,即使你没有在任务中显式调用 esp_task_wdt_reset() 函数,系统也会在每个任务的循环中自动重置任务看门狗

在这里插入图片描述
在这里插入图片描述

这里喂狗后阻塞两倍的超时时间,程序依然正常运行,可见,在arduino框架下底层已经帮我们重置了任务看门狗

以上两个特性是在Arduino框架下测试发现的,至于其他单片机和开发环境,可能不太相同


API总结:

  1. esp_task_wdt_init(uint32_t timeout, bool panic):

    • 初始化看门狗定时器。
    • 参数timeout:超时时间,单位为毫秒。
    • 参数panic:如果设置为true,系统将在看门狗超时时重启,如果设置为false,则只是记录错误。
  2. esp_task_wdt_deinit():

    • 关闭并清除看门狗定时器。
  3. esp_task_wdt_add(TaskHandle_t task):

    • 将任务添加到看门狗定时器的监视列表中。如果任务在超时时间内没有被重置,看门狗将重置系统。
    • 参数task:要添加到看门狗监视列表的任务句柄。
  4. esp_task_wdt_delete(TaskHandle_t task):

    • 从看门狗定时器的监视列表中删除任务。
    • 参数task:要从看门狗监视列表中删除的任务句柄。
  5. esp_task_wdt_reset():

    • 重置看门狗定时器。在任务中定期调用此函数,以防止看门狗超时重置系统。

结论

ESP32看门狗是确保嵌入式系统稳定运行的重要机制之一。通过合理配置和使用ESP32看门狗,可以及时发现系统异常并采取相应措施,提高系统的可靠性和稳定性。

在开发ESP32应用程序时,务必考虑看门狗的使用,并根据实际情况调整参数,以确保系统能够在各种异常情况下保持稳定运行。

参考文献:

  • ESP32 官方文档
  • FreeRTOS 官方文档

这篇关于ESP32 看门狗:保障系统稳定运行的重要机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/662616

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2