自动检测Arduino IDE中使用串口的错误

时间:2018-05-25 07:54:37

标签: debugging arduino serial-port

我正在使用具有多个串口的Arduino板上进行编程(现在让我们说SerialSerial1Serial3)。每个端口都是一个单独的对象。对于使用端口,首先需要使用begin()方法对其进行初始化(我的意思是这里需要它,以使其正常工作)。问题是,默认情况下,相应的对象在Arduino IDE中都可用,即使你没有在草图中声明/初始化它们,因此不需要调用构造函数和/或初始化串口以便使用它(我在这里所说的是必需的,是应该做些什么来避免编译器错误)。因此,以下类型的代码编译得很好,而有一个错字:

byte crrt_char;

void setup(){
  Serial.begin(115200);
  delay(100);

  Serial.println("booted");

  Serial3.begin(57600);
  // Serial1.begin(9600);
  delay(100);
}

void loop() {
  if (Serial3.available() > 0){
    crrt_char = Serial1.read();
    Serial.println(crrt_char, HEX);
    delayMicroseconds(5);
  }
}

(它应该是循环中的Serial3而不是Serial1。)

我被这种错误所困扰,并且经常多次调试(当然是在一个更复杂的代码中),并且发现编译器不能保存我感到很遗憾(对我来说它看起来像个工作对于编译器来检查这种拼写错误,不是吗?)。我能以任何方式获得一些编译器帮助来检测这种错误吗?

Arduino核心可在此处获取:

https://github.com/arduino/ArduinoCore-avr

是否有可能在没有预先声明串口的情况下编写我自己的Arduino核心/变体,以便在使用它之前我需要自己声明它们?

1 个答案:

答案 0 :(得分:1)

虽然看似不公平,但编译器正在做的是正确的。编译器必须按照编写代码的方式编译代码。

尽管人们对代码辅助工作与代码编译工作感到困惑,但确保代码编写正确是你的工作。编译器的工作是确认代码是否遵循正确的语法。

至于制作一个电路板变体并将其包含在Arduino Core中,您必须对HardwareSerial.h文件进行更改,以确保不声明任何不必要的串行对象。

更简单的解决方案是使宏保持您想要使用的串行对象

#define CONTROL_PORT    Serial
#define COMMUNICATION_PORT  Serial3

在您的代码中,以下列方式使用CONTROL_PORT和COMMUNICATION_PORT

CONTROL_PORT.begin(9600);
COMMUNICATION_PORT.begin(9600);

有了这个,您将永远不会遇到拼写错误,您可以随时将Serial1更改为Serial3。 我希望这会有所帮助。