历史上的今天
返回首页

历史上的今天

今天是:2025年03月29日(星期六)

2019年03月29日 | stm8中断打印调试信息的宏定义

2019-03-29 来源:eefocus

在中断服务函数中调用了一个奇怪的函数irq_print()

...

INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler, 4)

{

  g_rtc_report = 1;                       //定时器唤醒标志制1, 进入4号中断

 

  RTC_WakeUpCmd(ENABLE);                  // 唤醒使能

  

  irq_print("RTC interrupt reportn");   //打印由RTC唤醒成功调试信息

  RTC_ClearITPendingBit(RTC_IT_WUT);    //清除中断标志位

}

...

在预处理发现了它的定义,这是调试信息的宏定义

....

#include

 

//#define IRQ_DEBUG_PRINT

#ifdef IRQ_DEBUG_PRINT

#define irq_print(format,args...) printf(format, ##args)

#else

#define irq_print(format,args...) do{} while(0);

#endif

...


拿来干嘛的?


我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。


分析

1.要调用调试语句时,不注释定义的第一行 ,如果实现相应功能,打印格式参数


 #define IRQ_DEBUG_PRINT


此时执行下列两条语句:


#ifdef IRQ_DEBUG_PRINT

#define irq_print(format,args...) printf(format, ##args)


 


当主函数中调用irq_print()时


就等价替换  printf(format, ##args)   打印调试信息。


 


2.当不想调用调试语句时,注释定义的第一行 ,


//#define IRQ_DEBUG_PRINT


此时执行下列三条语句:


#else

#define irq_print(format,args...) do{} while(0);

#endif


当主函数中调用irq_print()时


就等价替换do{} while(0);执行空语句

推荐阅读

史海拾趣

Daniel Woodhead公司的发展小趣事

随着公司业务的不断拓展,Daniel Woodhead公司意识到人才是企业发展的核心。因此,公司加大了对研发团队的投入,引进了一批业界顶尖的技术人才。这些人才的加入不仅为公司带来了更多的创新思路,还提高了整体的技术水平。在团队的共同努力下,公司不断推出具有竞争力的新产品,进一步巩固了市场地位。

达晶微(CREATEK)公司的发展小趣事

为了进一步扩大市场份额,达晶微积极拓展国际市场。公司在深圳、上海、苏州、台湾、青岛、长沙、韩国、北美等地设立了销售办事处,与当地企业建立了紧密的合作关系。同时,达晶微还积极寻求与国际知名企业的合作机会,通过引进先进技术和管理经验,不断提升自身实力。

EDAL公司的发展小趣事

EDAL公司始终秉持持续创新和客户至上的理念。公司不断投入研发资源,推出新的EDA产品和解决方案,满足客户的多样化需求。同时,EDAL公司还建立了完善的客户服务体系,为客户提供全方位的技术支持和解决方案。这些举措不仅增强了客户对EDAL公司的信任和忠诚度,还为公司的长期发展奠定了坚实的基础。

ECM [ECM Electronics Limited.]公司的发展小趣事

ECM Electronics Limited.自创立之初,就注重技术创新。公司投入大量研发资金,专注于开发高效、节能的电子产品。通过不断的技术迭代和产品创新,ECM成功推出了一系列具有竞争力的产品,逐渐在市场上建立了良好的口碑。同时,公司还积极与高校和科研机构合作,引进先进技术,为公司的持续发展提供了强大的技术支撑。

鞍山圣罗佳(ASL)公司的发展小趣事

随着公司规模的扩大和产品线的丰富,ECM Electronics Limited.开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,将产品出口到多个国家和地区。为了更好地服务全球客户,公司还设立了海外办事处和研发中心,加强与国际市场的联系和合作。通过国际化战略的实施,ECM进一步提升了品牌知名度和市场竞争力。

Cermetek Microelectronics公司的发展小趣事

在电子行业快速发展的背景下,Cermetek Microelectronics公司深知创新的重要性。公司不断加大对研发的投入,引进先进的研发设备和人才,持续推出具有创新性的微电子产品。这些新产品不仅具有更高的性能和更低的功耗,还更加符合市场需求,为公司带来了更多的商业机会。

问答坊 | AI 解惑

单片机初学者,请进

本人是一毕业就去了深圳创业,算算时间也有差不多5年了吧,期间一直在做单片机方面的项目开发工作,现在在做嵌入式ARM的相关开发,单片机带给人的乐趣是无穷的。我个人感觉这个行业还是很有前景的。希望在校的大学生们好好利用宝贵时间多学点知识, ...…

查看全部问答>

汽车电子资料大放送~资料、文章、方案...敬请下载~

1.大众车系元件功能与检测资料下载>>https://bbs.eeworld.com.cn/thread-281-1-52.html 2.DS2705主控制器数据资料>> https://bbs.eeworld.com.cn/thread-25994-1-16.html 3.CAN总线在混和动力汽车电机控制系统中的应用>> https://bbs.eeworld ...…

查看全部问答>

SPI核怎么用啊

sopc中的spi和仿真无波形,郁闷~~~~~~~…

查看全部问答>

mc39i tcp只能收发不了

使用外置协议栈,UDP,收发正常, TCP 3次握手过后 tcp只能接收.发送到 服务端的数据,收不到包, 发收的整个包 协议解析正常…

查看全部问答>

如何定制支持MFC的SDK

现在想把原来在WINCE5.0开发的MFC程序移植到WINCE6.0上面, 但一直不能成功.特来请教下: 我现在的环境是VS2005+WINCE6.0  之前在网上找了下, 说是WINCE6.0默认是不支持MFC的.要手动添加几个DLL文件. 现在我也把 MFC80ENU.DLL加进去了, ...…

查看全部问答>

passthru发送原始帧,NdisFreeBuffer蓝屏

改写的passthru 在ndis5.1下实现发送原始帧,出现一个奇怪的问题。 PtDispatch中调用发送函数SendRawData,里面给自己的包做了一个标记, 完了以后在PtSendComplete里释放自己申请的内存。结果在调用NdisFreeBuffer的时候蓝屏。 具体描述如下: ...…

查看全部问答>

急,Microsoft SQL Server CE 2.0安装问题

请问各位大哥,如题,提示错误信息:SQL Server CE Server Tools is compatible only with SQL Server 2000 Service Pack 1 and higher.When you install SQL Server CE Server Tools on a computer running both IIS and SQL Server 2000, ensure the ...…

查看全部问答>

STM32I2C加电后一直是BUSY

我用万利的板子(STM32F103),和我自己做的板子(STM32F101C6T6)!测试 I2C 读写铁电FM24CL64。只要硬件连上 FM24,程序执行完 RCC 时钟初始化后,STM32 的 I2C 就一直处在 BUSY 状态下 ...…

查看全部问答>

串口调试工具发送文件和字符串的区别,香水看看

                                 我用串口调试工具来调试STM107的虚拟串口例程,发送同样字节的数据,使用串口调试工具下面的字符串输入就正常,而 ...…

查看全部问答>

单片机测量电流电压

用单片机做一个电压,电流检测装置。 (1)电压的范围:DC10-36V,要求精度1%以内。 (2)电流DC 0.1-3A,要求精度1%以内。         怎么控制这个精度问题?请各位大侠给点意见!…

查看全部问答>