ESP-IDF学习笔记-调试等级打印
ESP32IDF中提供了一个LOG库,根据不同调试等级打印信息,这里记录一下简单用法。
官方给的库用法很多还有一些高级用法,但是我们只需要使用简单的就行了。
一,调试级别
ESP32LOG库定义的如下调试级别(按等级高低从低到高排列):
- ESP_LOGE - error (lowest)
- ESP_LOGW - warning
- ESP_LOGI - info
- ESP_LOGD - debug
- ESP_LOGV - verbose (highest)
对应的在IDF中的调试级别设置如图:
对应的设置选项为:
- CONFIG_LOG_DEFAULT_LEVEL:默认调试级别
- CONFIG_LOG_MAXIMUM_LEVEL:最高调试级别
高于默认调试级别的调试信息不会打印。
CONFIG_LOG_MAXIMUM_LEVEL用来设置esp_log_level_set()
可以设置的最高级别的调试等级(代码中动态调整调试等级)。
剩下一个设置项用来设置调试时间戳的来源,可以设置为来自于FreeRTos的时基,从系统重启后到现在的ms;或者为实际时间,来自RTC外设(可通过SNTP在重启置0后校准)。
二,API函数
常用函数如下:
1 | //打印调试信息 |
使用方法:
- 定义TAG
1 | static const char* TAG = "MyModule"; |
- 调用打印函数
1 | ESP_LOGW(TAG, "Baud rate error %.1f%%. Requested: %d baud, actual: %d baud", error * 100, baud_req, baud_real); |
通过在esp_log.h
前定义LOG_LOCAL_LEVEL
来重新设置默认调试等级:
1 |
对于组件(component)可以在CMakeLists中设置来重设:
1 | target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLOG_LOCAL_LEVEL=ESP_LOG_VERBOSE") |
可以通过``在运行时设置各个TAG的调试等级:
1 | esp_log_level_set("*", ESP_LOG_ERROR); // set all components to ERROR level |
三,高级用法
输出端口
默认情况下,日志输出到串口,使用类vsprintf函数。
通过调用以下函数,可以将输出定向到JATG:
1 | esp_log_set_vprintf(esp_apptrace_vprintf); |
如果想重新设置回UART:
1 | esp_log_set_vprintf(vprintf); |
其他输出API
1 | ESP_EARLY_LOGx() |
在系统早期启动过程使用:在堆分配前和系统调用前使用
1 | ESP_DRAM_LOGx() |
在中断被关闭或者Flash缓存无法访问时使用,由于对系统性能考虑,应尽可能少使用。