完善资料让更多小伙伴认识你,还能领取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-参数数量可变宏 |
|
|
|
只有小组成员才能发言,加入小组>>
905 浏览 0 评论
1217 浏览 1 评论
2587 浏览 5 评论
2919 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2780 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1277浏览 3评论
235浏览 2评论
510浏览 2评论
418浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
494浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-9 13:26 , Processed in 0.991635 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号