임베디드·펌웨어 부트캠프
PC 시뮬레이션 HAL로 센서 기록기와 상태 표시 장치를 만들며 C·입출력·통신·복구·자원 검증을 익힙니다.
- 대상
- 국비 웹 과정 수료생과 비전공 입문자를 위한 과정입니다.
- 시작 전
- 변수·조건·반복과 터미널 실행부터 시작합니다. C·전자회로 경험은 요구하지 않습니다. 로컬 단계에는 gcc 명령으로 실행 가능한 C 컴파일러·make·Python 3·LLDB가 필요하며 맥의 gcc가 Apple Clang인지 기록합니다. 외부 Python 패키지·실물 장치·ROS 2는 사용하지 않습니다.
- 학습 시간
- 140시간 안팎
트랙 프로젝트
센서 기록기와 상태 표시 장치
버튼으로 기록을 시작하고 주기적으로 센서를 읽어 UART 전송·SPI 저장·LED 표시를 수행합니다. 분리·시간 초과·과부하를 복구하고 조건별 측정 근거를 남깁니다.
수료하면 할 수 있는 일
- C 배열·포인터·객체 수명과 빌드 오류를 직접 추적합니다.
- PC HAL에서 GPIO·타이머·인터럽트·센서 통신을 구현합니다.
- 상태 전이·큐·경쟁 조건·오류 복구를 반복 시험합니다.
- 호스트 응답 시간과 메모리 사용을 측정하고 전력 모델의 추정값 및 실물 검증 한계를 설명합니다.
모듈
- PC에서 시작하는 센서 기록기
터미널·변수·조건·반복을 익히고 가짜 센서 입력을 읽는 첫 C 프로그램을 만듭니다.
10시간 안팎
표준 입력의 정수 샘플을 검사하는 C CLI와 Makefile을 작성하고 실행 환경·빌드 단계·링크 오류 원인을 README.md에 남깁니다.
- 배열·포인터와 안전한 샘플 버퍼
고정 크기 기록 버퍼를 만들고 경계·객체 수명·메모리 오류를 추적합니다.
14시간 안팎
앞 모듈의 샘플을 timestamp_ms·raw 구조체 16개 버퍼에 보관하고 길이·소유권 계약 및 디버거 관찰 기록을 추가합니다.
- 비트 연산과 시뮬레이션 HAL
하드웨어 의존 부분을 분리하고 가짜 레지스터로 필요한 비트만 변경합니다.
12시간 안팎
기록기에 hal_gpio_read·hal_gpio_write·hal_now_ms 인터페이스를 붙이고 핀·가짜 레지스터·시간 입력 구성을 문서화합니다.
- GPIO와 버튼 상태 표시
입력 튐을 제거하고 기록 시작·정지와 LED 표시를 연결합니다.
12시간 안팎
앞 모듈 HAL과 버퍼에 버튼 토글 및 LED 상태 표시를 추가하고 튐 이벤트 fixture를 보관합니다.
- 타이머·인터럽트와 주기 수집
가상 시간으로 주기 작업을 만들고 인터럽트의 긴 처리를 메인 루프로 옮깁니다.
14시간 안팎
버튼 기록기에 100ms 타이머·가상 ISR·용량 8 이벤트 큐를 추가하고 출력 작업을 인터럽트 밖에 둡니다.
- 데이터시트와 센서 통신
전압·주소·형식을 읽어 I2C 센서와 UART·SPI 시뮬레이터를 연결합니다.
16시간 안팎
100ms 수집 경로에 가상 I2C 온도 센서·ADC 보조 입력·UART 전송·SPI 저장 HAL을 붙이고 연결 및 통신 규격을 작성합니다.
- 상태 머신과 오류 복구
대기·측정·전송·복구 흐름을 정의하고 오래된 센서 값의 사용을 막습니다.
14시간 안팎
통신 기록기를 IDLE·MEASURE·TRANSMIT·RECOVER·ERROR 상태로 구성하고 재시도·오래된 값·오류 LED 정책을 추가합니다.
- RTOS 사고법과 공유 데이터 검증
태스크·큐·동기화 개념을 PC 모델에 적용하고 경쟁 조건을 재현합니다.
14시간 안팎
상태 머신 수집·전송을 용량 16 생산자·소비자 큐로 분리하고 PC pthread 검사 및 결정적 태스크 모델을 추가합니다.
- 응답 시간·메모리와 전력 모델
조건을 고정해 PC 실행을 측정하고 모델에서 자원·절전의 한계를 계산합니다.
16시간 안팎
앞 모듈 기록기에 지연·큐 최고점·정적 메모리·가상 에너지 보고서를 추가하고 PC 실측과 장치 모델 추정을 분리합니다.
- 통합 검증과 신입 포트폴리오
센서 기록기 전체를 반복 검증하고 구성·통신·오류·측정 근거를 인계합니다.
18시간 안팎
전체 누적 소스를 통합하여 make test 한 번으로 검증하고 구성도·통신 규격·오류 재현 기록·측정 보고서·면접 근거를 evidence/에 정리합니다.
신입 기본기 대응표
| 영역 | 완료 기준 | 모듈 |
|---|---|---|
| C와 메모리 |
| m02-memory-recordsm03-register-hal |
| 빌드와 디버깅 |
| m01-pc-workbenchm02-memory-records |
| 장치 입출력 |
| m04-gpio-buttonm05-timer-events |
| 센서와 통신 |
| m06-sensor-busesm07-state-recovery |
| 상태와 동시성 |
| m07-state-recoverym08-concurrency-queues |
| 측정과 검증 |
| m09-resource-measurementm10-release-evidence |
면접 질문 대응
- 배열과 포인터를 사용할 때 메모리 오류를 확인하는 방법을 설명해 주시면 됩니다. m02-memory-records
- 특정 레지스터 비트만 바꾸는 코드를 설명해 주시면 됩니다. m03-register-hal
- 컴파일은 성공했지만 링크가 실패한 상황을 설명해 주시면 됩니다. m01-pc-workbench
- 버튼을 한 번 눌렀는데 여러 번 감지되는 이유를 설명해 주시면 됩니다. m04-gpio-button
- 센서가 응답하지 않을 때 점검할 순서를 설명해 주시면 됩니다. m06-sensor-busesm07-state-recovery
- 센서 기록기의 상태 머신을 설명해 주시면 됩니다. m07-state-recovery