노트 / 펌웨어 설계와 품질
로그와 디버그 출력
printf 디버깅부터 링 버퍼 로그, SWO/RTT 실시간 트레이스까지. 실시간 동작을 망치지 않고 내부를 보는 방법.
printf의 비용
115200bps UART로 50글자를 보내면 약 4.3ms가 걸립니다. 블로킹 printf를 1ms 제어 루프 안에 넣으면 루프가 깨집니다.
단계별 방법
| 방법 | 장점 | 단점 |
|---|---|---|
| 블로킹 UART printf | 가장 쉬움 | 느림, 타이밍 망침 |
| 링 버퍼 + DMA UART | 루프 영향 작음 | 버퍼 넘치면 손실 |
| SEGGER RTT | 매우 빠름, 디버거 경유 | J-Link 필요 (ST-LINK 변환 가능) |
| SWO / ITM | 코어 내장, 핀 하나 | 디버거 지원 필요 |
| GPIO 토글 + 로직 분석기 | 오버헤드 거의 0 | 정보량 적음 |
로그 설계
- 레벨: ERROR, WARN, INFO, DEBUG. 출시 빌드는 WARN 이상만
- 모듈 태그와 타임스탬프:
[1234ms][MOTOR] overcurrent 25.3A - 숫자는 문자열 변환 대신 바이너리로 보내고 PC에서 해석하면 훨씬 빠름
현장 기록
치명적 오류(하드폴트, 워치독 리셋, 과전류 정지)는 원인 코드와 시각을 Flash에 몇 개씩 남겨 두면 재현이 안 되는 고장도 추적할 수 있습니다.