完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前言 借调试宏的设计,梳理下宏的用法 重定向printf打印 嵌入式设备基本会配置RS232串口作为调试IO接口,假设底层串口单字节输出函数为SERIAL_PutChar(),利用fputc()和fputs()重定向printf函数 void fputc(int byte, FILE* stream) { (void)stream; SERIAL_PutChar(byte); } void fputs(const char *pstr, FILE *stream) { (void)stream; while(*pstr) { SERIAL_PutChar(*pstr++); } }这样在代码里面利用printf()函数输出的字符串都老老实实从调试串口出来 调试宏使用场景 某个C驱动模块,希望在调试时打印调试信息,而产品代码中不显示调试信息。 V1-单参数宏 #define DRV_DEBUG 1 #if DRV_DEBUG #define DRV_PRINT(x) printf(x) #else #define DRV_PRINT(x) #endif这个版本的DRV_PRINT(x)只能输出单变量——纯字符串 void foo() { DRV_PRINT("Driver Initialize Success!"); }不需要打印调试信息时,更改DRV_DEBUG宏定义 #define DRV_DEBUG 0当然也可以直接这样定义 #define DRV_PRINT printf但是如果宏调用了多个参数: void foo() { DRV_PRINT("Driver Initialize Success: ver %d.%d !", 1, 2); }产品代码中的#define DRV_PRINT(x) 将编译错误! 怎么办?一种处女座接受不了的做法,多加对括号 void foo() { DRV_PRINT(("Driver Initialize Success: ver %d.%d !", 1, 2)); }不管是调试代码还是产品代码,编译都OK v2-指定参数宏 待续 v3-参数数量可变宏 |
|
|
|
只有小组成员才能发言,加入小组>>
705 浏览 0 评论
1114 浏览 1 评论
2491 浏览 5 评论
2826 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2671 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
659浏览 9评论
667浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
789浏览 6评论
634浏览 5评论
678浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 13:03 , Processed in 0.560871 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号