RTOS 사고법과 공유 데이터 검증
태스크·큐·동기화 개념을 PC 모델에 적용하고 경쟁 조건을 재현합니다.
진도 0%
레슨
- 태스크와 우선순위 모델
순수 Python으로 실행 준비 큐를 처리하고 수집·전송 작업의 마감 누락을 셉니다.
- 경쟁 조건을 재현하는 순서
읽기·수정·쓰기 이벤트 교차 실행으로 유실된 증가와 직렬화 결과를 비교합니다.
- C 공유 버퍼 보호
pthread 생산자·소비자 큐에 mutex를 적용하고 순번·누락을 검증합니다.
- 메시지 경계와 역압
순수 Python 메시지 큐에서 timestamp·단위·용량과 DROP 정책을 검사합니다.
RTOS 사고법과 공유 데이터 검증 미션
m07-state-recovery의 solution 소스·HAL·테스트를 포함한 독립 starter에서 시작합니다. 기존 recovery_tick 회귀를 보존하고 새 pipeline_collect와 pipeline_dispatch로 센서 기록기 수집·전송을 분리합니다.
요구사항
- 기존 C·버튼·타이머·통신·복구 회귀를 보존하며 새 루프 timed_button → timer_poll → pipeline_collect → pipeline_dispatch를 구현합니다. 옛 recovery_tick 또는 bus_consume을 중복 소비자로 호출하지 않습니다.
- 용량16 MessageQueue에서 seq·raw·BusRecord 전체를 값 복사하고 mutex 하나로 slots·head·tail·count·통계·closed를 보호합니다. 대기 조건은 while로 재검사하며 close 뒤 drain·join 뒤 destroy를 지킵니다.
- 정상부하 pthread는 blocking으로 순번0~9999와 본문을 중복·누락 없이 전달합니다. 통합 가상 루프는 nonblocking DROP_NEW이고 STALE·CANCEL 이유별 카운터를 분리합니다.
- 측정 timestamp_ms와 밀리 섭씨도·밀리볼트 단위를 유지합니다. 나이300ms 이상 전송은 STALE이며 전송 실패는 ERROR·valid 초기화·오류 LED·남은 큐 CANCEL로 연결하고 이전 Buffer·SPI·UART 이력을 보존합니다.
- 분리·정지·ERROR·명시 재연결 시 대기를 취소하고 재연결 뒤 새 값으로 시작합니다. 재연결에도 seq와 누적 손실 통계는 유지합니다.
- C11 -Wall -Wextra -Werror -pthread와 Python 표준 라이브러리만 사용합니다. task_model.py에서 비선점 마감과 증가 교차 실행을 검사합니다.
- CONCURRENCY-SPEC.md와 실제 실행한 CONCURRENCY-EVIDENCE.md를 제출합니다. PC pthread와 결정적 모델의 범위를 적고 실제 RTOS·ISR 안전 API·우선순위 상속은 후속 검증으로 구분합니다. volatile은 동기화 수단이 아닙니다.
완료 기준
- make test 종료코드0이며 앞 모듈 sensor-buses 79건·retry-budget 11건·state-recovery 126건을 포함한 누적 회귀 실패0입니다.
- make -s queue-test는 135개 조건 실패0과 pthread 10000건 순번·본문 일치를 검사합니다. starter는 컴파일 성공 후 순번 assertion 일부가 실패합니다.
- make -s pipeline-test는 55개 조건 실패0, DROP_NEW=4 STALE=1 CANCEL=17 sent=2입니다. 나이299 전송·300 ERROR, 분리 취소·재연결 새 값, UART 길이·SPI full 오류의 저장 보존과 CS 해제를 검사합니다.
- make -s model-test는 보호 전1·보호 후2 및 마감 누락1을 검사합니다. pipeline-demo-test는 버튼·타이머·분리·재연결을 지나 records=5 spi=65 sent=5로 끝납니다.
make test미션 시작 코드
모범 답안
모범 답안 내려받기검토 기준
- 요구사항과 테스트 fixture의 대응이 드러납니다.
- 하드웨어 의존 경계와 실패 처리의 선택 이유를 설명합니다.
- 미션별 측정·관찰 증거를 실제 실행한 결과로 남깁니다.