看门狗机制用于监控嵌入式系统运行并在发生不可知的软硬件故障时将系统复位。系统正常运行时,看门狗定时器溢出之前会被重置计数值,也就是“喂狗”。定时器溢出意味着无法“喂狗”,系统异常。
基于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-性能监控笔记
推荐阅读最新更新时间:2026-03-26 11:52
- TCR6DA1828、200mA、1.8V 和 2.8V 输出电压双路输出 CMOS 低压降稳压器的典型应用
- RD-490,将 FSQ510 电源开关用于辅助电源应用的参考设计
- LT1307CMS8 单节 CCFL 电源典型应用电路
- 用于照明的 250W 电子镇流器灯驱动器
- LTC1291单片机12位数据采集系统典型应用
- DI-122 - 13W (17.2W峰值)非隔离电源,用于白色家电,带<150 mW空载功率消耗
- LTM8064EY 的典型应用电路在负载共享时从多个输入轨跟踪输入电流
- AL9901 通用高压 LED 驱动器的典型应用
- NCS36000GEVB:被动红外探测器控制器 (PIR) 评估板
- LT1021CIN8-5 2 极低通滤波电压基准的典型应用
- 格创东智SEMICON CHINA 2026圆满收官,章鱼智脑与全场景智能体群定义工业智能决策新高度
- 当变压器进入封装:TI IsoShield如何改写隔离电源边界
- 2026年1月座舱域控迎新一轮洗牌,华为、小米上位,比亚迪电子承压
- SK Signet推出400kW一体式超快速电动汽车充电器
- 智元机器人第1万台人形机器人A3量产下线,全球市场份额领先
- 雷诺和RMC BFM推出人工智能个性化车载收音机
- Diodes推出符合汽车级标准的100V PowerDI®8080-5封装MOSFET
- 保时捷申请线控换挡系统专利 兼具自动变速箱和手动变速箱功能
- 汽车以太网的11大误区
- 如何将自动驾驶大模型庞大的能力压缩到车端?

【Follow me第三季第3期】代码
【Follow me第三季第3期】XIAO ESP32S3任务代码提交
Follow me第三季第3期源代码
MOSFET和GaN FET应用手册
NJM41005FT-TE1
XTK356T18P4F






京公网安备 11010802033920号