Arduino:
Запись в стандартный поток ошибок
Как это сделать:
Arduino изначально не поддерживает stderr, но мы можем имитировать его, записывая в Serial. Представим программу мигания светодиодом с проверкой на ошибки:
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
if(!digitalWriteCheck(LED_BUILTIN, HIGH)) {
Serial.println("Ошибка: Невозможно установить LED в высокое состояние"); // Это наш "stderr"
}
delay(1000); // Подождать секунду
if(!digitalWriteCheck(LED_BUILTIN, LOW)) {
Serial.println("Ошибка: Невозможно установить LED в низкое состояние"); // Это наш "stderr"
}
delay(1000); // Подождать секунду
}
bool digitalWriteCheck(int pin, int value) {
// Представим, что эта функция проверяет, была ли успешной функция digitalWrite
digitalWrite(pin, value);
// Если успех - возвращаем true, давайте для примера всегда возвращать false
return false;
}
Пример вывода:
Ошибка: Невозможно установить LED в высокое состояние
Ошибка: Невозможно установить LED в низкое состояние
Подробнее
Исторически, stderr является стандартным потоком во многих операционных системах, введенным Unix. В Arduino, которая не имеет операционной системы, мы вручную выводим ошибки, используя Serial.print или похожие команды. Если вы ведете журнал на компьютере, логи могут быть перенаправлены из Serial в файл, эффективно отделяя их от stdout. Продвинутые пользователи могут использовать SoftwareSerial для эмуляции stderr на разных аппаратных последовательных портах.
Смотрите также
- Официальную документацию Arduino по Serial: https://www.arduino.cc/reference/en/language/functions/communication/serial/
- Стандартные потоки Unix: https://en.wikipedia.org/wiki/Standard_streams
- Библиотеку SoftwareSerial: https://www.arduino.cc/en/Reference/SoftwareSerial