arduino - 如何为 Arduino 代码提供条件编译?
问题描述
我正在研究基于 Arduino 的代码,其中我需要为串行命令提供条件编译以在串行终端上打印数据。
我在代码开头使用“#define DEBUG”,如果它被定义,那么所有的串行打印命令都将被执行,并且在串行监视器上会有数据,否则它将跳过代码中的串行打印命令。
现在,我需要开发一个代码,以便用户可以输入是否在代码中包含“#define DEBUG”语句,以选择DEBUG模式/非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”语句。
请建议。
感谢和问候...
解决方案
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");
}
推荐阅读
- python - 使用 Discord.py 获取消息内容
- php - 如何使用 PHP 和 MYSQL 动态更改表列
- python - 井字游戏-这里有什么错误
- node.js - passport.deserializeUser() 未被调用且 req.user 未定义
- sql-server - 用于检索 XML 数据的 SQL 查询
- python - 在图表中打印循环
- build - 尝试切换板目标时 Zephyr 构建错误
- java - 使用 React 从 MongoDb 接收数据
- java - 以函数和自定义对象收集器为参数进行分组
- python - 无法提取“移动”数据。终端显示列表 = ['', '', '', '', '', '', '', '', '']