【ESP-IDF】日志
介绍ESP-IDF中的日志模块
首先我们来介绍一下ESP-IDF中用于日志模块的头文件:esp_log.h
我们在代码中使用#include “esp_log.h”引入即可,关于它的解释见如下:
你好,这是一个C语言的预处理指令,用于包含一个头文件到你的源代码中。头文件通常包含了一些函数声明,宏定义,类型定义等,方便你使用其他模块或库的功能。在这个例子中,你包含了esp_log头文件,它是ESP-IDF提供的一个日志模块,可以让你在串口或JTAG输出不同级别的日志信息,帮助你调试你的应用程序。你可以参考这个文档来了解更多关于esp_log模块的用法:https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/system/log.html
简单来说,以下做一些示例讲解:
#include <stdio.h>
#include "esp_log.h
void app_main(void)
{
// E Error
ESP_LOGE("交通灯", "不亮了");
// W Warn
ESP_LOGW("交通灯", "灯泡寿命还有5%%");
// I Information
ESP_LOGI("交通灯", "交通灯寿命还有75%%");
// D Debug
ESP_LOGD("交通灯", "灯泡亮度1000,已使用200小时");
// V verbose
ESP_LOGV("交通灯", "灯丝还有5丝厚度,氧化程度0.23,寿命正常");
ESP_LOGE("人行横道", "有人闯红灯!");
ESP_LOGW("人行横道", "现在是红灯,禁止通行");
ESP_LOGI("人行横道", "20秒后是绿灯");
}
其中,前面三项E
、W
、I
是给用户看的,是用户需要的信息,而后面两项D
、V
是给程序员看的
因此我们可以发现,在输出时,后两项不会在终端输出
那么如何能够显示出程序员能看到的信息呢?
首先我们进入menuconfig
,输入log
,找到log output
修改info改为verbose,可以发现全部输出了
实际场景中的应用
对于我们带有显示屏的应用来说,我们可以搭配上一个按钮进行程序员调试触发,当点击按钮或者输入相应调试密码时,则将esp_log输出信息的等级调高(即可看到D
、V
),如下代码所示:
#include <stdio.h>
#include <stdbool.h> // stdbool.h是一个C标准库的头文件,它定义了bool类型和true/false常量,用于表示布尔值。
#include "esp_log.h"
const char *tagTraffic = "交通灯";
bool secretlog = true;
void app_main(void)
{
if (secretlog)
{
// 将日志输出等级调为VERBOSE
esp_log_level_set(tagTraffic, ESP_LOG_VERBOSE);
}
else
{
// 将日志输出等级调为INFO
esp_log_level_set(tagTraffic, ESP_LOG_INFO);
}
// E Error
ESP_LOGE(tagTraffic, "不亮了");
// W Warn
ESP_LOGW(tagTraffic, "灯泡寿命还有5%%"); // "%"是一个特殊字符,在字符串输出时需要用两个即"%%"才能让程序识别
// I Information
ESP_LOGI(tagTraffic, "交通灯寿命还有75%%");
// D Debug
ESP_LOGD(tagTraffic, "灯泡亮度1000,已使用200小时");
// V verbose
ESP_LOGV(tagTraffic, "灯丝还有5丝厚度,氧化程度0.23,寿命正常");
ESP_LOGE("人行横道", "有人闯红灯!");
ESP_LOGW("人行横道", "现在是红灯,禁止通行");
ESP_LOGI("人行横道", "20秒后是绿灯");
}