피드로 돌아가기
Dev.toInfrastructure
원문 읽기
플랫폼 독립적 Pub/Sub 모델 도입을 통한 Embedded 메시징 복잡도 해결
I got tired of hand-rolling message queues in FreeRTOS. So I built embedmq.
AI 요약
Context
FreeRTOS 및 Bare-metal 환경에서 QueueHandle_t 및 전역 플래그 기반의 P2P 통신 방식 사용으로 인한 결합도 증가. 태스크 추가 시마다 핸들을 공유하고 전달해야 하는 구조적 한계로 인해 유지보수 효율성 저하.
Technical Solution
- QueueHandle_t 직접 참조를 제거한 Topic 기반의 Pub/Sub 아키텍처 설계
- Producer와 Subscriber 간의 의존성을 완전히 분리한 embedmq_register 및 embedmq_post 인터페이스 구현
- Ring Buffer, Mutex, Semaphore Wakeup 로직을 라이브러리 내부로 캡슐화하여 구현 복잡도 감소
- 플랫폼별 추상화 계층(PAL) 설계를 통한 Linux(pthread), FreeRTOS(Counting Semaphore), Bare-metal(C11 Atomic Spinlock) 통합 지원
- FreeRTOS 환경에서 Heap 메모리 단편화 방지를 위한 Static Mode 메모리 할당 전략 채택
- Bare-metal의 Superloop 구조 내에서 동작 가능한 embedmq_poll() 기반의 Dispatch 메커니즘 구축
실천 포인트
- 태스크 간 직접적인 핸들 공유 대신 Topic 기반의 느슨한 결합(Loose Coupling) 구조 검토 - 임베디드 환경의 메모리 제약을 고려하여 초기화 이후 Heap 사용을 배제한 Static Allocation 적용 여부 확인 - 하드웨어 종속성을 최소화하기 위해 OS 추상화 계층(PAL)을 설계하여 이식성 확보