Devin.KR

C 실행 기초와 가상 장치 HAL

C 함수·구조체·포인터를 익혀 센서와 모터를 PC 가상 장치로 분리합니다.

진도 0%

레슨

  1. C 컴파일과 함수

    gcc -std=c11 -Wall -Wextra -Werror로 작은 센서 변환 프로그램을 빌드합니다.

  2. 구조체·배열·출력 포인터

    고정 크기 샘플 배열과 상태 코드를 갖는 HAL 인터페이스를 구현합니다.

  3. 가상 PWM과 입력 제한

    PWM 요청을 -1~1로 제한하고 실제 장치 입출력 대신 상태 구조체에 저장합니다.

  4. 결함 상태와 정지

    센서 읽기 실패를 주입하면 가상 모터 출력을 0으로 바꿉니다.

C 실행 기초와 가상 장치 HAL 미션

m02-frames 미션 solution의 Python 코드·설정·fixture·기존 회귀 테스트 28개를 유지한 starter에서 hal_sim.c의 TODO 네 곳을 완성합니다. C HAL이 만든 실제 JSONL을 기존 입력 검증과 프레임 변환에 연결합니다.

요구사항

  • hal.h·hal_sim.c·테스트 실행 파일을 추가하고 실제 GPIO나 장치를 접근하지 않습니다.
  • HAL은 read_range·set_wheels·step 호출 및 오류 상태를 노출합니다.
  • check.sh에서 gcc -std=c11 -Wall -Wextra -Werror로 빌드하고 C 테스트와 기존 Python 테스트를 실행합니다.
  • C 시뮬레이터는 JSONL을 출력하며 Python 검증기가 m01 입력 계약으로 읽습니다.
  • 샘플은 최대 4개 소유 복사, 거리 [0.05,8]m, step의 dt_s는 유한한 (0,1]초입니다. 현재 읽기는 인덱스를 유지하고 step이 다음 샘플로 이동합니다. 마지막 이후는 HAL_END로 정지합니다.
  • PWM은 부호 있는 정규화 요청이며 속도나 실제 타이머 파형이 아닙니다. 비유한 요청·센서 실패·잘못된 시간은 두 출력을 0으로 하고 상태를 초기화 전까지 잠급니다.
  • JSONL 실패 행은 마지막 정상 range_m와 sample_valid=false, status=2를 기록합니다. m01 기본 계약 검사 뒤 정상 행만 m02 message_point로 변환합니다.
  • 검증 fixture는 거리 1.0·0.05·8.0m, 간격 0.1초이며 세 번째 읽기에 실패를 주입합니다. seq 0·1은 정상, seq 2는 정지 진단입니다.

완료 기준

  • NULL 출력 포인터·배열 경계·센서 실패 테스트를 통과합니다.
  • PWM -2와 2 요청의 저장값이 각각 -1과 1입니다.
  • 센서 실패 직후 두 모터 출력이 0이며 실패 상태가 로그에 남습니다.
  • bash check.sh: C 검사 44개, 기존 Python 28개와 새 연결 검사 6개를 합친 34개 테스트, 실제 C 로그 bridge 검증이 통과합니다.
  • PASS bridge rows=3 points=2 faults=1이며 정상 점은 map (1,3.2)m와 (1,2.25)m입니다. 실패 행에서는 새 점을 만들지 않습니다.
  • starter는 C 빌드 성공 후 기능 검사 일부가 실패하고 기존 Python 회귀 테스트는 통과합니다.
bash check.sh
미션 시작 코드
모범 답안모범 답안 내려받기

검토 기준

  • 입력·단위·실패 조건과 변경 이유를 설명합니다.
  • 이전 모듈의 회귀 테스트와 이번 실험 근거를 함께 제출합니다.