Apollo CyberRT 深入理解系列

2020-08-29  本文已影响0人  飞天小小猫

Cyber Classloader : https://zhuanlan.zhihu.com/p/91322837

Cyber Component : https://zhuanlan.zhihu.com/p/116782645

component的工作流程大致如下:

  1. 通过继承"cyber::Component",用户自定义一个模块,并且实现"Init()"和"Proc()"函数。编译生成".so"文件。
  2. 通过classloader加载component模块到内存,创建component对象,调用"Initialize()"初始化。(Initialize中会调用Init)
  3. 创建协程任务,并且注册"Process()"回调,当数据到来的时候,唤醒对象的协程任务执行"Process()"处理数据。(Process会调用Proc)

DataVisitor和DataDispatcher : https://zhuanlan.zhihu.com/p/117318368

数据的访问都是通过"DataVisitor"来实现,数据的分发通过"DataDispatcher"来实现。reader中也是通过DataVisitor来访问数据,在reader中订阅对应的DataDispatcher。

也就是说如果要订阅一个通道,首先是在reader中注册消息的topic,绑定DataDispatcher,之后对应通道的消息到来之后,触发DataDispatcher分发消息,而DataDispatcher通过DataVisitor中的Notify唤醒协程,从DataVisitor中获取消息,并执行协程中绑定的回调函数,以上就是整个消息的收发过程。

数据处理流程 : https://zhuanlan.zhihu.com/p/115046708

image

Cyber通信上层:https://blog.csdn.net/qq_25762163/article/details/103803032

Cyber通信底层:https://blog.csdn.net/qq_25762163/article/details/103895527

Cyber C++共享内存通信的实现: https://blog.csdn.net/qq_25762163/article/details/103945289

Apollo 3.5 Cyber 多進程通訊模塊 - Transport (Shared Memory篇):https://blog.csdn.net/weixin_44450715/article/details/86314193

上一篇下一篇

猜你喜欢

热点阅读