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) 현상 참사 없이 보드가 고공 비행 중에도 평온하게 숨을 쉴 수 있는 극한의 신뢰성이 보장되는 것이다.