노트 / 펌웨어 설계와 품질
모듈화와 인터페이스: 헤더로 경계 긋기
.h는 바깥에 보여 줄 것만, .c는 내부를 숨깁니다. static, 불투명 타입, 초기화 함수로 모듈을 설계하는 방법.
좋은 모듈의 모양
/* motor.h : 바깥에 보여 줄 것만 */
typedef enum { MOTOR_OK, MOTOR_FAULT } motor_status_t;
void motor_init(void);
void motor_set_duty(int16_t duty_permille); // -1000 ~ 1000
motor_status_t motor_status(void);
/* motor.c : 내부 */
static int16_t s_duty; // 바깥에서 못 건드림
static void apply_pwm(void) { ... }
원칙
- 전역 변수를
extern으로 노출하지 않고 함수로 읽고 씁니다. 값 범위 검사와 로그를 한 곳에서 할 수 있습니다. - 내부 함수와 변수에는
static - 단위를 이름이나 주석에 명시합니다:
duty_permille,speed_rpm,current_mA - 헤더는 자기만으로 컴파일되게(필요한 include를 스스로 포함)
- 모듈 하나는 한 가지 책임: "모터 드라이버"와 "속도 제어"는 별도 모듈
인터페이스부터 쓰기
구현 전에 헤더를 먼저 쓰고 팀과 합의하면, 구현이 끝나기 전에도 다른 사람이 그 인터페이스를 써서 개발과 테스트를 시작할 수 있습니다.
영상으로 이어 보기RC카 만들기 시리즈 6편대기업 임베디드 개발자 Lego RC카 메이킹 시작합니다. 【RC카 개발1】PROJECT COURSE요구사항부터 소프트웨어 구조까지 한 프로젝트로 해 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →