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

相关文章

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

Nginx之upstream被动式重试机制的实现

《Nginx之upstream被动式重试机制的实现》本文主要介绍了Nginx之upstream被动式重试机制的实现,可以通过proxy_next_upstream来自定义配置,具有一定的参考价值,感兴... 目录默认错误选择定义错误指令配置proxy_next_upstreamproxy_next_upst

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装