news 2026/6/15 23:05:55

esp32开发与应用(看门狗测试)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
esp32开发与应用(看门狗测试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

不管是mcu,还是soc,看门狗都是系统常用的一种监控手段。看门狗初始化之后,如果不能在指定的时间内重启,那么系统会默认当前cpu已经跑飞,立即重启系统。这对于一些无人值守的设备,具有很大的价值。当然很多时候,看门狗也不能滥用,对于一般bug、有规律的bug、低概率的bug,最好还是找出root cause,只有实在解决不了的问题,才动用watchdog,这样比较好。

1、esp32的看门狗

相比较其他mcu的看门狗,esp32的看门狗不仅可以监控主task,还可以监控一般的task。这也就是说,不管是哪个task,只要在规定的时间内都没有完成喂狗动作,那么都会造成系统重启。

2、利用ai编写代码

知道这个基本原理之后,就可以让ai给我们编写一段sample代码。告诉ai,用esp-idf编写一段看门狗的demo,这样不出意外的话,我们就可以看到这样的代码,

#include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_task_wdt.h" // Monitored task void monitored_task(void *pvParameters) { // 1. Add the current task to TWDT watch list TaskHandle_t current_task = xTaskGetCurrentTaskHandle(); esp_task_wdt_add(current_task); printf("Monitored task has been added to TWDT.\n"); while (1) { // 2. Perform the core work of the task... printf("Monitored task is running...\n"); // 3. Feed the watchdog periodically (e.g., every 2 seconds) esp_task_wdt_reset(); printf("Monitored task fed the watchdog.\n"); vTaskDelay(pdMS_TO_TICKS(2000)); } // Delete from TWDT when the task ends (this is never reached in infinite loop) esp_task_wdt_delete(current_task); vTaskDelete(NULL); } void app_main(void) { // Initialize TWDT esp_task_wdt_config_t twdt_config = { .timeout_ms = 5000, // 5 seconds timeout .idle_core_mask = (1 << portNUM_PROCESSORS) - 1, // Monitor idle tasks on all cores .trigger_panic = true, // Trigger panic (and restart) on timeout }; esp_task_wdt_init(&twdt_config); // Optionally add the main task (app_main) to the watch list esp_task_wdt_add(NULL); // Add the current (main) task to TWDT // Create a custom monitored task xTaskCreate(monitored_task, "monitored_task", 4096, NULL, 5, NULL); while (1) { // Main task also feeds the watchdog esp_task_wdt_reset(); printf("Main task fed the watchdog.\n"); vTaskDelay(pdMS_TO_TICKS(3000)); } }

3、编译、下载和修改

测试的时候分成两步。第一步,先完成编译、下载和测试。看看编译有没有问题,下载是不是ok,观察运行是不是对的。完成这一步之后,就可以做第二步。即,修改代码。比如主task关闭喂狗,或者是子task关闭喂狗,看看对系统有没有影响,有什么样的影响。

这样反复多测试几次,就会对看门狗程序有比较深刻的体会。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 23:03:51

I2C总线协议与MSC711x DSP寄存器级编程实战

1. I2C总线协议深度解析&#xff1a;从两根线到复杂系统通信如果你在嵌入式领域摸爬滚打过几年&#xff0c;一定绕不开I2C这个老朋友。它不像SPI那样需要四根线&#xff0c;也不像UART那样需要事先约定好波特率&#xff0c;仅凭SCL和SDA两根线&#xff0c;就能在板子上串联起一…

作者头像 李华
网站建设 2026/6/15 23:00:12

3步终极指南:彻底解决加密音乐播放难题的完整方案

3步终极指南&#xff1a;彻底解决加密音乐播放难题的完整方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https://g…

作者头像 李华
网站建设 2026/6/15 22:59:10

DDR内存控制器配置实战:从时序参数到寄存器设置的嵌入式开发指南

1. 项目概述&#xff1a;从寄存器手册到实战配置 如果你曾经在嵌入式系统开发中&#xff0c;尤其是基于PowerPC、ARM或RISC-V架构的平台上&#xff0c;尝试过让一块DDR内存条稳定工作&#xff0c;那你一定对“内存控制器配置”这几个字深有感触。这绝不仅仅是往几个寄存器里填几…

作者头像 李华