link-scope/lower/log
兰博文 ba95366f61 更新readme 2022-09-27 15:55:05 +08:00
..
README.md 更新readme 2022-09-27 15:55:05 +08:00
log.c 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
log.h 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00

README.md

日志下位机程序说明


相关文件

本下位机程序包含log.clog.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,...):输出错误日志,用法与信息日志相同


移植说明

  1. log.hlog.c添加到工程目录中

    注:若不想新增log.c文件或编译器不支持多个源文件,可以将其中的内容放入任何一个源文件中

  2. 根据所用平台修改配置项

    • 一般情况下只需修改时间戳配置LOG_GET_MS即可,其余参数可以保持默认

    • 若下位机内存不够,或希望输出更长的日志,或希望一次性写入更多条日志,可修改缓冲区大小配置LOG_MAX_QUEUE_SIZELOG_MAX_LEN

    • 若编译器不支持__FUNCTION__宏,需要将LOG_GET_FUNC_NAME替换为空字符串

    • 若编译器不支持标准库函数,需要自行实现各函数并替换到对应宏定义中

  3. 在需要使用日志的文件中引用log.h,然后调用接口进行日志输出即可,上位机会定时查看并移除日志缓冲区中的数据


注意事项

  • 日志输出频率不能持续过高上位机读取速度约为10条/s若长时间高于该频率输出日志会使缓冲区溢出而导致日志丢失