Arduino:
표준 에러에 쓰기
어떻게:
아두이노는 기존 컴퓨팅 시스템처럼 표준 출력과 표준 오류를 구별하는 기능이 기본적으로 없습니다. Serial.print()
및 Serial.println()
메서드 모두 동일한 시리얼 출력에 쓰고, 이는 일반적으로 아두이노 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); // 루프 재시작 전에 1초 기다림
}
int someFunction() {
// 오류 시 -1을 반환하는 더미 함수
return -1;
}
아두이노 IDE 시리얼 모니터에서의 샘플 출력은 다음과 같습니다:
ERROR: 함수가 실행에 실패했습니다.
더 복잡한 접근이 필요한 프로젝트의 경우, 다른 물리적 출력으로 쓰기를 포함하여 제3의 라이브러리 사용이나 추가 하드웨어가 필요할 수 있습니다. 예를 들어, 오류 메시지를 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() {
// 여기에 주 코드를 넣을 것
}
이 접근 방식을 사용하면, error.log
파일로 오류 메시지를 SD 카드에 직접 전달해 일반 프로그램 출력과 오류 메시지를 물리적으로 분리하여, 주 출력 채널을 어지럽히지 않고 사후 분석을 가능하게 합니다.