Я программирую на платах Arduino, которые имеют несколько последовательных портов (скажем, пока Serial
, Serial1
и Serial3
).Каждый порт - это отдельный объект.Для использования порта необходимо сначала инициализировать его с помощью метода begin()
(здесь я имею в виду, чтобы он работал нормально).Проблема в том, что соответствующие объекты все доступны в IDE Arduino по умолчанию, даже если вы не объявляете / не инициализируете их в своем эскизе, поэтому не требуется вызывать конструктор и / или инициализировать последовательный порт для его использования.(то, что я имею в виду здесь с обязательным, это то, что нужно сделать, чтобы избежать ошибки компилятора).Как следствие, следующий вид кода компилируется нормально, хотя есть опечатка:
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 без предварительно объявленных последовательных портов, так что мне нужно было бы объявить их самостоятельно, прежде чем я смогу их использовать?