- 博客(25)
- 收藏
- 关注
原创 SOME/IP报文格式及发现协议详解
本质:SOME/IP-SD 是SOME/IP 的服务发现机制,可以理解为一种特殊的服务,用于动态管理和发现网络中的服务。功能定位服务(Service Discovery):客户端寻找某个服务,服务器响应并告知 IP/端口。订阅(Subscription):客户端订阅事件组(Eventgroup),服务端确认或拒绝。SD 消息类型解析SOME/IP-SD 的消息分为两大类服务发现相关(Service Discovery):客户端查找服务(广播/多播)。(client)
2025-02-07 23:14:45
1321
原创 车载以太网__传输层
IP(Internet Protocol,互联网协议)是网络通信的核心协议,用于标识设备并确保数据包能够正确地在网络中传输。如果具象化的说就是住处的地址。MAC就相当于身份证。IP地址可能会变,MAC由网卡决定短期内一般不会更变。IP位于OSI7层模型中的的网络层,⽹络层的主要作⽤是:实现主机与主机之间的通信,也叫点对点通信。组播(Multicast)是一种“一对多”或“多对多”的网络传输方式,允许发送方(Source)只发送一份数据包,而网络设备(路由器、交换机)根据组播路由协议将这份数据。
2025-02-05 00:39:22
934
原创 Fastdds学习分享_xtpes_发布订阅模式及rpc模式
将 Protobuf之类的序列化方式转换为 DDS 兼容的数据格式,那么他就不支持其他序列化协议。这种耦合有其好处也有其坏处。像ros1这种没有将序列化下沉到中间件而是用应用层来处理的,就可以通过sfinea机制来让他兼容protobuf.有好有坏吧。类型检查这些也不必多说,常规操作。
2025-02-04 08:00:00
1030
1
原创 车载以太网---数据链路层
在上一章节中,我们讲解了数据链路层与物理层的接口MIIM,在本章中我们主要介绍车载网络中的数据链路层。在传统的很多厂商可能可能只有MAC协议。这是因为在实践中,对于许多已经成熟的局域网(尤其是以太网)来说,常常已经被“弱化”或“合并”到 MAC 中去,或者直接由(TCP/IP)来处理逻辑链路方面的控制和复用。对于车载网络而言,厂商通常更关注等 MAC 级别的功能,而对 LLC 层的需求不大,或者说直接由其他高层协议代替了 LLC 的功能。至于 LLC 子层,大多厂商直接让。
2025-02-01 20:34:29
871
原创 PYH与MAC的桥梁MII/MIIM
在发送数据时,PHY接收从MAC过来的数据,将并行的数据转化为串行流数据,按照物理层的编码规则把数据编码,再变为模拟信号把数据发出去。在学习车载互联网时,看到了一句话,Processor通过DMA直接存储访问与MAC之间进行数据的交互,MAC通过MII介质无关接口与PHY之间进行数据的交互。常见的以太网硬件结构是,将MAC集成进Processor芯片,将PHY留在Processor片外,做成单独的收发器芯片。主要负责对PHY芯片寄存器进行读写,管理配置,设置工作模式,监控PHY等操作。
2025-01-30 20:40:16
1109
原创 Protobuf序列化协议使用指南
在本篇博客中,将会介绍protobuf的理论及使用方法。该文章仅做分享使用及自我复习使用,使用的图片来自百度,无法找到作者,如若侵权请联系删除。目录简介概述1.protobuf是什么?2.序列化/反序列是什么?2.1 序列化与反序列化:定义与概念2.2 序列化协议的特性2.3 序列化的实现组件2.4 常见序列化协议及选型建议Protobuf:高效的序列化协议典型应用场景与局限性适用场景局限性Protobuf 的 IDL 文件示例使用 Protocol Buffers 的完整流程。
2025-01-26 22:54:32
962
原创 linux asio网络编程理论及实现
在本篇博文中,主要梳理了asio多线程网络编程其中一种方案的实现及理论。在写的时候发现了一点问题,就是说server管理了session节点,但是我看析构的时候,并没有将所有节点删除。而是在main函数捕获信号,然后通过io_context池子来stop了所有的io_context,让io_context.run()立即返回,并且回收了所有的线程.但是io_context.run()返回了也就是内部的epoll不在epolll_wait了是否就可可以使管理的session是否不用移除,回头再看一下代码吧。
2025-01-26 00:43:25
1181
原创 SOME/IP服务接口
在前面的博客中我们介绍了SOA,英文翻译过来是面向服务。SOME/IP(Scalable service-Oriented Middleware over IP)是一种基于服务导向架构(SOA)设计的中间件协议,专为汽车行业中的分布式计算系统而设计。它用于在汽车电子系统(特别是车载网络和 ECU 之间)中实现高效的数据交换和通信。SOME/IP 基于 IP 协议,允许不同的车载控制单元(ECU)之间进行通信,支持高效的服务发现和消息传输。这一章主要介绍的是SOME/IP协议的服务接口。
2025-01-23 01:07:29
1222
原创 Fastdds学习分享_概述及实现
本系列文章将分享我在学习 hzy 博客时的一些感悟,并结合 FastDDS 的理论知识进行讲解。主要内容是梳理 hzy 博主分享的知识,并结合实际代码展示 FastDDS 的使用,旨在自我复习并与大家交流。为了与之前的文章有所区分,本系列文章将主要聚焦于配置方面的内容,而不深入源码分析。同时,本系列将引用 hzy 大佬的观点和图片。 DDS(Data Distribution Service,数据分发服务)是一种规范,由Object Management Group (OMG) 制定
2025-01-22 23:22:05
836
原创 单例及线程池的实现及感悟分享
放假之后抽空写了一下自己的一些理解和感悟,希望后面能找一个好一点的实习。后面主要会写车载网络的一些知识,也穿插一下和普通TCP/IP的区别,DDS和SOME/IP的一些实战。源码还是等工作后有空再写吧。
2025-01-20 21:53:41
879
2
原创 Fastdds_ContentFilteredTopicExample_代码剖析5_create_publisher
在创建完之后,将新创建的发布者对象 pub 存储到 publishers_ 中,以便后续可以根据发布者对象的名称快速找到对应的发布者实现对象。我们可以看到他需要传入3个参数,qos策略用于保证数据传输的要求得以满足,监听器用于返回发生的事件,mask用于表示发布者监听器所监听的状态掩码,用于指定监听哪些状态的变化。我们可以看到他这里传入的是一个默认的QOS,然后域参与者将让实体去对发布者进行创建。在注册完类型之后,我们就可以看见,域参与者对发布者进行创建了。之后他会转到域参与者实体的这个函数。
2024-09-18 18:01:56
269
原创 Fastdds_ContentFilteredTopicExample_代码剖析4register_type
在构建为类的时候,由于接受了HelloWorldPubSubType()内部构建的TopicDataType的指针,可用同时使用->来访问父类TopicDataType的内容,同时他又可以用.来访问类里面的内容。其实这里public std::shared_ptr里面可以不用是父类也可以是其他想要组合的类,在构造函数的时候可以接受一个相同的指针从而达到组合的目的。他其实是把自身传递给了域参与者的注册函数,同时获取默认的类型名称,或者可以自己指定类型名。这段代码的主要功能就是。
2024-09-11 17:06:37
781
原创 Fastdds_ContentFilteredTopicExample_代码剖析3_create_participant
在上一章节中,我们观察了域参与者qos创建背后的一些行为,在本章中,我们将查看域参与者工厂是怎么创建域参与者的,与此同时,域参与者工厂又在这里面起了什么作用。(本篇文章来源于作者自己对于源码的理解,非常主观,如有错误敬请见谅)我们可以看见,域参与者是由域参与者工厂的一个单例模式进行创建的。该单例模式的代码如下:我们可以看到这就是一个懒汉式的单例模式,但是我们可以看见他并没有创建锁来保证线程安全。
2024-09-04 17:40:02
1160
原创 SOA概述2_SOA中的角色分类
值得注意的是,相同设备上可以有多个server或者client但是只能有一个服务中心.还有一个不要以为是服务中心提供了服务,其实打个形象的比喻,这个服务中心就相当于婚介所,一方给婚介所上传自己的资料付钱,婚介所就广播,另一方也可以通过婚介所查询。在上一章中我们简单介绍了,SOA的一些基本概念,在本章中我们主要介绍SOA中的三种角色,以及解决上一章中的问题。由于SOA是分布式架构,且因为是提供服务。维护成本:当每个服务都依赖于其他服务反而会变得复杂,也就是服务粒度问题,这时候就该聚合服务。
2024-08-02 13:48:24
431
原创 Fastdds_ContentFilteredTopicExample_代码剖析2_qos
在上一章节中,我们观看了FastDDS提供的ContentFilteredTopicExample案例中发布者初始化的一个大致流程,在本章中我们将详细观察在初始化的过程中,qos做了什么。在进入代码观看之前,我们需要简单介绍一下qos的概念。即服务质量规范,在官方的介绍中,对Qos作出了以下的定义:“数据还可以通过灵活的服务质量 (QoS) 规范进行共享,包括可靠性、系统运行状况(活跃性)甚至安全性。在真实的系统中,并非所有其他端点都需要本地存储中的所有数据。DDS 很聪明,只发送它需要的内容。
2024-07-26 16:06:30
2202
原创 ROS源码学习分享_8_advertise
在本章节中我们观看了XmlrpcManager启动背后的一些行为,以及advertise背后的行为。
2024-07-24 15:35:05
1308
原创 Fastdds_ContentFilteredTopicExample_代码剖析1
值得注意的是,QoS(Quality of Service)策略,设置 DomainParticipant 的名字也是其中的一部分。DDS(Data Distribution Service)是一个开放标准,定义了一种用于分布式系统中数据交换的中间件,由Object Management Group(OMG)定义。在本章中,将会对FastDDS提供的案例ContentFilteredTopicExample进行一个学习分享且对整体的代码进行一个大概的解释,并在后面几章深入各个模块分析。
2024-07-23 14:41:46
1758
原创 ROS源码学习分享_7_NodeHandle小结
之后创建了一个transportTCP调用了listen函数,在listen函数中他会将创建一个socket套接字,并其与Update函数添加到poll_set_的epoll中,每次触发就进行回调。在warpper代码中,他设置了一个execute执行函数去执行回调,由于其继承了XmlRpcServerMethod,其构建了一个XmlRpcServerMethod的基类。由于该模块功能较多,本章将结合前几章的内容,对Nodehandle模块的行为流程作出一个大致的梳理,详细的剖析请移步之前的章节。
2024-07-19 16:37:25
344
原创 SOA概述1
如果是不同设备则需要借助网络进行传输,例如ROS和ROS2就是典型的SOA架构,发布订阅者模型不就是通过网络通信吗,在ROS中,master节点就担任了服务中心,而ROS2中则利用了Fastdds的DCPS接口实现了rmw层,从而使用DDS中RTPS层中的发现模块,是服务中心聚合到了模块内,从而干掉了Master节点。有函数接口不一定有实体,比如我进程A和进程B通信,那我可以用进程C作为中转站,那我也可以A和B内部就有功能模块可以专门解析数据和专门封装数据,从而A和B直接通信。这也就是单体式应用程序。
2024-07-16 21:48:24
393
原创 ROS源码学习分享_6_ConnectionManager
之后创建了一个transportTCP调用了listen函数,在listen函数中他会将创建一个socket套接字,并其与Update函数添加到poll_set_的epoll中,每次触发就进行回调。这个Connection也就是负责数据的头部发送,发送,连接中断检查的负责模块,也是网络编程中的一个概念。后面的这一部分是启动TCP连接,实际上是启动了listen函数,tcprosAcceptConnection是连接后产生的回调函数,这里会把它设置为tcpserver_transport_的。
2024-07-16 16:26:57
2440
原创 ROS源码学习分享_5_PollManager
还记得我们在上一章讲的槽信号吗,在topic一端他将发布队列给到槽信号进行一个绑定,那么这里就是异步调用的另一端,他会调用槽信号函数,去处理发布队列。在调用一次之后他会判断节点是否关闭,没有关闭的话他会调用updata函数。在上一章节中,我们了解了TopicManager节点启动背后的一些行为,本章我们将介绍同为控制节点的PollManager相关的一些源码行为。他会在上锁之后查询套接字有没有改变,没有改变则返回。首先他将shutting_down_设置为false,这个变量设置为true意思为节点关闭。
2024-07-12 13:58:57
366
原创 ROS源码学习分享_TopicManager::start()
在此篇文章中我们观看了ros源代码中,xml_rpc是如何绑定回调函数的机制以及如何异步处理发布队列是如何实现的
2024-07-10 22:50:04
1150
原创 ROS源码学习分享_2_init初始化
初始化,作为ros程序最开始的步骤,在程序的运行中发挥着至关重要的作用。大部分学习ros的小伙伴也许并不了解其背后的作用,只是简单的认为拥有给节点命名的功能。这一块代码的作用则比较简单,将当前参数argv[i]临时存储在tmp中,然后通过一个循环将argv数组中所有后续参数前移一个位置,最后将tm[放在数组末尾并减少argc,表示去掉了一个参数。在检查了ipv6的网络环境之后,会对network,master,param等根据重映射表里的参数进行对应设置,在深入下去就写的太多了,读者有兴趣可以自行了解。
2024-07-05 11:50:18
641
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人