请问ESP_ERROR_CHECK的相关问题

wangshuoran
Posts: 37
Joined: Fri Dec 24, 2021 12:40 pm

请问ESP_ERROR_CHECK的相关问题

Postby wangshuoran » Tue Apr 19, 2022 6:01 am

在ESP_ERROR_CHECK的源码实现中
```c
#ifdef NDEBUG
#define ESP_ERROR_CHECK(x) do { \
esp_err_t __err_rc = (x); \
(void) sizeof(__err_rc); \
} while(0)
#elif defined(CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT)
#define ESP_ERROR_CHECK(x) do { \
esp_err_t __err_rc = (x); \
if (__err_rc != ESP_OK) { \
abort(); \
} \
} while(0)
#else
#define ESP_ERROR_CHECK(x) do { \
esp_err_t __err_rc = (x); \
if (__err_rc != ESP_OK) { \
_esp_error_check_failed(__err_rc, __FILE__, __LINE__, \
__ASSERT_FUNC, #x); \
} \
} while(0)
#endif
```

我看到有设置NDEBUG,这个宏是在Debug的时候设置的,如果我先在CMake中取消这个Debug设置,该怎么做?因为如果不取消这个Debug,那CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT将无法有作用。谢谢!

wangshuoran
Posts: 37
Joined: Fri Dec 24, 2021 12:40 pm

Re: 请问ESP_ERROR_CHECK的相关问题

Postby wangshuoran » Tue Apr 19, 2022 12:06 pm

自问自答一下:

在sdkconfig文件中有CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE,就是对断言的优化,本质上就是关闭abort()这个选项。

但是我无意中看到了sdkconfig中也存在编译优化等级,但是在ESP32-C3中sdkconfig没有优化等级

我在网上搜索到的
```cmake
idf_build_set_property(COMPILE_OPTIONS "-O3" APPEND)
```

也有时候不会生效,我想请问,这个编译优化等级到底能设置吗?如果能设置该怎么设置?

wangshuoran
Posts: 37
Joined: Fri Dec 24, 2021 12:40 pm

Re: 请问ESP_ERROR_CHECK的相关问题

Postby wangshuoran » Wed Apr 20, 2022 5:51 am

再自问自答一下,在CMakeCache这个文件中,我搜索出来-O3,说明在项目根目录CMakeLists的配置文件中:
```c

# 编译优化等级
idf_build_set_property(COMPILE_OPTIONS "-O3" APPEND)

```

生效,那么就是说明只要sdkconfig中-Og那个选项默认,这个优化等级在CMakeLists就会生效,请官方人员看看我说的对不对?

Who is online

Users browsing this forum: No registered users and 65 guests