arduino 中的详细调试打印?

问题描述 投票:0回答:2

我想在 arduino 中进行某种详细的调试打印,可以通过标志启用/禁用。 例如,我希望能够做类似的事情

#define VERBOSE
#define VERBOSE_PRINT(text) #ifdef VERBOSE Serial.println(text); #endif

后面的代码:

VERBOSE_PRINT("Doing something");

如果定义了 VERBOSE,那么我应该通过串行端口获取内容,如果未定义它,则该代码将不会被编译。 不幸的是这不起作用。 我收到错误:“错误:‘#’后面没有跟宏参数”。 所以我想知道获得可选编译打印(或与此相关的任何内容)的最佳方法是什么。 当然,我可以手动写出#ifdefs,但我希望它能够简化,这样就不会占用大量空间,因此我不必每次使用它时都写出来。 函数内部带有 #ifdef 的函数是执行此操作的最佳方法吗?

debugging arduino preprocessor
2个回答
0
投票
#define VERBOSE

#ifdef VERBOSE
#define VERBOSE_PRINT(str) Serial.println(str)
#else
#define VERBOSE_PRINT(str)
#endif

VERBOSE_PRINT("Doing something");

0
投票

以防万一有人迟到了这个问题!

我刚刚在 GitHub 上发布了一个存储库作为 Arduino 库https://github.com/davidlmorris/Debuggery,它应该为 Arduino 环境中的 MCU 提供上述问题的完整解决方案。

除此之外,它还包括提供 Serial.print 和 println 语句(完整)等价的宏,其形式为:

DEBUG_PRINT("This is 127 in hex format: 0x");
DEBUG_PRINT(127, HEX);
DEBUG_PRINTLN(".");

当 DEBUG_ON 设置时(如 README.MD 所解释),它将按照您的预期打印到串行端口。 当未定义时,库将从代码中消失,并且该宏被替换为 (void(0)),这会导致编译器不发出任何内容。 还有一个断言宏以相同的方式工作。

© www.soinside.com 2019 - 2024. All rights reserved.