当前位置: 首页 > news >正文

SOC-ESP32S3部分:14-错误处理

飞书文档https://x509p6c8to.feishu.cn/wiki/ALkQwHNOEiMm0tkhLV9cT29Qnqf

为了让我们编写的代码更健壮,我们可以给所有带返回状态的函数添加错误处理代码,一旦某些资源初始化失败,可以马上终止程序,避免运行异常,触发不确定的问题。这个错误处理代码就是使用IDF提供的ESP_ERROR_CHECK宏定义。ESP_ERROR_CHECK 宏说明如下:

ESP_ERROR_CHECK 宏用于检查 ESP-IDF API 调用的返回值。如果返回值不是 ESP_OK,宏会记录错误日志并终止程序。这有助于在开发过程中快速定位和处理错误。
#define ESP_ERROR_CHECK(x) do { \esp_err_t err_rc = (x); \if (err_rc != ESP_OK) { \ESP_LOGE(TAG, "error %s: %d", esp_err_to_name(err_rc), err_rc); \abort(); \} \
} while(0)宏实现说明:
do { ... } while(0): 使用 do-while 循环确保宏的行为类似于一个语句块。
esp_err_t err_rc = (x): 将 API 调用的结果存储在 err_rc 变量中。
if (err_rc != ESP_OK): 检查返回值是否为 ESP_OK。
ESP_LOGE(TAG, "error %s: %d", esp_err_to_name(err_rc), err_rc): 如果返回值不是 ESP_OK,记录错误日志。esp_err_to_name(err_rc) 将错误码转换为可读的错误名称。
abort(): 终止程序执行。

使用参考:

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"esp_err_t test_func(void)
{esp_err_t ret = ESP_FAIL;ESP_ERROR_CHECK(ret);                  // 如果错误码不等于 `ESP_OK`,则打印错误信息,然后调用 `abort()`。ESP_ERROR_CHECK_WITHOUT_ABORT(ret);    // 如果错误码不等于 `ESP_OK`,则打印错误信息,不调用 `abort()`。//abort() 函数的主要作用是异常终止当前正在执行的程序return ret;
}void app_main(void)
{vTaskDelay(pdMS_TO_TICKS(5000));test_func();while (1){vTaskDelay(pdMS_TO_TICKS(1000));}
}

定时器代码添加错误处理参考

C
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"esp_err_t test_func(void)
{esp_err_t ret = ESP_FAIL;ESP_ERROR_CHECK(ret);                  // 如果错误码不等于 `ESP_OK`,则打印错误信息,然后调用 `abort()`。ESP_ERROR_CHECK_WITHOUT_ABORT(ret);    // 如果错误码不等于 `ESP_OK`,则打印错误信息,不调用 `abort()`。//abort() 函数的主要作用是异常终止当前正在执行的程序return ret;
}void app_main(void)
{vTaskDelay(pdMS_TO_TICKS(5000));test_func();while (1){vTaskDelay(pdMS_TO_TICKS(1000));}
}
http://www.xdnf.cn/news/659611.html

相关文章:

  • 【教学类-36-09】20250526动物面具描边(通义万相)对称图40张,根据图片长宽,自动旋转图片,最大化图片
  • vue3组合API-toRefs函数
  • Python 训练营打卡 Day 36
  • A2A协议(Agent-to-agent Protocol)学习
  • CentOS中安装Docker Compose
  • 【面试题】如何测试一个新增的服务端接口?
  • CSS闯关指南:从手写地狱到“类”积木之旅|得物技术
  • 嵌入式开发学习日志(linux系统编程--进程(2))Day28
  • TLS/PSK
  • vue3减少打包体积
  • C++:多重继承
  • 蓝桥杯b组c++赛道---数位dp
  • git 新建一个分支,怎么首次推到远程仓库
  • 计算机图形学:(四)欧拉角与四元数
  • 尚硅谷redis7 37 redis持久化之AOF简介
  • Unity---OSC(Open Sound Control)、TouchOSC Editor、创建布局
  • Java高频面试之并发编程-21
  • Linux `hostname` 命令深度解析与高阶应用指南
  • Linux中的SELinux
  • RPM之(1)基础使用
  • 【2025】嵌入式软考中级部分试题
  • [特殊字符] useTranslations 客户端使用教程(Next.js + next-intl)
  • n8n中文版安装指南,使用Docker部署N8N中文版
  • 深度学习入门6:pytorch卷积神经网络CNN实现手写数字识别准确率99%
  • 深度学习中的卷积和反卷积
  • 北京大学肖臻老师《区块链技术与应用》公开课:01-课程简介
  • 《软件工程》第 11 章 - 结构化软件开发
  • Qt Creator快捷键合集
  • GESP2024年9月认证C++二级( 第三部分编程题(2)小杨的矩阵)
  • LangChain理解