19.3.1.1. 필요한 시스템 및 uORB 헤더 파일 인클루드(`#include ` 등)

19.3.1.1. 필요한 시스템 및 uORB 헤더 파일 인클루드(#include <uORB/uORB.h> 등)

퍼블리셔(Publisher) 데몬의 심장을 뛰게 만들 메인 C++ 런타임 소스 파일(px4_uorb_example.cpp)의 최상단 공간은, 자비 없고 멍청한 C++ 툴체인/컴파일러에게 이 소스 코드가 어떠한 외부 시스템 인프라를 끌어다 수혈받을 것인지 명확하고 폭력적으로 통보하는 거룩한 링커 배선(Wiring)의 장소이다. 우리는 앞서 19.1.3 단원에서 겨우 만들어둔 얕은 데몬 뼈대 코드 최상단에, uORB 미들웨어 생태계를 완벽하게 장악하기 위한 핵심 헤더 파일의 촉수들을 무자비하게 인클루드(Include)하여 병합시켜야만 한다.

1. 펌웨어를 장악하는 절대적 3대 의존성 헤더(Dependencies Header) 타설

이 텅 빈 외딴섬 데몬이 광활한 PX4 uORB 트래픽망에 합법적으로 접속하여 피 같은 데이터를 뿌려대기 위해서는, 다음 세 가지 계층의 헤더 파일이 수직적으로 그리고 완벽하게 결합되어야만 한다.

// [1] PX4 통합 플랫폼 제어 커널 및 디버깅 코어 라이브러리 인터페이스
#include <px4_platform_common/px4_config.h>
#include <px4_platform_common/log.h>          // PX4_INFO, PX4_WARN 터미널 플롯 출력용 매크로
#include <px4_platform_common/tasks.h>        // 스레드 수면 제어(px4_usleep 등)를 위한 필수 RTOS 커널 래퍼 헤더

// [2] uORB 시스템 미들웨어 C++ 객체 지향(OOP) 인터페이스 라이브러리
#include <uORB/uORB.h>                        // uORB 마스터 C API 물리 메모리 명세서
#include <uORB/Publication.hpp>               // C++ 템플릿(Template) 기반의 안전하고 파괴력 높은 퍼블리셔(Publisher) 클래스 객체

// [3] ★ 우리가 직접 스크립트로 창조해 낸 커스텀 통신 규격 메타데이터 헤더 ★
#include <uORB/topics/sensor_test_data.h>     // 앞서 파이썬 파서가 생성해 준 시스템 링킹 결합 아키텍처의 절대적 핵심 열쇠

2. 인클루드 블록 트리 구조의 아키텍처적 당위성

초보자들은 구글링한 남의 코드에서 헤더를 그저 복사해 붙여넣기만 바쁘지만, 이 단 몇 줄의 #include 코드는 단순히 컴파일 에러의 붉은 줄을 회피하기 위한 얄팍한 임기응변이 결단코 아니다. 철저하게 계산된 시스템 아키텍처적 결합(Coupling) 행위이다.

  1. 플랫폼 공통 헤더 추상화 계층 (px4_platform_common): 이 헤더들은 당신의 C++ 텍스트 코드가 리눅스 기반의 쾌적한 데스크탑 SITL 가상 머신 환경에서 편하게 컴파일되든, 혹은 성능이 처참한 픽스호크 마더보드의 척박한 NuttX 실시간 RTOS 커널 환경에서 컴파일되든, 완전히 동일한 메모리 포인터 동작을 보장하게 만들어주는 마법의 크로스 플랫폼(Cross-platform) 추상화 래퍼(Wrapper) 계층이다. 이로 인해 우리는 타겟 물리 칩셋에 비굴하게 종속되지 않고 px4_usleep() 같은 통합 매크로 함수를 거침없이 마음껏 쏠 수 있게 되는 특권을 누린다.
  2. uORB 코어 송출 체인 장악 헤더 (<uORB/Publication.hpp>): 과거 구시대 석기시대의 PX4 개발자들은 C 언어 스타일의 날 것 그대로의 난해한 파일 디스크립터(File Descriptor)를 강제로 열어 무식하게 메모리 포인터 덩어리를 ioctl 시스템 콜(System Call) 단으로 쑤셔 넣는 기괴하고 위험한 코딩을 감행했었다. 하지만 현대의 고도화된 PX4 아키텍처 생태계는 이 헤더 하나를 통해 uORB::Publication<T> 라는 지극히 객체 지향적이고 우아한 텍스트 템플릿 클래스를 개발자에게 제공함으로써, 컴파일 타임에 타입 매칭이 박살 나 커스텀 힙 범위를 벗어나는 메모리 파괴 에러(Memory Corruption Attack)를 링커 단에서 원천적으로 차단 방어해 주는 위대한 시스템적 배려를 베풀고 있다.
  3. 오리지널 커스텀 스키마 헤더 (<uORB/topics/sensor_test_data.h>): 이 헤더를 첫 번째 줄에 꽂아 넣는 순간, 당신의 바보 같은 C++ 스크립트 컴파일러는 sensor_test_data_s 구조체의 정확한 바이트 사이즈 패킹 규격과 런타임 VFS 메타데이터 주소(#ORB_ID(sensor_test_data))에 대한 모든 루트 암호 해독 키를 즉각적으로 부여받게 된다. 맹세컨대, 이 열쇠가 없이는 당신은 단 한 방울의 쓰레기 데이터조차도 시스템 혈관 버퍼로 넘겨줄 수 없을 것이다.

이 거대한 링킹 교차로 뼈대의 개통 공사가 무사히 텍스트로 코딩 타설되었다면, 이제 이 단단하고 폭력적인 인프라 위에 끝없이 회전하는 무한 루프 워커 쳇바퀴를 강제로 건설할 모든 준비가 끝난 것이다.