19.3.3. uORB Topic 광고(Advertisement) 및 발행(Publication)
워커 스레드 내부에 텅 빈 공간으로 방치되어 있던 C/C++ 구조체의 골조에 0의 포맷팅 시멘트를 붓고, 그 위에 거대한 timestamp 앵커와 모사(Mock-up) 스칼라 페이로드값들을 빈틈없이 꽉꽉 채워 넣었다면, 이제 개발자의 손에는 폭발하기 일보 직전의 완벽하게 팩킹(Packing)된 압축 데이터 폭탄이 하나 쥐여진 셈이다.
하지만 이 데이터 덩어리 폭탄은 아직 내 스레드의 로컬 힙/스택 메모리 영역 바운더리 안에만 초라하게 고립되어 머물러 있을 뿐이다. 실제 PX4 미들웨어를 관장하는 전역 uORB 링 버퍼(Ring Buffer) 네트워크망의 심장부에는 아직 단 1바이트의 트래픽도 닿지 않은 먹먹한 상태이다.
이 통합 단원에서는 멍청한 데스크탑 앱의 지역 메모리 바운더리를 산산이 박살 내버리고, 우리가 손수 빚어 만든 통신 구조체 데이터를 픽스호크 펌웨어 코어 VFS 시스템 전역으로 무자비하고 광력하게 방출 폭발시키는(Publish) 가장 파괴적인 미들웨어 통신 해킹 스킬들을 관통한다. 이 절정의 통신 타설 과정은 다음과 같은 치밀한 이단(Two-stage) 폭발 시퀀스의 아키텍처로 전개된다.
- 1단계: 미들웨어 영공 침입 선전포고 (Advertisement 형질 변경): 단 한 번의 무한 루프 진입 전, “나의 애플리케이션 데몬이 지금부터 이 규격의 데이터를 독점적으로 쏠 권한이 있다“고 uORB 코어 통제소에 오만하게 광고(Advertise)하여, 세상에 없던 타겟 전용 메모리 주소 파이프망을 시스템 커널로부터 강제로 할당받아내는
orb_advertise()C 코어 API 혹은uORB::PublicationC++ 래퍼 클래스의 인스턴스화 개통 과정을 해부한다. 이 선포권이 커널단에서 반려당하면, 향후 쏟아붓는 수만 개의 데이터는 그저 공허한 메모리 릭(Leak) 늪에 빠져 영원히 증발해 버릴 뿐이다. - 2단계: 무한 루프 통로 폭격 트리거 (Publication 타격): 합법적인 시스템 파이프망이 1단계에서 단 한 번 무사히 개통되었다면, 매번 100Hz로 메인 무한 루프가 무자비하게 회전할 때마다 우리가 방금 전 꽉 씹어 채워둔
sensor_test_data_s구조체 덩어리를 이 열린 파이프로 밀어 던져 넣어 전 시스템 VFS 링 버퍼망으로 폭력적으로 방출(Publish)해 버리는,orb_publish()C++ 명령 트리거 타격의 극한 통쾌함을 맛본다.
이 두 가지 코어 미들웨어 통신 인프라 타격을 물리적으로 무사히 코드에 이식하게 되면, 픽스호크 마더보드 위를 둥둥 떠도는 수십수백 개의 EKF 다중 추정기 생태계 스레드들과 ULog 로거(Logger) 백그라운드 데몬들이, 당신이 허공에 쏘아 올린 텔레메트리 데이터를 피라냐처럼 앞다투어 주워 먹고 해석하기 시작하는 장엄한 PX4 데이터 생태계의 미친 군무(Dance)를, 곧 쉘 디버그 모니터링을 통해 직접 두 눈으로 똑똑히 목격하게 될 것이다.