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

相关文章

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

PostgreSQL如何用psql运行SQL文件

《PostgreSQL如何用psql运行SQL文件》文章介绍了两种运行预写好的SQL文件的方式:首先连接数据库后执行,或者直接通过psql命令执行,需要注意的是,文件路径在Linux系统中应使用斜杠/... 目录PostgreSQ编程L用psql运行SQL文件方式一方式二总结PostgreSQL用psql运

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。