그라운드 임베디드 유튜브 구독

노트

펌웨어 설계와 품질 노트

현업 펌웨어는 몇 년씩 여러 사람이 고칩니다. 동작하는 코드와 유지되는 코드는 다릅니다.

로드맵에서 보기 →
GROUND EMBEDDED · 정리 노트설계·품질 01계층 구조계층하는 일예애플리케이션제품의 동작 규칙밸런싱 상태 머신, 모드…서비스재사용 가능한 기능PID, 필터, 프로토콜…
펌웨어 설계와 품질

계층 구조: 위는 아래만 부른다

HAL, 드라이버, 서비스, 애플리케이션으로 나누고 의존 방향을 한쪽으로 정합니다. 칩이 바뀌어도 위쪽 코드가 살아남는 구조.

GROUND EMBEDDED · 정리 노트설계·품질 02모듈화와 인터페이스 1/* motor.h : 바깥에 보여 줄 것만 */ 2typedef enum { MOTOR_OK, MOTOR_FAULT } … 3void motor_init(void); 4void motor_set_duty(int16_t duty_permil…// -1…
펌웨어 설계와 품질

모듈화와 인터페이스: 헤더로 경계 긋기

.h는 바깥에 보여 줄 것만, .c는 내부를 숨깁니다. static, 불투명 타입, 초기화 함수로 모듈을 설계하는 방법.

GROUND EMBEDDED · 정리 노트설계·품질 03코딩 규칙규칙 (요지)이유동적 메모리 할당 금지단편화, 실패, 시간 예측 불가재귀 금지스택 사용량 예측 불가
펌웨어 설계와 품질

코딩 규칙: MISRA C가 막는 것들

자동차와 산업 펌웨어에서 쓰는 MISRA C가 무엇을 금지하는지, 그리고 그 이유를 정리했습니다.

GROUND EMBEDDED · 정리 노트설계·품질 04단위 테스트 1void test_crc16_known_value(void) { 2 const uint8_t s[] = "123456789"; 3 TEST_ASSERT_EQUAL_HEX16(0x4B37, crc… 4}
펌웨어 설계와 품질

단위 테스트: 하드웨어 없이 펌웨어 검증하기

PID, 파서, 상태 머신처럼 하드웨어와 무관한 로직은 PC에서 테스트합니다. Unity, 목(mock), 테스트 가능한 구조.

GROUND EMBEDDED · 정리 노트설계·품질 05정적 분석 1-Wall -Wextra -Wshadow -Wconversion -Wd…
펌웨어 설계와 품질

정적 분석: 실행 전에 버그 찾기

컴파일러 경고를 최대로 켜고, cppcheck와 clang-tidy로 코드를 실행하지 않고 결함을 찾습니다.

GROUND EMBEDDED · 정리 노트설계·품질 06버전 관리 1const char fw_version[] = "1.2.0"; 2const char fw_git[] = GIT_HASH;// 빌드 …
펌웨어 설계와 품질

버전 관리: Git으로 펌웨어 이력 남기기

브랜치, 커밋 단위, 릴리스 태그, 그리고 펌웨어 바이너리에 버전을 새기는 방법.

GROUND EMBEDDED · 정리 노트설계·품질 07로그와 디버그 출력방법장점단점블로킹 UART prin…가장 쉬움느림, 타이밍 망침링 버퍼 + DMA UA…루프 영향 작음버퍼 넘치면 손실
펌웨어 설계와 품질

로그와 디버그 출력

printf 디버깅부터 링 버퍼 로그, SWO/RTT 실시간 트레이스까지. 실시간 동작을 망치지 않고 내부를 보는 방법.

GROUND EMBEDDED · 정리 노트설계·품질 08펌웨어 업데이트경로예유선UART, USB DFU, CAN (차…무선 (OTA)BLE, Wi-Fi, LTE
펌웨어 설계와 품질

펌웨어 업데이트: 현장 기기를 안전하게 바꾸기

출시 후에도 버그를 고치려면 업데이트 경로가 필요합니다. A/B 슬롯, 서명 검증, 롤백으로 벽돌을 피하는 구조.