Skip to content

错误处理

错误代码参考 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com)

除了ESP_OK以外都是错误信息, 这些信息一般以ESP_ERR开头

可以使用esp_err_to_name() 函数传递错误代码 0x101,可以得到返回字符串 “ESP_ERR_NO_MEM”。

在 ESP-IDF 中,errno 是一个基于线程的局部变量,即每个 FreeRTOS 任务都有自己的 errno 副本,通过函数修改 errno 也只会作用于当前任务中的 errno 变量值。

错误检查

ESP_ERROR_CHECK 的功能和 assert 类似,不同之处在于:这个宏会检查 esp_err_t 的值,而非判断 bool 条件。如果传给 ESP_ERROR_CHECK的参数不等于 ESP_OK ,则会在控制台上打印错误消息,然后调用 abort() 函数。

ESP_RETURN_ON_ERROR用于错误码检查, 如果错误码不等于 ESP_OK, 该宏会打印错误信息,并使原函数立刻返回。

ESP_ERROR_CHECK_WITHOUT_ABORT 的功能和 ESP_ERROR_CHECK 类似, 不同之处在于它不会调用 abort().

ESP_GOTO_ON_ERROR用于错误码检查, 如果错误码不等于 ESP_OK, 该宏会打印错误信息,将局部变量 ret 赋值为该错误码, 并使原函数跳转至给定的 goto_tag.

ESP_RETURN_ON_FALSE用于条件检查, 如果给定条件不等于 true, 该宏会打印错误信息,并使原函数立刻返回,返回值为给定的 err_code.

ESP_GOTO_ON_FALSE 用于条件检查, 如果给定条件不等于 true, 该宏会打印错误信息,将局部变量 ret 赋值为给定的 err_code, 并使原函数跳转至给定的 goto_tag.