stm8中断打印调试信息的宏定义

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

...
INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler, 4)
{
  g_rtc_report = 1;                       //定时器唤醒标志制1, 进入4号中断

  RTC_WakeUpCmd(ENABLE);                  // 唤醒使能
  
  irq_print("RTC interrupt report\n");   //打印由RTC唤醒成功调试信息
  RTC_ClearITPendingBit(RTC_IT_WUT);    //清除中断标志位
}
...

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

....
#include <stdio.h>

//#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);执行空语句

猜你喜欢

转载自blog.csdn.net/luoyir1997/article/details/81609957
今日推荐