如何为Arduino代码提供条件编译?
How to provide conditional compilation to Arduino code?
我正在编写基于 Arduino 的代码,我需要为串行命令提供条件编译以在串行终端上打印数据。
我在代码的开头使用“#define DEBUG”,如果它被定义,那么所有的串口打印命令都会被执行,并且串口监视器上会有数据,否则,它会跳过串口打印命令代码。
现在,我需要开发一个代码,以便用户可以提供输入是否在代码中包含“#define DEBUG”语句,选择 DEBUG mode/non DEBUG 模式以在串行终端上打印数据.意思是需要给条件编译语句提供条件。
下面是我的代码
#define DEBUG // Comment this line when DEBUG mode is not needed
void setup()
{
Serial.begin(115200);
}
void loop()
{
#ifdef DEBUG
Serial.print("Generate Signal ");
#endif
for (int j = 0; j <= 200; j++)
{
digitalWrite(13, HIGH);
delayMicroseconds(100);
digitalWrite(13, LOW);
delayMicroseconds(200 - 100);
}
}
目前,当我不需要在终端上打印串行命令时,我正在手动注释“#define DEBUG”语句。
请推荐。
感谢和问候...
创建一个变量:
#define DEBUG_ON 1
#define DEBUG_OFF 0
byte debugMode = DEBUG_OFF;
将您对 Serial.print 的呼叫用:
if (debugMode == DEBUG_ON) {
Serial.print("Debugging message");
}
使用用户的输入,切换调试模式 to/from DEBUG_ON/DEBUG_OFF.
GvS 的回答很好。但是,如果您想在多个位置打印,那么使用大量 if 语句可能会降低可读性。你可能想像这样定义一个宏函数。
#define DEBUG_ON 1
#define DEBUG_OFF 0
byte debugMode = DEBUG_OFF;
#define DBG(...) debugMode == DEBUG_ON ? Serial.println(__VA_ARGS__) : NULL
这样,您可以直接调用 DBG()
而无需 if 语句。它仅在 debugMode
设置为 DEBUG_ON
.
时打印
void loop()
{
DBG("Generate Signal ");
for (int j = 0; j <= 200; j++)
{
DBG(j);
}
DBG("blah blah");
}
我正在编写基于 Arduino 的代码,我需要为串行命令提供条件编译以在串行终端上打印数据。
我在代码的开头使用“#define DEBUG”,如果它被定义,那么所有的串口打印命令都会被执行,并且串口监视器上会有数据,否则,它会跳过串口打印命令代码。
现在,我需要开发一个代码,以便用户可以提供输入是否在代码中包含“#define DEBUG”语句,选择 DEBUG mode/non DEBUG 模式以在串行终端上打印数据.意思是需要给条件编译语句提供条件。
下面是我的代码
#define DEBUG // Comment this line when DEBUG mode is not needed
void setup()
{
Serial.begin(115200);
}
void loop()
{
#ifdef DEBUG
Serial.print("Generate Signal ");
#endif
for (int j = 0; j <= 200; j++)
{
digitalWrite(13, HIGH);
delayMicroseconds(100);
digitalWrite(13, LOW);
delayMicroseconds(200 - 100);
}
}
目前,当我不需要在终端上打印串行命令时,我正在手动注释“#define DEBUG”语句。
请推荐。
感谢和问候...
创建一个变量:
#define DEBUG_ON 1
#define DEBUG_OFF 0
byte debugMode = DEBUG_OFF;
将您对 Serial.print 的呼叫用:
if (debugMode == DEBUG_ON) {
Serial.print("Debugging message");
}
使用用户的输入,切换调试模式 to/from DEBUG_ON/DEBUG_OFF.
GvS 的回答很好。但是,如果您想在多个位置打印,那么使用大量 if 语句可能会降低可读性。你可能想像这样定义一个宏函数。
#define DEBUG_ON 1
#define DEBUG_OFF 0
byte debugMode = DEBUG_OFF;
#define DBG(...) debugMode == DEBUG_ON ? Serial.println(__VA_ARGS__) : NULL
这样,您可以直接调用 DBG()
而无需 if 语句。它仅在 debugMode
设置为 DEBUG_ON
.
void loop()
{
DBG("Generate Signal ");
for (int j = 0; j <= 200; j++)
{
DBG(j);
}
DBG("blah blah");
}