嵌入式日志打印工具
log是一个用于嵌入式系统的日志打印工具,可以为日志定义不同的级别,然后设置日志工具的打印级别,可以进行日志打印的控制
此外,log通过letter shell的伴生对象功能,可以和letter shell结合,实现log和shell的绑定等功能
-
实现log写buffer函数
void uartLogWrite(char *buffer, short len) { serialTransmit(&debugSerial, (uint8_t *)buffer, len, 0x100); }
-
定义log对象
Log uartLog = { .write = uartLogWrite, .active = true, .level = LOG_DEBUG };
-
注册log对象
logRegister(&uartLog, NULL);
通过修改log.h文件中的宏,可以对log工具进行配置
宏 | 意义 |
---|---|
LOG_BUFFER_SIZE | log输出缓冲大小 |
LOG_USING_COLOR | 是否使用颜色 |
LOG_MAX_NUMBER | 允许注册的最大log对象数量 |
LOG_AUTO_TAG | 是否自动添加TAG |
LOG_END | log信息结尾 |
LOG_TAG | 自定添加的TAG |
LOG_TIME_STAMP | 设置获取系统时间戳 |
以下是log工具部分API的说明
宏声明,用于一般的打印输出
#define logPrintln(format, ...)
- 参数
format
输出格式...
可变参数
宏声明,错误日志级别输出
#define logError(fmt, ...)
- 参数
fmt
输出格式...
可变参数
宏声明,警告日志级别输出,函数原型及参数说明参考logError
宏声明,信息日志级别输出,函数原型及参数说明参考logError
宏声明,调试日志级别输出,函数原型及参数说明参考logError
宏声明,冗余日志级别输出,函数原型及参数说明参考logError
宏声明,断言
#define logAssert(expr, action)
- 参数
expr
表达式action
断言失败执行操作
注册log对象
void logRegister(Log *log, Shell *shell)
- 参数
log
log对象shell
关联的shell对象
设置日志级别
void logSetLevel(Log *log, LogLevel level)
- 参数
log
log对象level
日志级别
数据16进制打印
void logHexDump(Log *log, LogLevel level, void *base, unsigned int length)
- 参数
log
log对象level
日志级别base
数据基址length
数据长度
log工具可以结合letter shell的尾行模式,实现log和shell共用一个终端,但不影响shell交互体验
-
使用
shellWriteEndLine
事项log写buffer函数void uartLogWrite(char *buffer, short len) { if (uartLog.shell) { shellWriteEndLine(uartLog.shell, buffer, len); } }
-
定义log对象
Log uartLog = { .write = uartLogWrite, .active = true, .level = LOG_DEBUG };
-
注册log对象
logRegister(&uartLog, &shell);
log工具可以单独对某个文件的日志进行打印控制,使用时,在对应的.c文件中加入
#undef LOG_ENABLE
#define LOG_ENABLE 1
即可单独控制某个文件的日志开关