ESP32S3:解决RWDT无法触发中断问题,二次开发者怎么才能使用内部RTC看门狗中断RWDT呢?

news/2025/2/24 14:02:05

目录

  • 基于ESP32S3:解决RWDT无法触发中断问题
      • 引言
      • 解决方案
        • 1. 查看报错日志
        • 2. 分析报错及一步一步找到解决方法
        • 3.小结
      • 我的源码

基于ESP32S3:解决RWDT无法触发中断问题

引言

嵌入式系统中,RWDT(看门狗定时器)是确保系统稳定性的重要组件。然而,在某些情况下,RWDT可能无法触发预期的中断。本文旨在探讨此问题的原因及解决方案。

解决方案

1. 查看报错日志

在这里插入图片描述
  从上图可以知道错误是程序那个位置发生的,那么报错的程序如下图所示:
在这里插入图片描述

2. 分析报错及一步一步找到解决方法

  从上面已经知道了导致报错的程序位置了,那么我调用esp_intr_alloc函数传入的形参与对比官方的源码调用esp_intr_alloc来看,都没有什么问题,猜测,一般是该中断源可能已经被使用过导致的,我们可以分析一下esp_intr_alloc函数。

  跳转到esp_intr_alloc函数中,如下图所示:
在这里插入图片描述
可以看到,该函数其只是调用esp_intr_alloc_intrstatus函数而已,那么跳转到esp_intr_alloc_intrstatus函数中,如下图所示:
在这里插入图片描述
我们可以在红色框框看出,该函数内使用的是ESP_EARLY_LOGV函数进行日志输出。结果调用这个函数后并没有ESP_EARLY_LOGV函数后并没有生效,没用对应的日志输出出来,那我们先看看函数的介绍,如下图:
log文件路径:\Espressif\frameworks\esp-idf-v5.1.2\components\log\log.c
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  从上面可只,log_level=ESP_LOG_VERBOSE,而LOG_LOCAL_LEVEL和esp_log_default_level又是哪里定义的呢?下图是我找到其定义:
在这里插入图片描述
在这里插入图片描述
从上面可分析出,ESP_EARLY_LOGV日志输出使能条件是 CONFIG_LOG_MAXIMUM_LEVEL>=ESP_LOG_VERBOSE 和 CONFIG_LOG_DEFAULT_LEVEL>=ESP_LOG_VERBOSE 同时成立。而CONFIG_LOG_MAXIMUM_LEVEL和CONFIG_LOG_DEFAULT_LEVEL都是在sdkconfig上定义的,那么我们可以通过menuconfig图形化工具进行设置,如下:
在这里插入图片描述
  重新编译运行后,ESP_EARLY_LOGV就能正常输出日志了,但是因为这种设置时全局的,导致系统所有的日志都输出出来,这是不想看到的,因此只在这个函数修改 LOG_LOCAL_LEVEL和esp_log_default_level即可,那么就不会影响到全局了,操作如下图所示:
在这里插入图片描述
这是日志也能正常输出了:
在这里插入图片描述
在这里插入图片描述
  从上面申请中断的日志和RTC中断源号可看出,在进入主函数和系统调度前就已经申请了,所以这也就是为什么申请RTC中断失败的原因了。那么现在就是要找找到底是哪里申请了该RTC中断了,可以在函数调用中加esp_backtrace_print这个函数,这个函数是打印堆栈信息的,如下:
在这里插入图片描述输出日志如下:
在这里插入图片描述
从上面日志可以确定,调用的文件是,如下图:


http://www.niftyadmin.cn/n/5864434.html

相关文章

Android 实现 RTMP 推流:快速集成指南

简介 在 Android 设备上实现 RTMP 推流,可以用于直播、远程监控等应用场景。本文将基于 rtmp-rtsp-stream-client-java 库,介绍如何在 Android 端快速集成 RTMP 推流,包括权限管理、相机预览、推流控制等关键步骤。 步骤 1. 配置 Maven 仓库 在 settings.gradle.kts 中添…

利用Ai对生成的测试用例进行用例评审

利用AI对生成的测试用例进行用例评审,可以从用例的完整性、有效性、一致性等多个维度展开,借助自然语言处理、机器学习等技术,提高评审效率和准确性。以下为你详细介绍具体方法: 1. 需求匹配度评审 利用自然语言处理(NLP)技术 步骤:首先将软件需求文档和生成的测试用例…

基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布局优化)

基于范围选择的进化多目标优化 PESA-II(Pareto Envelope-Based Selection Algorithm II)是一种经典的多目标遗传算法,以下是对它的详细介绍:基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机…

在Ubuntu下通过Docker部署Nginx服务器

引言 想要在你的开发环境中快速搭建一个高性能的Web服务器?Nginx是个绝佳的选择。作为一个轻量级的反向代理服务器和负载均衡器,Nginx在处理高并发请求时表现得相当出色。而Docker,作为现代应用的容器化工具,可以让我们以极简的方…

【Qt】桌面应用开发 ------ 绘图事件和绘图设备 文件操作

文章目录 9、绘图事件和绘图设备9.1 QPainter9.2 手动触发绘图事件9.3 绘图设备9.3.1 QPixmap9.3.2 QImage9.3.3 QImage与QPixmap的区别9.3.4 QPicture 10、文件操作10.1 文件读写10.2 二进制文件读写10.3 文本文件读写10.4 综合案例 9、绘图事件和绘图设备 什么时候画&#x…

Deepin(Linux)设置开机自动启动 MySQL

要在系统启动时自动启动 MySQL,可以通过配置 systemd 来实现。由于已经完成了 MySQL 的安装并且能够启动 MySQL 服务,接下来我们将创建一个 systemd 服务单元文件,让 MySQL 在系统启动时自动启动。 1. 创建 systemd 服务文件 首先&#xff…

vscode设置终端复制快捷键(有坑!!!)

vscode的编辑页面和终端的复制粘贴快捷键是不一样的。 vscode的终端复制快捷键为ctrlshiftC,当然,自己可以自定义设置 vscode设置终端复制快捷键(有坑!!!)_vs code 不能复制-CSDN博客文章浏览…

DeepSeek-R1本地部署保姆级教程

一、DeepSeek-R1本地部署配置要求 (一)轻量级模型 ▌DeepSeek-R1-1.5B 内存容量:≥8GB 显卡需求:支持CPU推理(无需独立GPU) 适用场景:本地环境验证测试/Ollama集成调试 (二&a…