ESP32-任务看门狗笔记

发布者:JoyfulSpirit5最新更新时间:2025-09-10 来源: cnblogs关键字:ESP32 手机看文章 扫描二维码
随时随地手机看文章

看门狗机制用于监控嵌入式系统运行并在发生不可知的软硬件故障时将系统复位。系统正常运行时,看门狗定时器溢出之前会被重置计数值,也就是“喂狗”。定时器溢出意味着无法“喂狗”,系统异常。


基于ESP-IDF4.1


 1 #include

 2 #include

 3 #include 'freertos/FreeRTOS.h'

 4 #include 'freertos/task.h'

 5 #include 'esp_task_wdt.h'

 6 

 7 #define TWDT_TIMEOUT_S          3

 8 #define TASK_RESET_PERIOD_S     2

 9 

10 /*

11  * 检查任务看门狗输出的宏,并在返回错误代码的时候触发中止

12  */

13 #define CHECK_ERROR_CODE(returned, expected) ({                       

14             if(returned != expected){                                 

15                 printf('TWDT ERRORn');                               

16                 abort();                                               

17             }                                                         

18 })

19 

20 static TaskHandle_t task_handles[portNUM_PROCESSORS];

21 

22 //用户任务的回调函数

23 void reset_task(void *arg)

24 {

25     //将任务添加到任务看门狗,并检查是否已添加

26     CHECK_ERROR_CODE(esp_task_wdt_add(NULL), ESP_OK);

27     CHECK_ERROR_CODE(esp_task_wdt_status(NULL), ESP_OK);

28 

29     while(1){

30         //每2秒重置一次看门狗

31         CHECK_ERROR_CODE(esp_task_wdt_reset(), ESP_OK);  //注释这一行可以触发看门狗超时

32         vTaskDelay(pdMS_TO_TICKS(TASK_RESET_PERIOD_S * 1000));

33     }

34 }

35 

36 void app_main(void)

37 {

38     printf('Initialize TWDTn');

39     //初始化和重新初始化任务看门狗

40     CHECK_ERROR_CODE(esp_task_wdt_init(TWDT_TIMEOUT_S, false), ESP_OK);

41 

42     //启动时未订阅空闲任务,则订阅到任务看门狗

43 #ifndef CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0

44     esp_task_wdt_add(xTaskGetIdleTaskHandleForCPU(0));

45 #endif

46 #ifndef CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1

47     esp_task_wdt_add(xTaskGetIdleTaskHandleForCPU(1));

48 #endif

49 

50     //创建用户任务并添加到任务看门狗

51     for(int i = 0; i < portNUM_PROCESSORS; i++){

52         xTaskCreatePinnedToCore(reset_task, 'reset task', 1024, NULL, 10, &task_handles[i], i);

53     }

54 

55     printf('Delay for 10 secondsn');

56     vTaskDelay(pdMS_TO_TICKS(10000));   //延迟10秒

57 

58     printf('Unsubscribing and deleting tasksn');

59     //从任务监视程序中删除并取消订阅用户任务,然后取消订阅空闲任务

60     for(int i = 0; i < portNUM_PROCESSORS; i++){

61         vTaskDelete(task_handles[i]);   //首先删除用户任务(防止重置未订阅的任务)

62         CHECK_ERROR_CODE(esp_task_wdt_delete(task_handles[i]), ESP_OK);     //从任务看门狗取消订阅任务

63         CHECK_ERROR_CODE(esp_task_wdt_status(task_handles[i]), ESP_ERR_NOT_FOUND);  //确认任务已经取消订阅

64 

65         //取消订阅空闲任务

66         CHECK_ERROR_CODE(esp_task_wdt_delete(xTaskGetIdleTaskHandleForCPU(i)), ESP_OK);     //从任务看门狗取消订阅空闲任务

67         CHECK_ERROR_CODE(esp_task_wdt_status(xTaskGetIdleTaskHandleForCPU(i)), ESP_ERR_NOT_FOUND);      //确认空闲人取消订阅

68     }

69 

70 

71     //取消订阅所有任务后,取消初始化任务看门狗

72     CHECK_ERROR_CODE(esp_task_wdt_deinit(), ESP_OK);

73     CHECK_ERROR_CODE(esp_task_wdt_status(NULL), ESP_ERR_INVALID_STATE);     //确认任务看门狗取消初始化

74 

75     printf('Completen');

76 }


关键字:ESP32 引用地址:ESP32-任务看门狗笔记

上一篇:ESP32-默认事件循环
下一篇:ESP32-性能监控笔记

推荐阅读最新更新时间:2026-03-26 11:52

任务系统看门狗的实现
看门狗分硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂狗”),因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但在可靠性方面不如硬件定时器,比如系统内部定时器自身发生故障就无法检测到。当然也有通过双定时器相互监视,这不仅加大系统开销,也不能解决全部问题,比如中断系统故障导致定时器中断失效。 看门狗本身不是用来解决系统出现的问题,在调试过程中发现的故障应该
[应用]
upyOS:基于 MicroPython 的模块化操作系统,兼容 ESP32、RP2040 等微控制器
upyOS 是一款模块化、轻量级的基于 MicroPython 的操作系统(OS),专为 Espressif ESP32/ESP32-C3/ESP32-S3、树莓派 RP2040 等低资源微控制器设计,旨在为开发者提供类 Unix 的开发体验。其设计灵感源自 smolOS,集成远程开发工具、OTA 升级功能及内置 Web 服务器,通过模块化架构将系统功能拆分为可复用组件,避免传统单体程序的资源冗余问题。 upyOS 核心特性解析 模块化架构设计将命令与系统功能拆解为独立小模块,大幅降低内存占用。例如网络配置、文件系统操作等功能均以插件形式存在,开发者可按需加载,适配不同硬件资源的微控制器。 类 Unix 交互体验内置 sh
[嵌入式]
ESP32与STM32:性能对比分析及选型指南
一、核心架构对比 1.1 ESP32 – 无线物联网霸主 // 典型双核架构配置 #include freertos/FreeRTOS.h #include freertos/task.h void app_main() { // 核心0执行无线通信任务 xTaskCreatePinnedToCore(wifi_task, WiFi , 4096, NULL, 5, NULL, 0); // 核心1执行用户逻辑 xTaskCreatePinnedToCore(user_task, User , 4096, NULL, 5, NULL, 1); } 核心架构:Xtensa LX6双核处理器(主频240MHz)
[单片机]
STM32与ESP32:核心差异详解
STM32与ESP32都是当前电子行业中广泛使用的微控制器芯片,但二者在架构、功能、应用领域以及开发生态上均存在显著差异。需要高度实时响应和低功耗的系统通常适合STM32,而需要网络连接和便捷无线通讯的物联网应用通常更适合ESP32。 一、架构与性能 STM32: 基于ARM Cortex-M系列处理器(如M0、M3、M4、M7等)。 强调实时性和确定性,处理速度高,功耗低。 没有内置Wi-Fi或蓝牙,需要外接模块实现无线通信。 ESP32: 使用Xtensa双核或单核处理器架构,主频通常高达240MHz。 内置Wi-Fi和蓝牙功能,适合物联网(IoT)应用。 功耗相比STM32稍高,特别是在Wi-Fi启动
[单片机]
长按短按控制LED灯-ESP32中断处理
#include stdio.h #include string.h #include stdlib.h #include freertos/FreeRTOS.h #include freertos/task.h #include freertos/queue.h #include driver/gpio.h #include sys/time.h typedef enum { KEY_SHORT_PRESS = 1, KEY_LONG_PRESS =2, } alink_key_t; #define GPIO_LED_IO 13 #define GPIO_LED_PIN_SEL 1ULL GPI
[单片机]
ESP32音频输入-MAX4466,MAX9814,SPH0645LM4H,INMP441
有几种方法可以将模拟音频数据输入到ESP32中。 直接从内置的模数转换器(ADC)读取 这对于一次性读取很有用,但不适用于高采样率。 使用I2S通过DMA读取内置ADC 适用于模拟麦克风,例如MAX4466和MAX9814 使用I2S直接从I2S兼容外设读取 对于SPH0645LM4H,INPM441,ICS43432和ICS43434等麦克风有用 直接从ADC读取 ESP32上有两个内置ADC,ADC1和ADC2。 ADC1具有8个通道: 渠道 通用输入输出 渠道 通用输入输出 ADC1_CHANNEL_0 GPIO36 ADC1_CHANNEL_4 GPIO32 ADC1_CHANNEL_
[单片机]
<font color='red'>ESP32</font>音频输入-MAX4466,MAX9814,SPH0645LM4H,INMP441
ESP32低功耗模式
1.ESP32 系列芯片提供三种可配置的睡眠模式,针对这些睡眠模式,我们提供了了多种低功耗解决方案,用户可以结合具体需求选择睡眠模式并进行配置。三种睡眠模式如下: Modem-sleep 模式:CPU 可运行,时钟可被配置。Wi-Fi/蓝牙基带和射频关闭。 Light-sleep 模式:CPU 暂停运行,Wi-Fi/蓝牙基带和射频关闭。RTC 存储器和外设以及 ULP 协处理器运行。任何唤醒事件(MAC、主机、RTC 定时器或外部中断)都会唤醒芯片。 Deep-sleep 模式:CPU 和大部分外设都会掉电,Wi-Fi/蓝牙基带和射频关闭,只有 RTC 存储器和 RTC 外设以及 ULP 协处理器可以工作。Wi-Fi 和蓝牙
[单片机]
<font color='red'>ESP32</font>低功耗模式
esp32 Guru Meditation 错误解决方案
Guru Meditation 本节将对打印在 Guru Meditation Error: Core panic'ed后面括号中的致错原因进行逐一解释。 IllegalInstruction 此 CPU 异常表示当前执行的指令不是有效指令,引起此错误的常见原因包括: FreeRTOS 中的任务函数已返回。在 FreeRTOS 中,如果想终止任务函数,需要调用 vTaskDelete()函数释放当前任务的资源,而不是直接返回。 无法从 SPI Flash 中加载下一条指令,这通常发生在: 应用程序将 SPI Flash 的引脚重新配置为其它功能(如 GPIO,UART 等等)。有关 SPI Flash 引脚的详细信息,
[单片机]
<font color='red'>esp32</font> Guru Meditation 错误解决方案
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved