Arduino:
การเขียนไปยังข้อผิดพลาดมาตรฐาน
วิธีการ:
Arduino โดยพื้นฐานแล้วไม่มีการแยกแยะระหว่าง standard output และ standard error เหมือนกับระบบคอมพิวเตอร์แบบเดิม ทั้ง Serial.print()
และ Serial.println()
เขียนไปยัง serial output เดียวกัน ซึ่งโดยปกติจะดูได้ใน Arduino IDE Serial Monitor อย่างไรก็ตาม เราสามารถเลียนแบบการเขียนไปยัง stderr โดยการจัดรูปแบบข้อความแสดงข้อผิดพลาดอย่างเฉพาะเจาะจงหรือนำไปยังเอาท์พุตอื่น เช่น ไฟล์บน SD card หรือผ่านการเชื่อมต่อเครือข่าย
เพื่อเลียนแบบ stderr คุณสามารถเติมคำนำหน้าข้อความแสดงข้อผิดพลาดด้วยแท็กเช่น “ERROR:” เพื่อแยกความแตกต่างใน Serial Monitor:
void setup() {
Serial.begin(9600); // เริ่มการสื่อสารแบบ serial ที่อัตราบอด 9600
}
void loop() {
int result = someFunction();
if (result == -1) {
// การเลียนแบบ stderr โดยการเติมคำนำหน้าข้อความแสดงข้อผิดพลาด
Serial.println("ERROR: ฟังก์ชันไม่สามารถปฏิบัติการได้.");
} else {
Serial.println("ฟังก์ชันปฏิบัติการสำเร็จ.");
}
delay(1000); // รอหนึ่งวินาทีก่อนเริ่ม loop ใหม่
}
int someFunction() {
// ฟังก์ชันปลอมที่ส่งกลับ -1 ในกรณีข้อผิดพลาด
return -1;
}
ตัวอย่างผลลัพธ์ใน Arduino IDE Serial Monitor อาจดูเช่นนี้:
ERROR: ฟังก์ชันไม่สามารถปฏิบัติการได้.
สำหรับโปรเจกต์ที่ต้องการวิธีการที่ซับซ้อนกว่า รวมถึงการเขียนไปยังเอาท์พุตทางกายภาพที่แตกต่างกัน อาจจำเป็นต้องใช้ไลบรารีของบุคคลที่สามหรือฮาร์ดแวร์เพิ่มเติม เช่น การบันทึกข้อความแสดงข้อผิดพลาดไปยัง SD card ต้องใช้ไลบรารี SD
:
#include <SPI.h>
#include <SD.h>
File myFile;
void setup() {
Serial.begin(9600);
if (!SD.begin()) {
Serial.println("ERROR: เริ่มต้น SD card ล้มเหลว!");
return;
}
myFile = SD.open("error.log", FILE_WRITE);
if (myFile) {
myFile.println("ERROR: ฟังก์ชันไม่สามารถปฏิบัติการได้.");
myFile.close(); // ตรวจสอบให้แน่ใจว่าปิดไฟล์เพื่อบันทึกเนื้อหา
} else {
Serial.println("ERROR: เปิดไฟล์ error.log ล้มเหลว!");
}
}
void loop() {
// โค้ดหลักของคุณจะอยู่ที่นี่
}
ด้วยวิธีนี้ คุณแยกผลลัพธ์ปกติของโปรแกรมและข้อความแสดงข้อผิดพลาดโดยสิ้นเชิงโดยการนำหลังคาไปยังไฟล์ error.log
บน SD card ทำให้สามารถวิเคราะห์หลังเกิดเหตุได้โดยไม่ทำให้ช่องทางเอาท์พุตหลักเกะกะ