Page 1 of 1

请问ESP_ERROR_CHECK的相关问题

Posted: Tue Apr 19, 2022 6:01 am
by wangshuoran
在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将无法有作用。谢谢!

Re: 请问ESP_ERROR_CHECK的相关问题

Posted: Tue Apr 19, 2022 12:06 pm
by wangshuoran
自问自答一下:

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

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

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

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

Re: 请问ESP_ERROR_CHECK的相关问题

Posted: Wed Apr 20, 2022 5:51 am
by wangshuoran
再自问自答一下,在CMakeCache这个文件中,我搜索出来-O3,说明在项目根目录CMakeLists的配置文件中:
```c

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

```

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