19.2.4.1. `build/.../uORB/topics/sensor_test_data.h` 파일 구조 및 경로 확인

19.2.4.1. build/.../uORB/topics/sensor_test_data.h 파일 구조 및 경로 확인

성공적인 컴파일 빌드 로그의 시뻘건 잔상이 터미널 콘솔 화면에 아직 아스라이 남아있다면, 이제 우리가 터미널에서 창조한 텍스트 파일 쪼가리가 실제로 무결한 C++ 시스템 헤더의 육신을 얻어 픽스호크 파일 시스템 트리에 무사히 잉태되었는지 그 물리적 실체를 해커의 두 눈으로 매섭게 확인할 차례이다.
입문 초보자들은 흔히 이 변환된 C++ 파일이 자신이 .msg를 낑낑대며 작성했던 msg/ 최상위 디렉토리 바로 근처 어딘가에 살갑게 나란히 놓여 있을 것이라 순진하게 착각한다. 하지만 PX4 빌드 생태계는 원본 소스 코드(src/)의 무결한 청결함을 유지하기 위해, 제너레이터가 뱉어낸 부산물 찌꺼기들을 극도로 잔인하고 철저하게 격리하는 외딴 경로 정책을 폭력적으로 취한다.

1. 컴파일 결과물의 은폐된 샌드박스 경로 추적

파이썬 제너레이터 파서 엔진이 핏빛으로 뱉어낸 C++ 객체 헤더 파일들은 철저하게 build/ 디렉토리 하위의, 우리가 방금 타격한 빌드 타겟 종속적인(Target-dependent) 깊은 심연 속으로 영원히 격리 수용된다. 우리가 SITL(Software-In-The-Loop) 가상 타겟으로 make px4_sitl_default 빌드를 돌렸다면, VFS 터미널에서 다음 경로를 향해 하드디스크 탐색 명령을 거침없이 날려보자.

# PX4 마스터 펌웨어 루트 디렉토리 최상단에서 검색 실행 타격
ls -l build/px4_sitl_default/uORB/topics/sensor_test_data.h

만약 이 리눅스 쉘 타격 커맨드의 반환값으로 해당 파일의 시스템 소유자 권한과 용량, 그리고 방금 전 빌드를 때린 찰나의 생성 시간(Timestamp)이 고요하게 터미널에 출력된다면 빙고다. 우리가 19.2.2 단원에서 오만하게 대문자 파스칼 케이스(PascalCase)로 정성껏 명명했던 SensorTestData.msg가, uORB 파이썬 파서의 절대 규칙에 의해 강제로 소문자 뱀 가죽(Snake Case)을 뒤집어쓴 채 **sensor_test_data.h**라는 완벽하고 거룩한 C++ 시스템 헤더 마스터 파일로 환생해 있는 명백한 물리적 증거를 획득한 것이다.

2. 트랜스파일된 헤더 파일의 거시적 스켈레톤(Skeleton) 폭창 구조

이제 VSCode 편집기나 터미널 cat 명령어를 억지로 이용하여 이 은밀한 .h 파일의 배를 가르고, 그 내부 C++ 코드의 미친듯한 거시적 윤곽을 빠르게 레이더 스캐닝해보자. (안의 세부적인 링커 매크로와 구조체 메모리 바이트 분석은 다음 19.2.4.2 단원에서 핀셋으로 극한으로 파헤칠 것이다).

이 숨겨진 파일을 폭력적으로 열면, 고작 10여 줄에 불과했던 한낱 우리의 .msg 마크다운 텍스트 쪼가리가, 무려 수십수백 줄에 달하는 거대한 C/C++ 보일러플레이트(Boilerplate) 코드로 잔혹하게 팽창(Bloat)해 있는 경이로운 아키텍처적 광경을 목격하게 된다. 기본적인 파일의 골격은 컴파일러 친화적인 다음과 같은 3중 방어 스택(Stack) 구조로 가장 견고하게 타설되어 있다.

  1. C/C++ 호환성 크로스 헤더 가드(Header Guard) 및 인클루드 맵: 파일 최상단에 #pragma once와 함께 stdint.h, stdbool.h 등 임베디드 코어 메모리 스칼라 타입 맵을 끌어오는 플랫폼 표준 C 라이브러리들이 무더기로 맹렬하게 배열되어 있다. 또한, 혐오스러운 C++ 컴파일러의 함수 네임 망글링(Name Mangling) 현상을 강제로 막아버리기 위한 __cplusplus 분기문과 extern "C" 래퍼(Wrapper)가 거대하게 파일 생태계 전체를 감싸고 외부로부터의 오염을 철벽 방어한다.
  2. 데이터 패킹 struct의 절대적 선언부: 우리가 그토록 심혈을 기울여 명세했던 8바이트 타임스탬프 제왕과 각종 스칼라 데이터 비트 배열 묶음들이, 1바이트의 패딩 낭비도 없이 폰 노이만 하드웨어 아키텍처에 가장 완벽하게 순응하는 C/C++ 표준 struct sensor_test_data_s (px4 코딩 룰에 의해 반드시 _s 접미사가 꼬리로 달림) 형태로 소름 돋게 치환되어 묵직하게 자리 잡고 있다.
  3. 메타데이터 제어기 및 ORB_DECLARE 매크로 포인터 앵커: 헤더 파일의 최하단 밑바닥에는, 이 파일이 구형의 단순한 깡통 데이터 구조체에 머무르지 않게 해주는 코어 마법진이 쳐져 있다. 이것을 거대한 PX4 uORB 미들웨어망의 “살아 숨 쉬는 토픽(Topic) 노드“로 단번에 격상시켜 주는 주소 포인터 매크로인 ORB_DECLARE와 절대적 토픽 네임스페이스 ID(ORB_ID)가 아주 무겁고 묵직하게 닻을 내리고 있다.

이처럼 C/C++ 호스트 컴파일러 툴체인의 하드디스크 깊숙한 샌드박스 경로에 똬리를 틀고 둥지를 튼 이 sensor_test_data.h 파일은, 이제 향후 우리가 작성할 수없이 많은 PX4 커스텀 C++ 애플리케이션 데몬 모듈들이 C++ 코드 최상단에서 가장 먼저 #include 구문으로 탐욕스럽게 훔쳐가야 할 최우선 공통 컴파일 참조 헤더(Common Reference Header)의 거룩한 마스터 역할을 시스템 내에서 단독 독점 수행하게 될 것이다.