19.3.1. 발행자 모듈 기본 구조 작성

19.3.1. 발행자 모듈 기본 구조 작성

모든 PX4 uORB 미들웨어 통신의 위대한 씨앗은 바로 퍼블리셔(Publisher) 데몬 메모리 포인터의 움직임 결단에서부터 발아한다. 앞선 19.1.3 단원의 토목 공사에서 우리는 px4_uorb_example.cpp라는 C++ 파일 내부에 텅 빈 데몬 진입점(Entry Point, main)과 Start/Stop 라이프사이클 껍데기 제어문만을 뼈대로 외롭게 타설해 두었다. 이제 그 텅 빈 스켈레톤(Skeleton)의 심장부 내부에, 비로소 uORB 통신망의 펄펄 끓는 혈관 파이프를 직접 이식하고 정교하게 세팅할 차례이다.

막강한 데이터 발행자 모듈의 런타임 수명 주기(Lifecycle)를 펌웨어 스케줄러 단에서 온전히 쥐락펴락하기 위해, 본 세부 단원에서는 본격적인 무자비한 데이터 펌핑(Publishing)에 돌입하기 전 다음과 같은 두 가지 필수 기초 C++ 아키텍처 인프라(Infrastructure) 뼈대를 폭력적으로 타설한다.

  • 코어 시스템 미들웨어 헤더 훅업(Hook-up): 우리가 앞서 파이썬 제너레이터의 고통스러운 피와 땀으로 번역해 낸 마스터 구조체 sensor_test_data.h 객체와, 시스템 미들웨어망에 접근하기 위한 절대적 커널 인터페이스인 <uORB/uORB.h>, C++ 전용 래퍼 클래스인 <uORB/Publication.hpp> 체인 라이브러리들을 C++ 호스트 소스 파일 최상단에 #include 병합시킨다. 이 작고 하찮아 보이는 단 몇 줄의 텍스트 삽입 행위로 인해, 컴파일러 차원에서의 거시적 메모리 링킹(Linking) 의존성과 포인터의 결합이 완벽하게 확립되는 것이다.
  • 하드 리얼타임 워커 스레드 메인 루프(Main Loop) 통제권 렌더링: PX4 시스템의 코어 백그라운드 워커 스레드는 단 1회의 절차적 실행으로 사멸하고 끝나는 가벼운 파이썬 셸 스크립트 나부랭이가 아니다. while (!thread_should_exit) 형태의 융통성 없고 무자비한 이진 무한 루프 감방을 튼튼하게 짓고, 픽스호크 NSH 시스템 스케줄러가 외부에서 데몬 파괴 종료 명령(stop)을 하달하여 킬 스위치(Kill-switch)를 부수기 전까지, 스레드가 스스로 지정된 Hz 주기로 깨어나고 다시 커널 수면 상태로 점멸하는(px4_usleep) 살벌한 폴링(Polling) 대기 상태 제어(State Management) 로직 플로우의 근간을 설계한다.

이 C++ 시스템 레벨 기초 스캐폴딩(Scaffolding) 공사가 단 1바이트의 오차나 메모리 릭(Leak) 없이 무결하게 이루어져야만, 향후 우리가 이 반복 루프 안에 수천 줄이 넘는 살벌한 센서 EKF 필터 추정 알고리즘 매트릭스를 들이부어도, 스레드 시간 과부하(Overhead/CPU Starvation)나 셧다운 시 버퍼 메모리 고아(Orphan) 현상 참사 없이 보드가 고공 비행 중에도 평온하게 숨을 쉴 수 있는 극한의 신뢰성이 보장되는 것이다.