历史上的今天
今天是: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);执行空语句
上一篇:单片机中进制转换知识
下一篇:stm8L中断配置
史海拾趣
|
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 ...… 查看全部问答> |
|
现在想把原来在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 ...… 查看全部问答> |
|
我用万利的板子(STM32F103),和我自己做的板子(STM32F101C6T6)!测试 I2C 读写铁电FM24CL64。只要硬件连上 FM24,程序执行完 RCC 时钟初始化后,STM32 的 I2C 就一直处在 BUSY 状态下 ...… 查看全部问答> |




