4431|4

39

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

我也出道题目凑个热闹 [复制链接]

在编写程序时,经常应用printf()函数来打印一些调试信息,如果调用此函数的地方比较多,那么系统运行时输出这些调试信息占用的时间与空间是相当大的,当系统运行没有故障时,应该把这些调试信息去掉,以节约时间与空间资源,如果只有一处printf调用,那么直接删掉就行了,如果有十处,一百处,甚至一千处调用,又该如何来删掉呢?而且删除这些调试信息时有可能还是部分删除,不是全部删除,如何来控制这种有选择的删除?


***********************************************
看看我的做法,截取部分代码如下:

//my_dbg.h

//若要开启调试,则定义此宏,否则,注释掉即可,
//这样程序中所有my_printf语句自动消失。
//#define MY_DBG

void redundancy(const char *p,...);

#ifndef MY_DBG
  #define my_printf 1?(void)0:redundancy
#else
  #define my_printf prinf
#endif

//my_dbg.c

void redundancy(const char *p,...)
{
  p=p;
}

//main.c

int main(void)
{
   my_printf("hahaha~~~");//此处 my_printf等效于printf,可以放心使用。在本例中,此语句没有被编译。
   while(1);
   return 0;
}
此帖出自单片机论坛

最新回复

比如: OpenOCD的-d 3 Avrdude的-v -v -v -v 然后程序中更具不同的Debug Level输出不同等级的信息 这些程序运行在PC上,所以Debug_Level是变量,如果是嵌入式应用的话,可以定义一个DBG_LEVEL常量 个人觉得OpenOCD做的非常的好,可以参考一下OpenOCD的调试信息输出格式 原理很简单,#define宏中可以使用...和__VA_ARGS__  详情 回复 发表于 2008-6-11 09:01
点赞 关注
 

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

回复 楼主 的帖子

可以用宏开关控制,但感觉写起来代码不好看。

也可以定义不同级别的一组打印函数
Printf1
Printf2
...
Printfn
不用的时候,把相应的Printfn函数,直接return就行了。

Printfn内部调用sprintf,以及处理字符串输出。
此帖出自单片机论坛
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复 沙发 的帖子

明显该用条件编译
平时的printf()就是带了开关的宏即可
此帖出自单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复 板凳 的帖子

#define DEBUG_EN 1    // 0,1

#if DEBUG_EN > 0
    #define PRINTF printf
#else
    #define PRINTF
#endif
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复 5楼 的帖子

比如:
OpenOCD的-d 3
Avrdude的-v -v -v -v
然后程序中更具不同的Debug Level输出不同等级的信息
这些程序运行在PC上,所以Debug_Level是变量,如果是嵌入式应用的话,可以定义一个DBG_LEVEL常量

个人觉得OpenOCD做的非常的好,可以参考一下OpenOCD的调试信息输出格式
原理很简单,#define宏中可以使用...和__VA_ARGS__
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表