19.2.1. uORB .msg 파일 문법 및 데이터 타입
PX4 비행 제어 시스템의 거대한 혈관망인 uORB 미들웨어에 직접 실어 보낼 나만의 신선한 데이터 덩어리를 정의하기 위해서는, 가장 먼저 시스템 최상단 msg/ 디렉토리 내부에 어떠한 단일 특정 프로그래밍 언어(C/C++ 등) 아키텍처에도 종속되지 않는 고도의 추상화된 텍스트 기반 명세서인 .msg 파일을 작성해 내야 한다.
이 텍스트 파일은 마치 대형 우주선 건설 현장의 1차원 청사진(Blueprint) 문서와 같다. 아키텍트 개발자가 사람이 읽기 편한 직관적인 텍스트 라인 몇 줄을 규칙에 맞게 구조화하여 적어 놓으면, 곧바로 들이닥치는 빌드 컴파일 타임(Compile-time)에 genmsg 파이썬 템플릿 스크립트 엔진이 이를 무자비하게 스캐닝 파싱(Parsing)하여, 칩셋의 캐시 보틀넥과 바이트 패딩(Memory Padding / Alignment) 정렬 문제까지 완벽하게 소화해 낸 극도로 단단한 C/C++ struct 헤더 코드 덩어리로 둔갑 변환시켜 준다.
하지만 오만하고 까다로운 파이썬 파서(Parser)가 기계어 번역 트리에 앞서 당신의 코드를 튕겨내고 에러를 뱉지 않게 하려면, PX4 생태계가 군대처럼 엄격하게 통제 규제하고 있는 문법적 규칙(Syntax Rules)과 극도로 제한된 데이터 스칼라(Scalar) 원시 타입들의 목록을 뇌리에 완벽하게 숙지하고 있어야 한다.
만일 일반 데스크탑 C/C++ 소프트웨어 세계에서 흔히 쓰이고 사랑받던 double (64비트 실수형 연산의 고비용 문제)이나, 동적으로 크기가 요동치는 가변 길이 std::vector 나 동적 배열 힙(Heap) string 따위를 아무 문맥 생각 없이 타이핑해 넣었다간, 실시간 임베디드 리얼타임 메모리 관리가 절대 불가능하다고 판단한 파서 컴파일러 트리거 엔진이 곧장 터미널에 시뻘건 치명적 에러를 터트리며 당신의 시스템 전체 빌드를 런타임 이전에 무참히 박살 내고 정지시킬 것이다.
따라서 본 세부 단원에서는 PX4 메시징 시스템의 가장 뼈대가 되는 다음과 같은 세 가지 핵심 마이크로 문법적 토대 구문을 완전히 해체(Teardown)하여 당신의 엔지니어 두뇌 신경망에 각인시킨다.
- 타임스탬프(Timestamp) 절대주의 최우선 선언의 법칙: 대체 왜 잘 나가는 최신 PX4 시스템에서는 그 어떠한 하찮은 1비트짜리 스위치 메시지 데이터라 할지라도, 무조건 자비 없이 구조체 텍스트의 맨 첫 번째 최상단 왕좌 자리에 가성비가 떨어져 보이는 8바이트 거대 크기의
uint64 timestamp속성을 강제적으로 배치해야만 하는지, 그 숨결 차는 런타임 추적 동기화의 수학적 배경 이론을 뼛속까지 이해한다. - 강직한 고정 배열과 스칼라 타입 시스템 제약:
bool,int8,uint32,float32등 PX4가 공식적으로 지원하고 픽스호크 마이크로 칩셋 부동소수점 처리 장치(FPU)에 극한으로 최적화된 스칼라 타입들의 종류를 조목조목 나열하고, 예측을 불허하는 가변 길이의 힙 메모리를 절대로 단 1바이트도 허용하지 않는 군국주의적 고정 크기 배열(Fixed Size Array) 선언의 생존 철학과 바이트 정렬(Alignment) 밀집 규칙을 강제로 체득한다. - 상수(Constants) 및 비트마스크(Bitmask) 인라인 정의 매핑 플로우: 메시지 인프라 내에서 C++의 명시적 열거형
enum타입이나 더러운#define매크로 떡칠 대신, 독립된 개별 메시지 규격 텍스트 파일 그 자체 한 장 단면에 현재 상태값(Status) 플래그 상수를 대체 어떻게 깔끔하게 선언하고 변수와 엮어 넣는지, PX4의 자체적인 메타 문법 파싱 기법을 완전하게 마스터한다.
이러한 군더더기 없는 엄격한 문법 규칙들을 손가락 타건 근육 단위로 외우고 장악하는 순간, 엔지니어인 당신은 마침내 무질서하게 요동치는 센서 로우(Raw) 데이터의 구조를, 방대한 비행기 제어 스탭 시스템 아키텍처 상에서 가장 가볍고 효율적이며 파편 없는 C++ struct 메모리 덩어리 배열의 형태로 가장 우아하게 조각 및 포장해 내는 위대한 데이터 조각가(Sculptor)의 절대적 경지에 거침없이 오르게 될 것이다.