准的订阅主题。如果一个发布器希望使用某一标准的订阅主题和其相关的数据结构,不需要再做额外的工作。
常规订阅主题
为了定义一个常规的订阅主题,发布器需要为订阅器建一个可用的头文件(上面的topich)。在这个头文件里必须包含:
将订阅主题的名字作为参数的一个ORB_DECLARE宏实例。一个用于描述将发布数据结构的结构定义。
订阅主题的名字应该是描述性的;PX4的命名规则是是使用下划线分开订阅主题的名字;组件的名字应该首先使用通用的词汇。例如,原始传感器数据在se
sors_raw订阅主题中进行发布。除了头文件,发布器必须包含一个ORB_DEFINE宏实例在源文件中,该文件可以在构建固件时被编译和链接(见publisherc示例)。这个宏来构建由ORB使用的数据结构,从而唯一表示这个topic。
可选的订阅主题(optio
altopic)
如果一个由软件组件发布的订阅主题是可选的,并且可能不会出现在固件中,头文件可以使用ORB_DECLARE_OPTIONAL宏代替。以这种方式声明的订阅主题需要由发布器进行特别的处理,但是还有一些以下需要讨论的考虑,订阅器在处理可选订阅主题时必须要注意。
通告(advertise)订阅主题
在数据发布到一个订阅主题时,必须首先通告。发布器使用如下的API通告一个新的订阅主题:
1234
AdvertiseasthepublisherofatopicThisperformsthei
itialadvertiseme
tofatopicitcreatesthetopic
f56789101112131415161718
odei
objifrequireda
dwritesthei
itialdataparammetaacro宏)paramdata指向将要publish初始数据的指针。eadvertiseme
tretur
a
DECLAREENOENTexter
i
ttaorb_advertiseco
ststructorb_metadatametaco
stvoiddathisfu
ctio
willretur
1a
dseterr
otoORB_DEFINE_OPTIONALwith
ocorrespo
di
gORB_mustbeperformedfrom
o
i
terruptco
textERRORo
errorotherwiseretur
saha
dlethatca
beusedtopublishtothetopicIfthetopici
questio
is
otk
ow
duetoFortopicspublishedbyi
terruptha
dlersthApoi
tertothei
itialdatatobepublishedforthetopictopicuORB元数据(通常来自ORB_IDTheuORBmetadatausuallyfromtheORB_IDm
通告同时为订阅主题发布初始数据。API的meta参数是由ORB_DEFINE宏产生的数据指针,通常使用ORB_ID宏提供,该宏执行从订阅主题名到元数据结构名的转换。需要注意的是,可以从中断句柄中发布实时更新,但是通告订阅主题必须在常规线程的情况下。
多个发布器
一个发布器一次只能通告一个订阅主题,然而发布器可能会关闭订阅主题句柄(这是个文件句柄,可以简单的传递到close()函数),然后r