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

노트 / 펌웨어 설계와 품질

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

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

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…

좋은 모듈의 모양

다른 모듈motor.h공개 함수 몇 개motor.cstatic 변수, 내부 함수
모듈 밖에서는 헤더에 적힌 함수만 보입니다. 내부 변수는 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 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →