看门狗定时器(WDT)超时

一、问题

Arduino 程序使用<Ticker.h>包时,使用不当情况下,会导致“看门狗WDT超时”

1.1问题控制台报错

在串口监视器显示

--------------- CUT HERE FOR EXCEPTION DECODER ---------------Soft WDT resetException (4):
epc1=0x402077cb epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000>>>stack>>>ctx: sys
sp: 3fffed40 end: 3fffffb0 offset: 0160
3fffeea0:  3ffeeab0 00001946 0000003d 40207921  
3fffeeb0:  00001946 000003e8 0000159b 40207996  

出现这种串口输出(即 Soft WDT reset 错误)通常表示你的代码遇到了看门狗定时器(WDT)超时。具体原因是代码运行中有一段时间没有及时喂给看门狗定时器,导致系统认为程序卡住了并重启。

在 ESP8266 或 ESP32 这类使用看门狗定时器的设备中,看门狗定时器用于监控程序是否在执行时挂起。如果程序在一定时间内没有重置(喂)看门狗,系统会认为程序出了问题并触发重启。

1.2问题代码

#include <Ticker.h>Ticker ticker;void setup() {
pinMode(LED_BUILTIN, OUTPUT);//串口-------------------------------------------------bool openSerial = true;  // 串口开启if (openSerial) {Serial.begin(115200);  // 设置波特率为115200}ticker.attach_ms(10, control);  // 10毫秒执行一次
}// 控制状态
void control() {if (ledFlag == 0) {digitalWrite(LED_BUILTIN, LOW);  // LED设置为低电平} else {digitalWrite(LED_BUILTIN, HIGH);  // LED设置为高电平}ledFlag = !ledFlag;  // 切换ledFlag的值delay(1000);  // 延时1秒钟
}

1.3错误发现

delay(1000);  // 延时1秒钟

错误就在control方法的 delay函数。

ticker.attach_ms(10, control); // 10毫秒执行一次

定时器在实现每10毫秒调用control方法,但是control方法中由存在delay延迟。导致长时间的阻塞代码: 如果程序在某个操作中执行了很长时间(如等待某个外设响应,或者进行复杂的运算),而没有调用 yield()delay() 等函数来让系统有机会喂看门狗定时器,这就可能导致看门狗超时并重启系统。

二、解决

#include <Ticker.h>volatile int ledFlag = 0;void setup() {pinMode(LED_BUILTIN, OUTPUT);//串口-------------------------------------------------bool openSerial = true;  // 🍄改改改 根据需要设置是否开启串口if (openSerial) {Serial.begin(115200);  // 设置波特率为115200}ticker.attach_ms(1000, control);  // 10毫秒执行一次,1秒 1000
}// 控制状态
void control() {if (ledFlag == 0) {digitalWrite(LED_BUILTIN, LOW);  // LED设置为低电平} else {digitalWrite(LED_BUILTIN, HIGH);  // LED设置为高电平}ledFlag = !ledFlag;  // 切换ledFlag的值
}

2.1取消delay()

volatile int ledFlag = 0;

使用易变数据类型参数。取消delay函数。用外部的ticker直接实现定时,不要再定时中再延时。再control方法中将ledFlag取异即可。

三、总结

看门狗超时引起的系统重启,通常是由于代码中存在长时间阻塞操作,或者没有及时喂看门狗导致的。你可以通过优化代码执行的时间,或定期调用 yield()delay() 来防止这个问题发生。

适当使用 yield()delay() 如果你的代码执行时间较长,可以在适当的地方调用 yield()delay() 函数,这样系统可以有机会处理看门狗定时器的喂养操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/79334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI在多Agent协同领域的核心概念、技术方法、应用场景及挑战 的详细解析

以下是 AI在多Agent协同领域的核心概念、技术方法、应用场景及挑战 的详细解析&#xff1a; 1. 多Agent协同的定义与核心目标 多Agent系统&#xff08;MAS, Multi-Agent System&#xff09;&#xff1a; 由多个独立或协作的智能体&#xff08;Agent&#xff09;组成&#xff…

Wireshark TS | 异常 ACK 数据包处理

问题背景 来自于学习群里群友讨论的一个数据包跟踪文件&#xff0c;在其中涉及到两处数据包异常现象&#xff0c;而产生这些现象的实际原因是数据包乱序。由于这两处数据包异常&#xff0c;都有点特别&#xff0c;本篇也就其中一个异常现象单独展开说明。 问题信息 数据包跟…

【React】项目的搭建

create-react-app 搭建vite 搭建相关下载 在Vue中搭建项目的步骤&#xff1a;1.首先安装脚手架的环境&#xff0c;2.通过脚手架的指令创建项目 在React中有两种方式去搭建项目&#xff1a;1.和Vue一样&#xff0c;先安装脚手架然后通过脚手架指令搭建&#xff1b;2.npx create-…

深入浅出 NVIDIA CUDA 架构与并行计算技术

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、CUDA为何重要&#xff1a;并行计算的时代 2、NVIDIA在…

pytorch学习02

自动微分 自动微分模块torch.autograd负责自动计算张量操作的梯度&#xff0c;具有自动求导功能。自动微分模块是构成神经网络训练的必要模块&#xff0c;可以实现网络权重参数的更新&#xff0c;使得反向传播算法的实现变得简单而高效。 1. 基础概念 张量 Torch中一切皆为张…

Java虚拟机(JVM)平台无关?相关?

计算机的概念模型 计算机实际上就是实现了一个图灵机模型。即&#xff0c;输入参数&#xff0c;根据程序计算&#xff0c;输出结果。图灵机模型如图。 Tape是输入数据&#xff0c;Program是针对这些数据进行计算的程序&#xff0c;中间横着的方块表示的是机器的状态。 目前使…

satoken的奇奇怪怪的错误

发了 /user/getBrowseDetail和/user/getResponDetail&#xff0c;但为什么进入handle里面有三次&#xff1f;且第一次的handle类型是AbstractHandleMapping$PreFlightHttpRequestHandlerxxx,这一次进来的时候flag为false&#xff0c;StpUtils.checkLogin抛出了异常 第二次进来的…

【KWDB 创作者计划】_上位机知识篇---SDK

文章目录 前言一、SDK的核心组成API(应用程序接口)库文件(Libraries)开发工具文档与示例依赖项与环境配置二、SDK的作用简化开发流程确保兼容性与稳定性加速产品迭代功能扩展与定制三、SDK的典型应用场景硬件设备开发操作系统与平台云服务与API集成游戏与图形开发四、SDK与…

golang处理时间的包time一次性全面了解

本文旨在对官方time包有个全面学习了解。不钻抠细节&#xff0c;但又有全面了解&#xff0c;重点介绍常用的内容&#xff0c;一些低频的可能这辈子可能都用不上。主打一个花最少时间办最大事。 Duration对象: 两个time实例经过的时间,以长度为int64的纳秒来计数。 常见的durati…

PyCharm Flask 使用 Tailwind CSS 配置

使用 Tailwind CSS 步骤 1&#xff1a;初始化项目 在 PyCharm 终端运行&#xff1a;npm init -y安装 Tailwind CSS&#xff1a;npm install -D tailwindcss postcss autoprefixer初始化 Tailwind 配置文件&#xff1a;npx tailwindcss init这会生成 tailwind.config.js。 步…

【英语语法】基本句型

目录 前言一&#xff1a;主谓二&#xff1a;主谓宾三&#xff1a;主系表四&#xff1a;主谓双宾五&#xff1a;主谓宾补 前言 英语基本句型是语法体系的基石&#xff0c;以下是英语五大基本句型。 一&#xff1a;主谓 结构&#xff1a;主语 不及物动词 例句&#xff1a; T…

隔离DCDC辅助电源解决方案与产品应用科普

**“隔离”与“非隔离的区别** 隔离&#xff1a; 1、AC-DC&#xff0c;也叫“一次电源”&#xff0c;人可能会碰到的应用场合&#xff0c;起安全保护作用&#xff1b; 2、为了抗干扰&#xff0c;通过隔离能有效隔绝干扰信号传输。 非隔离&#xff1a; 1、“安全特低电压&#…

DS-SLAM 运动一致性检测的源码解读

运动一致性检测是Frame.cc的Frame::ProcessMovingObject(const cv::Mat &imgray)函数。 对应DS-SLAM流程图Moving consistency check的部分 把这个函数单独摘出来&#xff0c;写了一下对两帧检测&#xff0c;查看效果的程序&#xff1a; #include <opencv2/opencv.hpp…

安全测试的全面知识体系及实现路径

以下是安全测试的全面知识体系及实现路径,结合最新工具和技术趋势(截至2025年): 一、安全测试核心类型与工具 1. 静态应用安全测试(SAST) 知识点: 通过分析源代码、字节码或二进制文件识别漏洞(如SQL注入、缓冲区溢出)支持早期漏洞发现,减少修复成本,适合白盒测试场…

GPT-4o Image Generation Capabilities: An Empirical Study

GPT-4o 图像生成能力:一项实证研究 目录 介绍研究背景方法论文本到图像生成图像到图像转换图像到 3D 能力主要优势局限性与挑战对比性能影响与未来方向结论介绍 近年来,图像生成领域发生了巨大的变化,从生成对抗网络 (GAN) 发展到扩散模型,再到可以处理多种模态的统一生成架…

Redis之全局唯一ID

全局ID生成器 文章目录 全局ID生成器一、全局ID生成器的定义定义核心作用 二、全局ID生成器需满足的特征1. 唯一性&#xff08;Uniqueness&#xff09;​2. 高性能&#xff08;High Performance&#xff09;​3. 可扩展性&#xff08;Scalability&#xff09;​4. 有序性&#…

nginx中的代理缓存

1.缓存存放路径 对key取哈希值之后&#xff0c;设置cache内容&#xff0c;然后得到的哈希值的倒数第一位作为第一个子目录&#xff0c;倒数第三位和倒数第二位组成的字符串作为第二个子目录&#xff0c;如图。 proxy_cache_path /xxxx/ levels1:2 2.文件名哈希值

静态时序分析STA——8.1 时序检查(建立时间检查)

文章目录 一、时序路径组二、建立时间检查1. 触发器到触发器路径1&#xff09;时钟单元UCKBUF0的延迟计算2&#xff09;时钟源延迟&#xff08;clock source latency&#xff09; 2. 输入到触发器路径1) 虚拟时钟的输入路径2) 具有实际时钟的输入路径 3. 触发器到输出路径4. 输…

了解高速设计的信号完整性仿真

高速设计需要精确的信号传输&#xff0c;以确保最佳性能。信号完整性差会导致关键应用中的误码、数据损坏甚至系统故障等问题。介电常数、损耗角正切和插入损耗等因素会显著影响信号质量。通过使用信号完整性仿真&#xff0c;您可以及早发现并解决这些挑战。这种主动方法有助于…

RAGFlowwindows本地pycharm运行

Python环境准备 1. 安装pipx。如已经安装&#xff0c;可跳过本步骤&#xff1a; python -m pip install --user pipxpython -m pipx ensurepath## 验证安装pipx --version2. 安装 uv。如已经安装&#xff0c;可跳过本步骤&#xff1a; pipx install uv ## 设置为阿里云 PyPI…