高手常用的3个开源库,让单片机开发事半功倍
Posted 小麦大叔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高手常用的3个开源库,让单片机开发事半功倍相关的知识,希望对你有一定的参考价值。
点击上方“小麦大叔”,选择“置顶/星标公众号”
福利干货,第一时间送达
大家好,我是小麦,日志系统在系统开发和调整过程中的重要性,
大家应该都清楚,特别是项目出问题之后,却没有日志可以帮忙定位问题,就非常令人痛苦。
因为我们不可能一直通过调试器去单步调试程序,所以设备的运行日志显得尤为重要。
通常我们对日志有这些要求:
不同的日志级别(
Debug
,Warning
,Info,
Error
,Fatal
);日志打印要和
printf
一样简单易用;能够设置日志级别;
占用空间小;
可配置,甚至可以禁用日志;
基于不同日志级别,支持颜色高亮;
可以自定义配置,时间戳;
支持RTOS;
以上是比较基本的功能,但是在嵌入式设备中,有的时候我们希望可以保存设备的运行日志,我们需要以下的一些功能;
支持多种访问方式,比如串口终端,保存到嵌入式文件系统中;
支持shell命令行通过串口终端进行访问;
以上这些需求不一定会全部实现。
除了常用的log4c
,log4cpp
,下面给大家推荐3个非常不错的开源日志库,比较适合用在单片机的项目中。从开始的轻量,到后面的功能丰富,最后一个很强大,所以请耐心看到最后。
rxi_log
项目地址:https://github.com/rxi/log.c
基于 C99 实现的简单日志库,具体输出如下所示;
具体用法
将源码中的log.c
和log.h
集成到你的项目中即可,需要打印日志的话,调用下面的API即可,如下所示;
log_trace(const char *fmt, ...);
log_debug(const char *fmt, ...);
log_info(const char *fmt, ...);
log_warn(const char *fmt, ...);
log_error(const char *fmt, ...);
log_fatal(const char *fmt, ...);
除了这些API,还有log_set_quiet
,log_set_lock
,LOG_USE_COLOR
等等,详情请看原项目。
ulog
项目地址:https://github.com/rdpoor/ulog
uLog 为嵌入式微控制器或任何资源有限的系统提供结构化的日志记录机制。它继承了流行的 Log4c
和 Log4j
平台背后的一些概念,但开销更低。
uLog 的一些特点:
uLog 易于集成到几乎任何环境中,由一个头文件和一个源文件组成,并且是用纯 C 编写的。
uLog 提供熟悉的严重级别(CRITICAL、ERROR、WARNING、INFO、DEBUG、TRACE)。
uLog 支持多个用户定义的输出(控制台、日志文件、内存缓冲区等),每个输出都有自己的报告阈值级别。
uLog 是具有最小依赖性的“积极独立”,仅需要 stdio.h、string.h 和 stdarg.h。
当您不使用 uLog 时,它不会妨碍您:如果 ULOG_ENABLED 在编译时未定义,则不会生成日志记录代码。
uLog 已经过很好的测试。有关详细信息,请参阅随附的 ulog_test.c 文件。
EasyLogger
项目地址:https://github.com/armink/EasyLogger
这个项目我用了很长时间,强烈推荐,是RT-Thread大佬的作品,已经集成到RTOS的内部了,支持的功能非常丰富,基本满足各种开发的需求。
特点如下:
轻量,ROM<1.6K, RAM<0.3K;
支持多种访问模式(例如:终端、文件、数据库、串口、485、Flash...);
日志内容可包含级别、时间戳、线程信息、进程信息等;
线程安全,并支持 异步输出 及 缓冲输出 模式;
支持多种操作系统(RT-Thread、UCOS、Linux、Windows...),也支持裸机平台;
日志支持 RAW格式 ,支持 hexdump ;
支持按 标签 、 级别 、 关键词 进行动态过滤;
各级别日志支持不同颜色显示;
扩展性强,支持以插件形式扩展新功能。
以上只是这个项目的其中一部分,具体可以参考项目地址。
summary
希望大家在平常的开发中,重视日志的使用,每一个开发阶段设置不同级别的日志,不同的模块也分别设置模块的日志,这样方便定位出现一些问题,快速解决,提高效率。本期的文章就到这里,我们下期再见。
—— The End ——
往期推荐
按上方名片关注我
你点的每个好看,我都认真当成了喜欢
以上是关于高手常用的3个开源库,让单片机开发事半功倍的主要内容,如果未能解决你的问题,请参考以下文章