Zephyr RTOS 提供了完善的日志系统,支持不同级别的日志输出,便于开发者进行调试和问题追踪。
Zephyr 定义了以下几种日志级别:
| 日志级别 | 宏定义 | 描述 | 典型用途 |
|---|---|---|---|
| ERROR | LOG_ERR() |
错误信息 | 系统关键错误,需要立即处理 |
| WARNING | LOG_WRN() |
警告信息 | 潜在问题,不影响系统运行但需要注意 |
| INFO | LOG_INF() |
普通信息 | 系统运行状态信息 |
| DEBUG | LOG_DBG() |
调试信息 | 开发调试阶段的详细信息 |
#include <logging/log.h>
LOG_MODULE_REGISTER(my_module, LOG_LEVEL_DBG);
void my_function(void) {
LOG_ERR("This is an error message");
LOG_WRN("This is a warning message");
LOG_INF("This is an info message");
LOG_DBG("This is a debug message");
}
LOG_MODULE_REGISTER 注册模块,并指定默认日志级别。
可以通过以下方式控制日志级别:
LOG_MODULE_REGISTER(module_name, LOG_LEVEL_INF)CONFIG_LOG_DEFAULT_LEVEL=3 (0:OFF, 1:ERR, 2:WRN, 3:INF, 4:DBG)log_filter_set(NULL, LOG_LEVEL_DBG)Segger RTT (Real Time Transfer) 是一种高效的调试输出技术,相比传统串口输出具有以下优势:
# 在 prj.conf 中添加以下配置
CONFIG_USE_SEGGER_RTT=y
CONFIG_RTT_CONSOLE=y
CONFIG_LOG_BACKEND_RTT=y
CONFIG_LOG_PRINTK=y
#include <logging/log.h>
#include <sys/printk.h>
LOG_MODULE_REGISTER(rtt_demo, LOG_LEVEL_DBG);
void main(void) {
LOG_INF("Starting RTT demo...");
printk("This message goes to RTT as well\n");
LOG_DBG("Debug information can be captured");
}
LOG_LEVEL_DBG 获取详细调试信息LOG_LEVEL_INF 或更高