技术新讯 > 电子通信装置的制造及其应用技术 > 一种单线程DDS协议栈及其实现方法与流程  >  正文

一种单线程DDS协议栈及其实现方法与流程

  • 国知局
  • 2024-08-02 14:49:48

本发明涉及数据通信,具体涉及一种单线程dds协议栈及其实现方法。

背景技术:

1、dds(data distribution service)是一种用于实时系统的数据分发服务。它是一种中间件技术,用于在分布式系统中传输和分发数据。dds可以提供高效、可靠和实时的数据传输机制,实现在不同的计算机节点之间进行数据交换和共享,因此受到汽车行业的高度关注。

2、dds在汽车开放系统体系结构自适应平台(autosar ap,automotive open systemarchitecture adaptive platform)中已经开始应用。但是基于单线程实现dds协议栈的方法还没有标准的规范。

3、在嵌入式系统和其他资源受限环境中,高效的内存管理对系统性能至关重要。传统的内存分配和释放方式容易导致碎片化和性能瓶颈。急需基于单线程中实现dds协议,实现dds、rtps、transport实体之间的协议传输,并且开发出timer_event时间超时管理事件队列的方案。该方案能够实现单线程中的不同类型消息事件的发送接收,并且引入物理内存分割的管理方案,实现dds协议中各个实体对象的内存分层是安全隔离的,内存大小是可信可控的,从而满足汽车行业对模块间通信安全的要求。

技术实现思路

1、本发明的目的是:提供一种创新的内存管理系统,通过预先分配内存池并采用位集技术,实现更高效、更可控的内存分配和释放。

2、为了实现上述发明目的,本发明的技术方案是提供了单线程dds协议栈,所述协议栈及其平台包括dds实体对象、cp wrapper模块、斐波那契堆、udp消息接收接口、pdur数据接收接口以及内存池,dds实体对象包括pdp模块、heartbeat模块、acknack模块和datafrag模块、rtps模块、dds模块、transport模块;

3、在rtps模块初始化时,创建pdp模块、heartbeat模块、acknack模块、datafrag模块用于消息发送事件,并将创建的事件插入到斐波那契堆;

4、dds模块读取数据前,驱动rtps模块确认当前participant任务队列中最早被调度的事件是否过期,如果过期,则从斐波那契堆中提取最早的事件,并删除斐波那契堆中原事件结点;

5、然后rtps模块执行最早事件对应的回调函数,即执行前述的pdp模块、heartbeat模块、acknack模块或datafrag模块进行消息发送事件;

6、回调函数执行完毕后,如果当前事件在之后的通信中仍需要调用,并非单次执行事件,则重新调整斐波那契堆,将当前执行完毕的事件结点插入到斐波那契堆;

7、然后循环往复检查participant任务队列中的过期事件,并执行过期事件,直至participant任务队列中过期事件全部处理完毕;

8、transport模块初始化以及构建时,将transport通道构建为双向循环链表;

9、消息接收处理接口位于dds模块,dds模块驱动rtps模块transport通道通过回调函数监听消息;

10、对于posix,监听回调函数封装udp消息接收接口,transport通道将通过udp消息接收接口监听以太网中的udp消息,然后rtps模块再对接收到的udp消息进行反序列化、质量服务管理以及安全管理处理;

11、对于autosar cp,监听回调函数封装pdur数据接收接口,cp wrapper模块用于获取lowlayer的pdur数据,transport通道会通过cp wrapper模块将来自pdur模块的数据路由给rtps模块,然后rtps模块再对接收到的pdur数据进行反序列化、质量服务管理以及安全管理处理,最后rtps模块将处理完毕的数据返回到pdur-r uplayer;

12、内存池对dds实体对象不同的实体对象进行了预先分配内存,统一对dds实体对象的内存管理,使用位集数组来对内存池的使用进行标记和管理,位集数组是一个元素为无符号32位整数的数组,每一位都代表一种状态,内存池使用了个元素为相应类型的实体对象的数组,用来存储实际的元素数据;当从内存池中分配一个dds实体对象时,从数组中获取一个可用的元素,并将其对应的位集数组的位标记为1,表示已使用;

13、当释放一个dds实体对象时,将对应的位集数组的位标记为0,表示未使用;

14、在系统初始化时,全局变量池被创建并预先分配足够的内存池空间,当dds实体对象需要获取内存时,通过位集技术,快速查找未使用的内存块,分配找到的空闲内存块,更新位集信息,返回分配的内存地址;

15、当dds实体对象完成对内存的使用时,根据释放的内存地址,计算在内存池中的索引,通过位集技术,清除相应的内存块占用标记,释放内存块,针对可能的内存释放两次的情况,进行检查和提醒。

16、本发明的技术方案还提供了一种单线程实现dds协议栈的方法,采用所述的一种单线程dds协议栈,所述方法用于将dds协议集成在单核的硬件环境中使用,实现包含时间事件管理、内存管理和内存池,所述dds实体对象还包括write模块和read模块,所述方法包括以下步骤

17、write模块发送dds协议栈的消息,write模块完成发送之后,read模块开始接收对端的dds协议栈的消息,read模块接收完整之后,重复write模块开始发送dds协议栈的消息;

18、时间事件管理包括:

19、write模块在发送数据时,管理所有发送的消息的队列,使得所有队列中的消息按照预设的时间间隔发送消息;

20、read模块在接收数据时,管理所有需要接收的消息类型的队列,使得所有队列中的消息类型按照预设的时间间隔触发接收消息;

21、内存管理和内存池包括:

22、write模块在发送数据的过程中,使用的dds协议栈的内存包含dds模块的participant模块、rtps模块、pub模块、write模块的内存管理;

23、read端在接收数据的过程中,使用的dds协议栈的内存包含dds模块的participant模块、rtps模块、sub模块、read模块的内存管理;

24、内存管理和内存池的关键特征包括:内存池预先分配、位集技术和全局变量池。

25、优选地,所述时间事件管理包括超时处理接口设计,用于所述write模块发送pdp、heartbeat、acknowledge消息;

26、write模块在dds模块读取数据前,驱动rtps模块确认当前participant任务队列中被调度的事件是否过期;

27、如果过期,则从创建的斐波那契堆中提取最早的事件,并删除创建的斐波那契堆中原事件结点;

28、然后rtps模块执行最早事件对应的回调函数,执行pdp、heartbeat、acknack或datafrag消息发送事件;

29、write模块在的回调函数执行完毕后,如果当前事件在之后的通信中仍需要调用,并非单次执行事件,则重新调整创建的斐波那契堆;

30、将当前执行完毕的事件结点插入到创建的斐波那契堆,然后循环往复检查participant任务队列中的过期事件,并执行过期事件,直至participant任务队列中过期事件全部处理完毕。

31、优选地,所述时间事件管理包括独立的消息接收处理接口的设计;

32、read模块用于驱动transport factory所有内部通道,监听并接收各个通道的数据,并将数据传递给与其关联的reader;

33、read模块的transport模块初始化以及构建时,将transport通道构建为双向循环链表,消息接收处理接口位于dds模块,dds模块驱动rtps模块transport通道通过回调函数监听消息;

34、对于posix,监听回调函数封装udp消息接收接口,transport通道将通过udp消息接收接口接口监听以太网中的udp消息,然后rtps层再对接收到的udp消息进行反序列化、质量服务管理以及安全管理处理;

35、对于autosar cp,监听回调函数封装pdur数据接收接口,cp wrapper模块用于获取lowlayer的pdur数据,transport通道会通过cp wrapper模块将来自pdur模块的数据路由给rtps层,然后rtps层再对接收到的pdur数据进行反序列化、质量服务管理以及安全管理处理;

36、rtps模块将处理完毕的数据返回到pdur-r uplayer。

37、本发明的技术方案提出一种单线程dds协议栈及其实现方法,支持wrire和read串行通信,并且wrire和read都有多种消息类型以及支持多个wrire,多个read的多对多的收发通信。在通信中使用了内存池与内存管理方法,是每个实体通信对象都有独立的一块内存使用,从而提高通信时的数据安全。

本文地址:https://www.jishuxx.com/zhuanli/20240801/243989.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。