TDK · 产品与技术资料捷比信主站 · 综合产品与服务
TDK通信射频与电源电感
捷比信产品咨询0755-29796190

干货!实施自己的日志系统

在嵌入式应用程序的开发过程中,日志系统非常重要!尤其是在生产过程中偶尔存在与当前执行环境相关的错误时,如果没有日志系统来跟踪问题,则很难重现该问题。因此,实现自己的日志系统非常有帮助,而且很有必要。
在软件模型中,日志系统通常被编译成库文件。应用程序直接调用库中提供的API接口函数来记录日志信息。
然后,要实现自己的日志记录系统,您需要处理三个问题:(1)日志记录API函数的设计。 (2)缓存日志信息。
(3)日志信息的持久性,即将其写入本地文件系统。本文主要解释第一个问题:日志API函数的设计。
首先编写代码:测试知识点1.字符串文字拼接在C语言中,有多种拼接字符串的方法:memcpy,strcpy,strcat,sprintf等。在代码的第19行中,使用了C语言中的字符串文字拼接的方法,“%s:%d(%s)”格式“” ``这3个字符串被拼接成一个字符串。
添加:在日志记录系统代码中,有些地方需要格式化字符串。使用sprintf最方便,但效率最低!您还可以使用一些第三方库来实现字符串格式,例如:fmtlib,facebook的愚蠢格式,google的Abseil StrFormat。
当然,最好的方法是自行格式化特定类型的数据,这可以显着提高日志记录系统的吞吐量。 Next本文将讨论代码的这一部分。
2.可变参数每个人都知道printf函数是通过可变参数机制实现的。变量参数可以如下定义和使用:(1)不带参数名称(2)有参数名称第20行代码使用__VA_ARGS__表示宏定义参数中的三个点(...),它们是变量参数。
假设为“ ##”。如果您调用:debug2(“ code =%d”,100);此调用没有问题。
如果您调用:debug2(“ hello”);当您在此处调用时,格式后没有任何参数,则会发生编译错误,因为在宏替换后,它变成了printf(“ hello”,),第一个参数后还有一个逗号,因此将报告错误。如果您调用:debug3(“ hello,world!”);那么就没有问题,因为debug3具有“ ##”在变量参数__VA_ARGS__的前面,当编译器发现未传入任何参数时,它将在格式之后自动删除逗号,因此编译正常。
3.宏定义中的#和###的功能是执行“字符”操作。预处理期间的宏参数。
例如,“串行化”:##的功能是“胶粘”或“粘贴”。预处理过程中的两个宏参数。
例如:我想知道本文是否会对您有所帮助?免责声明:本文内容经21ic授权后发布。版权属于原始作者。
该平台仅提供信息存储服务。本文仅代表作者的个人观点,并不代表该平台的立场。
如有任何疑问,请与我们联系,谢谢!。

相关资料

DIY |电路与艺术的结合储存量激增?据说iPhone 13拥有1TB版本销售过程中可能会有一些自动化或人工智能LeddarTech很荣幸成为2020年9月1日至3日举行的2020年美国智能交通展览会的赞助商和主办方。Beyond Limits在C轮融资中筹集了1.33亿美元,以促进人工智能技术的全球扩展您对锂离子电池的防爆电池技术了解多少?设法在Apple SoC上运行基于Linux的系统5G尚未完全部署,6G战争悄然点燃您知道锂电池电源管理系统的一般情况吗?2020年大学生职业薪资排名表意法半导体(STMicroelectronics)与Microsoft®合作使用STM32Cube生态系统来推进智能物联网设备的开发云顶新药宣布,Nefecon被国家医疗产品管理局药品评估中心宣布为突破性治疗产品Neo QLED屏幕?三星的新型8K智能电视超赞! !选择测试和测量仪器时应考虑什么?如何使用辐射测试设备?铭S GeForce RTX 3060 Ti iCraft OC:这是您想要的游戏核心Ams推出了全球首款符合AEC-Q102和ISO 26262标准的VCSEL泛光照明器,为车载传感应用提供了卓越的红外照明海信集团的破产重组是否会影响民航业?沉阳自动化学院微纳研究组在微机器人研究领域取得了新突破超声波焊接后产品变形怎么办孙政一:两年内不会量产方向盘车