Apollo CyberRT 深入理解系列

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容