ba95366f61 | ||
---|---|---|
.. | ||
README.md | ||
log.c | ||
log.h |
README.md
日志下位机程序说明
相关文件
本下位机程序包含log.c
、log.h
两个文件,位于仓库lower/log
目录下,也可以下载发行版中的下位机程序压缩包后在log
文件夹中找到
配置项
-
标准库函数配置项
-
#define LOG_MEMCPY(dst,src,len)
:内存拷贝函数,默认使用string.h
中的memcpy
函数 -
#define LOG_SPRINTF(buf,fmt,...)
:格式化字符串打印函数,默认使用stdio.h
中的sprintf
函数 -
#define LOG_STRLEN(str)
:字符串长度计算函数,默认使用string.h
中的strlen
函数
注:标准库函数配置项是为了平台不支持标准库函数的情况设计的,一般无需修改
-
-
缓冲区大小配置项
-
#define LOG_MAX_LEN
:单条日志数据最大长度,包含日志标签、日志内容、时间戳、函数名等数据,建议不小于100 -
#define LOG_MAX_QUEUE_SIZE
:缓冲区能存放的最大日志条数,需根据日志打印频率确定,默认值为10
注:缓冲区总占用内存大小为上述两项的乘积,若短时间写入多条日志可能导致缓冲区溢出,后输出的日志将被丢弃
-
-
其他配置项
-
#define LOG_GET_MS()
:获取时间戳接口,需返回系统启动以来的毫秒数 -
#define LOG_GET_FUNC_NAME()
:获取宏展开位置的函数名,一般由编译器提供__FUNCTION__
宏实现,若平台不支持可替换为空字符串("")
-
#define LOG_ENABLE
:日志输出使能项,若注释掉则所有输出语句将被替换为空语句
-
日志输出接口
-
#define LOG_INFO(tag,msg,...)
:输出信息日志,tag
为日志标签,msg
为日志内容,日志内容中可包含格式化占位符,与后面的可变参数一起进行格式化输出例:
LOG_INFO("sys","code=%d",123); //输出的日志标签为"sys",日志内容为"code=123"
-
#define LOG_DEBUG(tag,msg,...)
:输出调试日志,用法与信息日志相同 -
#define LOG_WARN(tag,msg,...)
:输出警告日志,用法与信息日志相同 -
#define LOG_ERROR(tag,msg,...)
:输出错误日志,用法与信息日志相同
移植说明
-
将
log.h
和log.c
添加到工程目录中注:若不想新增
log.c
文件或编译器不支持多个源文件,可以将其中的内容放入任何一个源文件中 -
根据所用平台修改配置项
-
一般情况下只需修改时间戳配置
LOG_GET_MS
即可,其余参数可以保持默认 -
若下位机内存不够,或希望输出更长的日志,或希望一次性写入更多条日志,可修改缓冲区大小配置
LOG_MAX_QUEUE_SIZE
、LOG_MAX_LEN
-
若编译器不支持
__FUNCTION__
宏,需要将LOG_GET_FUNC_NAME
替换为空字符串 -
若编译器不支持标准库函数,需要自行实现各函数并替换到对应宏定义中
-
-
在需要使用日志的文件中引用
log.h
,然后调用接口进行日志输出即可,上位机会定时查看并移除日志缓冲区中的数据
注意事项
- 日志输出频率不能持续过高,上位机读取速度约为10条/s,若长时间高于该频率输出日志会使缓冲区溢出而导致日志丢失