文档章节

嵌入式C语言——设计调试宏

codeinsight
 codeinsight
发布于 2014/03/30 22:59
字数 397
阅读 470
收藏 4

前言

借调试宏的设计,梳理下宏的用法

重定向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-参数数量可变宏

待续

© 著作权归作者所有

codeinsight
粉丝 0
博文 1
码字总数 397
作品 0
成都
私信 提问
C语言嵌入式系统编程修炼之背景篇

这是我13年前创作和发表在互联网上的文章,这么多年过去了,这篇文章仍然在到处传播。现在贴回Linuxer公众号。 全文目录: C语言嵌入式系统编程修炼之道——背景篇 C语言嵌入式系统编程修炼之...

jus3ve
2017/12/29
0
0
C语言嵌入式系统编程修炼之性能优化

这是我13年前创作和发表在互联网上的文章,这么多年过去了,这篇文章仍然在到处传播。现在贴回Linuxer公众号。 全文目录: C语言嵌入式系统编程修炼之道——背景篇 C语言嵌入式系统编程修炼之...

jus3ve
2017/12/31
0
0
在C语言中用ASSERT调试的八个技巧

在C语言中用ASSERT调试的八个技巧 Mindy2017-02-0256 阅读 技巧C语言调试 C语言中的 ASSERT (断言)宏是 嵌入式软件 开发人员可以使用的最好的调试工具之一。虽然ASSERT功能强大,但我很少看到...

Mindy
2017/02/02
0
0
C语言嵌入式系统编程修炼之软件架构篇

这是我13年前创作和发表在互联网上的文章,这么多年过去了,这篇文章仍然在到处传播。现在贴回Linuxer公众号。 全文目录: C语言嵌入式系统编程修炼之道——背景篇 C语言嵌入式系统编程修炼之...

jus3ve
2017/12/29
0
0
C语言嵌入式系统编程修炼之内存操作

这是我13年前创作和发表在互联网上的文章,这么多年过去了,这篇文章仍然在到处传播。现在贴回Linuxer公众号。 全文目录: C语言嵌入式系统编程修炼之道——背景篇 C语言嵌入式系统编程修炼之...

jus3ve
2017/12/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
39分钟前
5
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
9
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
15
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
3.3K
25

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部