分享:用于Arduino代码调试的宏

2014-03-231.8万
AI 快速预览详细 收起
本文介绍了用于Arduino代码调试的一组宏,包括DBG_BEGIN、DBG_ASSERT、DBG_WARNING、DBG_PRINT_FUNNAME等。这些宏可以帮助开发者通过串口打印进行详细的调试,并在调试完成后轻松关闭调试信息,使代码更简洁。样例展示了如何在debug状态下使用这些宏进行调试输出。


对于复杂一些的代码,往往需要通过串口打印进行调试,下面的宏将方便调试过程,调试OK了,将#define _DEBUG 1 改为 #define _DEBUG 0即可,代码就变干净了。

1 调试宏:
  1. #define _DEBUG 1   //1 = debug;  0 = normal
  2. #if _DEBUG
  3.     #define DBG_BEGIN(baud)  { Serial.begin(baud); while(!Serial); }
  4.     /*assert */
  5.     #define DBG_ASSERT(A) if( !(A) ) { Serial.print("ERR:F=");Serial.print(__FILE__);Serial.print(" L=");Serial.println(__LINE__); delay(1000); while(1);}
  6.     #define DBG_WARNING(A) if( !(A) ) { Serial.print("WARNING:F=");Serial.print(__FILE__);Serial.print(" L=");Serial.println(__LINE__); delay(500);}
  7.     /*print information*/
  8.     #define DBG_PRINT_FUNNAME  { Serial.print("INFO:Fun=");Serial.println(__func__);}  //put it into the begin of function, you can trace the flow of program
  9.     #define DBG_PRINT(info)  { Serial.print(info);}
  10.     #define DBG_PRINTLN(info)  { Serial.println(info);}
  11.     #define DBG_PRINTLN_VAR(var, type)  { Serial.print(#var);  Serial.print("=");Serial.print(var, type); Serial.print(" @"); Serial.println(type);}
  12. #else
  13.     #define DBG_BEGIN
  14.     #define DBG_ASSERT(A)
  15.     #define DBG_WARNING(A)
  16.     #define DBG_PRINT_FUNNAME
  17.     #define DBG_PRINT(info)
  18.     #define DBG_PRINTLN(info)
  19.     #define DBG_PRINTLN_VAR(val, type)
  20. #endif
复制代码




2、使用样例
  1. int led = 13;
  2. void setup()
复制代码



3、样例在debug状态下色输出
INFO:Fun=softBlink
period=300 @10
times=11 @2
ERR:F=Blink.ino L=50



创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
Angleo
Angleo
样例程序似乎不太完整?
Youyou
Youyou
很方便调试,收藏了。
nemon
nemon

- 没有更多了 -