环球热文:简单的嵌入式设备日志输出模块log.h
扫描关注一起学嵌入式,一起学习,一起成长
相信大多数嵌入式开发者都会碰到对程序进行调试或者查找BUG的情况,常见的两种方法都是仿真和通过日志进行的。
(资料图)
有条件仿真的是更好,单是在编写嵌入式软件程序过程中,并不是所有的硬件都支持仿真或者方便仿真,这样大多数方法便是加打印信息进行找问题。
打印的接口有很多种,比如串口,网络,显示等等。简单的硬件开发串口估计是最常用的。这里简单记录下一种日志打印方法。
目的:
基本知识:
C语言中的__FILE__、LINE__和__FUNCTION
1、FILE用于指示本行代码所在源文件的文件名;
2、__LINE__用于指示本行代码所在源文件中的位置(行数);
3、__FUNCTION__用于指示本行代码所在函数(函数名);
注:
1)"FILE"、"LINE"、"FUNCTION"等均大小写敏感
2)支持需要添加头文件#include
源码
#defineDEBUG_EN(1u)#if(DEBUG_EN)#defineDEBUG_MAX_SIZE512externcharszBuf[DEBUG_MAX_SIZE];#defineDEBUG_INFO(format,...)do{\u16unLen=0;\unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE,"[INFO][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);\unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen,format,##__VA_ARGS__);\usart1_send_buf_with_txe((u8*)szBuf,unLen);\}while(0)#defineDEBUG_WARN(format,...)do{\u16unLen=0;\unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE,"[WARN][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);\unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen,format,##__VA_ARGS__);\usart1_send_buf_with_txe((u8*)szBuf,unLen);\}while(0)#defineDEBUG_ERR(format,...)do{\u16unLen=0;\unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE,"[ERR][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);\unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen,format,##__VA_ARGS__);\usart1_send_buf_with_txe((u8*)szBuf,unLen);\}while(0)#elif#defineDEBUG_INFO(...)#defineDEBUG_WARN(...)#defineDEBUG_ERR(...)#endif
源码主要使用宏定义的方式,为了支持文件、行号,函数等等,不能使用单独的函数进行定义。具体原因可以思考下,不过多赘述。
C文件目前只有一个数组定义char szBuf[DEBUG_MAX_SIZE];。
为了兼容,INFO,WARN和ERR三个共用一个buf,声明全局变量更主要的一个原因是使用了串口的中断发送函数usart1_send_buf_with_txe,而不是循环发送完成再退出,这里传输是进行指针传递的,发送使用中断的好处就是高效率,不耽误其他程序跑。
当然移植的时候完全可以根据自己的接口和实现方式进行更换。
实现效果
[INFO][..\source\main.c][@main][#36]:testStr[111],testInt[111],testHex[0x000015BC][WARN][..\source\main.c][@main][#37]:testStr[111],testInt[111],testHex[0x000015BC][ERR][..\source\main.c][@main][#38]:testStr[111],testInt[111],testHex[0x000015BC]
觉得文章不错,点击“分享”、“赞”、“在看” 呗!
关键词:
相关阅读
-
环球热文:简单的嵌入式设备日志输出模...
扫描关注一起学嵌入式,一起学习,一起成长相信大多数嵌入式开发者... -
网贷逾期一般催收多久才会停止?逾期催...
随着互联网金融的快速发展,网贷已经成为了一种非常普遍的借贷方式... -
焦点关注:电脑如何测网速和ping_电脑如...
大家好,小榜来为大家解答以上的问题。电脑如何测网速和ping,电脑如... -
当前热文:规模80亿元 达晨财智新基金...
上证报中国证券网讯6月2日,达晨财智宣布新一期综合基金创程基金首... -
气雾型脱漆剂 关于气雾型脱漆剂介绍 ...
1、《气雾型脱漆剂》是2019年05月28日实施的一项行业标准。2、。 -
最新资讯:新车报讯:电动屋YOUNG光小新...
汽车现在已经越来越普及,基本上都快实现每家每户都有汽车了,那么...
精彩放送
-
环球热文:简单的嵌入式设备日志输出模...
扫描关注一起学嵌入式,一起学习,一起成长相信大多数嵌入式开发者... -
网贷逾期一般催收多久才会停止?逾期催...
随着互联网金融的快速发展,网贷已经成为了一种非常普遍的借贷方式... -
焦点关注:电脑如何测网速和ping_电脑如...
大家好,小榜来为大家解答以上的问题。电脑如何测网速和ping,电脑如... -
当前热文:规模80亿元 达晨财智新基金...
上证报中国证券网讯6月2日,达晨财智宣布新一期综合基金创程基金首... -
气雾型脱漆剂 关于气雾型脱漆剂介绍 ...
1、《气雾型脱漆剂》是2019年05月28日实施的一项行业标准。2、。 -
最新资讯:新车报讯:电动屋YOUNG光小新...
汽车现在已经越来越普及,基本上都快实现每家每户都有汽车了,那么... -
环球今头条!荷兰砖是透水砖吗_荷兰砖与...
1、人行道方砖起源于荷兰,所以统称为荷兰砖,也叫面包砖、水泥砖、... -
瑜亮之争_瑜亮_焦点精选
1、瑜亮情结指的是诸葛亮与周瑜相爱相杀的关系,后世便把两个出身地... -
免费ppt网站有哪些
大家好,小乐来为大家解答以上的问题。免费ppt网站有哪些这个很多人... -
20人上榜!2022年度泰安市首席技师名单...
泰安日报社·最泰安讯为大力实施人才强市战略,加强高技能人才队伍...