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
文件来物理地分离正常程序输出和错误消息,使得在不干扰主要输出通道的情况下启用事后分析。