头文件和依赖说明:
main.c
#include "esp_log.h"
===================================
CMakeList.txt
REQUIRES
log
日志功能的说明
1.日志分为多个类型,其中等级为ERROR > WARN > INFO > DEBUG > DERBOSE

2.函数显示如下,格式类似,只是最后一个代表类型的字母不同。
3.其中menuconfig的默认显示日志打印等级是INFO及以上,也就是只有ERROR 、WARN 、 INFO的日志会显示,如果需要打印别的类型的需要修改等级。
下面是修改路径,注意直接搜log首先看到的是Bootloader config的,不是程序工作的。需要往下滑

4.下面是没有设置下面两个等级的

5.下面是设置了显示下面两个等级的,但是设置之后也会导致烧录的时候多显示D和V类型的日志。

而下面的Maximum log verbosity则是允许esp_log_level_set修改后的打印范围。
日志功能的使用举例
输入一些debug内容

区分用户模式、开发者模式,由一个宏变量控制是否输出调试信息
先设置最低能显示info类型的内容,则debug和verbose类型不会输出


如下图,当前的is_debug == false,没有输出Debug和Info类型的内容

修改成true后

idf的esp_log_level_set是基于地址操作的
区分下面两个截图的内容,可以看到esp_log_level_set对字符串的操作不是基于变量名,而是基于地址的。
图一因为TAG1和TAG2的值不一样,所以只设置了TAG1的类型后,TAG2的日志不会被打印。
而图二TAG1和TAG2的值一样,所以哪怕只设置了TAG1,TAG2的日志也会被打印。


综合理解
1.menuconfig中设置的日志类型是整个工程允许的最低日志输出类型。

2.esp_log_level_set函数设置的是在工程最低日志输出范围内允许的修改,如果低于最低要求
Maximum log verbosity,那么就不会打印。(如下图)

3.而如果修改Maximum log verbosity为Verbose,则可以正常打印。

4.esp_log_level_set的变量设置是基于地址的,也就是相同数值的变量,哪怕是不同的变量名称也会同步设置。如下图,在TAG1 == TAG2的前提下,哪怕我只对TAG1进行了操作,TAG2的打印也同步触发。
1037

被折叠的 条评论
为什么被折叠?



