第5篇 zephyr 日志系统logging
目录
本学笔记基于zephyr 工程版本 2.2.99,主机环境为ubuntu18.04,开发平台 nrf52840dk_nrf52840
摘要
对于一个系统来说,调试信息非常重要。调试信息可以让我们了解当前程序的运行状态,可以将任何状态打印出来。一个优秀的日志系统非常重要。zephyr包含了一个非常强大的日志系统。输出日志时的执行时间对程序的逻辑会产生影响,导致不可预期的后果。而zephyr强大的logging系统,输出一行日志,因为缓冲区的存在,几乎不占用执行时间(只占用数据拷贝的时间),日志先缓存到缓冲区中,然后在系统空闲时,将缓冲区的数据输出到后端设备(如串口,网络,rtt等)。
1 使能logging
通过menuconfig使能logging系统
2 头文件
#include <logging/log.h>
3 定义模块名称
3.1 定义时指定输出等级
LOG_MODULE_REGISTER(foo, LOG_LEVEL_ERR);
输出等级包括 0, LOG_LEVEL_ERR, LOG_LEVEL_WRN, LOG_LEVEL_INFO, LOG_LEVEL_DBG
3.2 使用默认等级输出
LOG_MODULE_REGISTER(foo);
默认等级在menuconfig中设置。
4 输出LOG
4.1 LOG_DBG
LOG_DBG("test");
当指定模块等级为LOG_LEVEL_DBG时有输出
4.2 LOG_INFO
LOG_INFO("test");
当指定模块等级为LOG_LEVEL_INFO, LOG_LEVEL_DBG时有输出
4.3 LOG_WRN
LOG_WRN("test");
当指定模块等级为LOG_LEVEL_WRN, LOG_LEVEL_INFO, LOG_LEVEL_DBG时有输出
4.4 LOG_ERR
LOG_ERR("test");
当指定模块等级为LOG_LEVEL_ERR, LOG_LEVEL_WRN, LOG_LEVEL_INFO, LOG_LEVEL_DBG时有输出
5 printk
熟悉Linux驱动开发的比较了解printk,zephyr中也可以使用printk。
printk函数定义在zephyr/lib/os/printk.c中
6 参考链接
https://docs.zephyrproject.org/latest/reference/logging/index.html#logging-in-a-module