Arduino:
写入标准错误

如何操作:

Arduino 原生并不像传统计算系统那样区分标准输出和标准错误。Serial.print()Serial.println() 方法都写入相同的串行输出,通常在 Arduino IDE 的串行监视器中查看。然而,我们可以通过特定格式化错误消息或将它们引导到一个替代输出(例如 SD 卡上的文件或通过网络连接)来模拟写入 stderr。

为了模拟 stderr,你可以在错误消息前加上像 “ERROR:” 这样的标签来区分它们在串行监视器中的显示:

void setup() {
  Serial.begin(9600); // 初始化串行通信,波特率为 9600
}

void loop() {
  int result = someFunction();
  if (result == -1) {
    // 通过在错误消息前添加前缀来模拟 stderr
    Serial.println("ERROR: 函数执行失败。");
  } else {
    Serial.println("函数成功执行。");
  }
  delay(1000); // 循环前等待一秒
}

int someFunction() {
  // 一个在出错时返回 -1 的虚拟函数
  return -1;
}

在 Arduino IDE 的串行监视器中,示例输出可能如下所示:

ERROR: 函数执行失败。

对于需要更复杂方式的项目,包括写入到不同的物理输出,可能需要使用第三方库或额外的硬件。例如,将错误消息记录到 SD 卡需要使用 SD 库:

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
  Serial.begin(9600);
  if (!SD.begin()) {
    Serial.println("ERROR: SD卡初始化失败!");
    return;
  }
  
  myFile = SD.open("error.log", FILE_WRITE);
  if (myFile) {
    myFile.println("ERROR: 函数执行失败。");
    myFile.close(); // 确保关闭文件以保存内容
  } else {
    Serial.println("ERROR: 打开 error.log 失败!");
  }
}

void loop() {
  // 你的主要代码将放在这里
}

通过这种方式,你可以通过将错误消息引导到 SD 卡上的 error.log 文件来物理地分离正常程序输出和错误消息,使得在不干扰主要输出通道的情况下启用事后分析。