CN117896201A - 多端口通信系统及方法 - Google Patents
多端口通信系统及方法 Download PDFInfo
- Publication number
- CN117896201A CN117896201A CN202311827368.0A CN202311827368A CN117896201A CN 117896201 A CN117896201 A CN 117896201A CN 202311827368 A CN202311827368 A CN 202311827368A CN 117896201 A CN117896201 A CN 117896201A
- Authority
- CN
- China
- Prior art keywords
- data
- port
- packet
- receiving
- hardware
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000004891 communication Methods 0.000 title claims abstract description 74
- 238000000034 method Methods 0.000 title claims abstract description 61
- 238000012545 processing Methods 0.000 claims abstract description 61
- 230000003993 interaction Effects 0.000 claims abstract description 14
- 238000001514 detection method Methods 0.000 claims description 58
- 239000000872 buffer Substances 0.000 claims description 45
- 230000004044 response Effects 0.000 claims description 35
- 230000005540 biological transmission Effects 0.000 claims description 31
- 230000008569 process Effects 0.000 claims description 21
- 238000004806 packaging method and process Methods 0.000 claims description 8
- 230000008878 coupling Effects 0.000 claims description 3
- 238000010168 coupling process Methods 0.000 claims description 3
- 238000005859 coupling reaction Methods 0.000 claims description 3
- 230000007717 exclusion Effects 0.000 description 13
- 230000006870 function Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000002184 metal Substances 0.000 description 2
- 238000012858 packaging process Methods 0.000 description 2
- 239000012536 storage buffer Substances 0.000 description 2
- 230000033772 system development Effects 0.000 description 2
- 102100034112 Alkyldihydroxyacetonephosphate synthase, peroxisomal Human genes 0.000 description 1
- 101000799143 Homo sapiens Alkyldihydroxyacetonephosphate synthase, peroxisomal Proteins 0.000 description 1
- 238000000848 angular dependent Auger electron spectroscopy Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Landscapes
- Communication Control (AREA)
Abstract
本发明涉及通信领域,并公开了一种多端口通信系统及方法,该系统包括:控制模块、功能模块、接收数据处理模块、发送数据处理模块,控制模块为单核MCU,用于充分计算处理多个端口,处理功能模块的数据,并和功能模块进行通信交互,通过接收数据处理模块对接收的数据进行优先级配置,按照优先级顺序依次接收的数据;通过发送数据处理模块待发送的数据进行优先级配置,按照优先级顺序依次发送待发送的数据;通过一套软件处理流程方法以及对端口通信模式的建议使MCU端的数据交互处理效率保持在一个较高的水平,以此来维持域控制系统的高速高效性,将单核MCU的性价比提升到最大。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种多端口通信系统及方法。
背景技术
在当前的汽车ADAS/AD电子电器架构中,主流的L2+和L3的域控制器都是由一个或两个SoC加上一颗Safety MCU来完成的,其中SoC负责感知,全局路径规划等,MCU则负责目标级的传感器融合和实时性要求很高决策任务。
在智能座舱域控制系统中,对MCU同样有高实时性的要求。作为域控制系统中的核心模块之一,MCU实现的功能安全以及高速信息交互链路所依赖的就是信息交互的高效率、高实时性。MCU既需要实时从CAN总线上接收处理来自各个传感器或功能模块的数据,还需要与SoC以及其他的功能模块进行高实时性的数据交互。
在电子电器架构中绝大部分使用的是多核MCU,主要是考虑它的任务复杂性以及安全性;而在座舱域中,为了降本增效可能会采用单核MCU,在这种场景下,没有多核的高算力,这些实时性要求极高的工作对单核MCU来说是一个极大的考验。
CAN数据的处理速度取决于驱动,基于没有什么优化空间;一般高速实时性通信的端口都会选择uart来进行交互,其他的则采用I2C、SPI等方式,与其他模块的通信交互则决定了MCU的整体数据处理效率,这主要看两个参数,一个是丢包率,另一个则是交互实时性。一般域控制系统内部通信协议都制定了重发机制,即使存在丢包也能重发,但是在丢包率较高的情况下实时性会受到影响。如果是多个模块都需要与MCU进行实时信息交互,那么在MCU因为处理效率低无法使丢包率降低或者保持一个稳态时,交互重发的数据就会越来越多,最后甚至会导致MCU夯机。作为核心的信息交互模块,夯机就意味着域控制系统失去CAN总线以及其他的数据信息,可能会使域控制系统工作异常。
目前大部分的处理方式都比较常规。首先,它们大部分都选择以中断的形式来发送数据,这种方式虽然实时性极高,并且能确保发送数据的顺序以及正确性,但是另一方面它会阻塞程序,程序会一直等在发送完成中断的死循环中直到发送完成中断标志位被置为有效;其次,它们没有将发送与接收行为独立化,更多的是在接收到指令之后立即回复相应的数据包,看似实时性很高,如果是在大量数据进入到fifo(端口接收数据临时存储buffer)的情况下,fifo会因为等待发送完成中断标志位而逐渐变满甚至溢出从而造成丢包;最后,它们很少有针对多端口交互的情况去做互斥保护的功能,在高速多端口通信的情况下,没有互斥保护很容易出现数据混乱的情况。
为了系统的运行正常,通常会采取措施来避免上述可能会出现的问题。比如降低通信交互的速率,从根本上解决问题,但是这样并不能最大程度地体现出高实时性;又或者是降低重发的频率,留给MCU更多的时间去处理并交互数据,这样做的代价就是信息交互实时性会降低,域控制系统会变“迟钝”。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供一种多端口通信系统及方法,旨在解决目前单核MCU处理效率低的技术问题。
为实现上述目的,本发明提供一种多端口通信系统,所述多端口通信系统包括控制模块、功能模块、接收数据处理模块、发送数据处理模块,所述控制模块分别与接收数据处理模块以及发送数据处理模块的一端连接,所述功能模块分别与所述接收数据处理模块以及发送数据处理模块的另一端连接;
所述控制模块,用于处理所述功能模块的数据,并和所述功能模块进行通信交互,其中,所述控制模块为单核MCU,用于充分计算处理多个端口;
所述接收数据处理模块,用于对接收的数据进行优先级配置,按照优先级顺序依次接收所述接收的数据;
所述发送数据处理模块,用于对待发送的数据进行优先级配置,按照优先级顺序依次发送所述待发送的数据。
可选地,所述接收数据处理模块包括硬件接收端口和软件接收端口;
其中,每个硬件接收端口对应一个软件接收端口;
所述硬件接收端口包含接收缓冲单元;
所述接收缓冲单元,用于根据所属的硬件接收端口的优先级依次将数据进行存储;
所述软件接收端口包含数据缓冲单元;
所述软件接收端口,用于根据对应硬件接收端口的优先级进行配置,以使硬件接收端口的优先级和对应的软件接收端口的优先级保持一致;
所述数据缓冲单元,用于接收对应的硬件接收端口中接收缓冲单元存储的数据;
所述数据缓冲单元,还用于按照所述优先级顺序依次处理所述数据得到数据包。
可选地,所述发送数据处理模块包括硬件发送端口、软件发送端口以及一个消息队列;
其中,每个硬件发送端口对应一个软件发送端口;
所述硬件发送端口包含数据寄存器;
所述消息队列,用于保存所有端口待发送的数据;
所述数据寄存器,用于根据所属的硬件发送端口的优先级依次将数据进行发送;
所述软件发送端口,用于将所述待发送的数据传入对应硬件发送端口的数据寄存器中。
可选地,所述硬件接收端口、软件接收端口、硬件发送端口以及软件发送端口还分为高实时性端口和低实时性端口;
其中,所述高实时性端口采用直接存储器访问方式进行发送,所述高实时性端口采用中断方式进行接收;
所述低实时性输出端口采用中断方式进行接收与发送。
可选地,所述高实时性端口,用于发送数据时,通过直接存储器访问方式检测各自的数据寄存器中是否存在数据;
当所述数据寄存器中存在数据,则检测控制模块内部总线是否空闲;
当所述控制模块内部总线为空闲状态,则占用所述总线并将所述数据发出;
当所述总线不为空闲状态,则等待所述总线空闲状态再发送数据。
此外,为实现上述目的,本发明还提供一种多端口通信方法,所述多端口通信方法应用于如上文所述多端口通信系统,所述多端口通信方法包括:
初始化软件配置;
设置数据发送任务以及重发检测任务;
根据所述数据发送任务,调用软件发送端口,将数据耦合成数据包,判断目标端口是否需要应答;
当所述目标端口不需要应答,则将所述数据包写入到对应的硬件发送端口的数据寄存器中;
当所述目标端口需要应答,则根据所述重发检测任务,将所述数据包写入重发检测链表中,通过重发检测后将所述数据包写入对应的硬件发送端口数据寄存器中。
可选地,所述初始化软件配置,包括:
初始化一个消息队列来用于发送数据包;
初始化一个链表,其中,所述链表的每个节点都用于存储需要应答但暂未收到应答包的数据包信息,且每个节点都有一个用于计时的参数。
可选地,所述方法还包括:
设置数据接收任务;
根据所述数据接收任务,配置软件接收端口的优先级顺序和硬件接收端口的优先级顺序保持一致;
通过数据缓冲单元接收对应的硬件接收端口中接收缓冲单元存储的数据;
根据所述优先级顺序对所述数据进行处理。
可选地,所述根据所述优先级顺序对所述数据进行处理,包括:
通过通信协议对所述数据进行层层解耦,得到解耦后的数据包;
当所述解耦后的数据包为数据类型包,且所述数据类型包需要应答,则打包应答包写入消息队列中;
当所述数据类型包不需要应答,则根据所述数据类型包的含义做出对应处理;
当所述解耦后的数据包为应答类型包,则执行遍历重发检测链表的步骤;
根据所述应答类型包的信息确定所述应答类型包属于哪个MCU发送的数据包正在等待的应答包;
删除所述应答类型包对应的节点。
可选地,所述根据重发检测任务,将所述数据包写入重发检测链表中,通过重发检测后将所述数据包写入对应的硬件发送端口数据寄存器中,包括:
当控制模块发送的数据包为需要目标端口对应模块回复相应的应答包时,将所述数据包保存在重发检测链表中;
通过重发检测任务实时检查重发检测链表是否为空;
当所述重发检测链表为空时,退出所述重发检测任务;
当所述重发检测链表不为空时,对所述重发检测链表中的每个节点的参数进行检测;
当所述参数超过预设最大值,打包重发包写入消息队列中;
当所述参数没有超过预设最大值,将所述参数计数加1,重新进入流程进行检测。
本发明通过一套软件处理流程方法以及对端口通信模式的建议使MCU端的数据交互处理效率保持在一个较高的水平,以此来维持域控制系统的高速高效性,将单核MCU的性价比提升到最大,提供的软件处理流程方法以及端口通信模式的建议,能够完美解决同类技术的缺陷,使程序不会存在阻塞影响处理效率的情况,让丢包率稳定到零,并且因为流程的合理性可以省去多端口互斥保护的功能,能够让MCU端在排除硬件问题的情况下实现零丢包率,同时域控制系统的实时性还能保持一个较高的水平,将MCU与其他模块的信息交互效率提升到一个比较高的层次。
附图说明
图1为本发明多端口通信系统第一实施例的结构框图;
图2为本发明多端口通信系统第一实施例的通道映射关系图;
图3为本发明多端口通信方法第一实施例的流程示意图;
图4为本发明多端口通信方法第一实施例的硬件发送流程图;
图5为本发明多端口通信方法第一实施例的软件发送流程图;
图6为本发明多端口通信方法第一实施例的重发检测处理流程图;
图7为本发明多端口通信方法第二实施例的流程示意图;
图8为本发明多端口通信方法第二实施例的硬件接收流程图;
图9为本发明多端口通信方法第二实施例的软件接收流程图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本实施例提供了一种多端口通信系统,参照图1,图1为本发明多端口通信系统第一实施例的结构框图。
本实施例中,所述多端口通信系统包括控制模块10、功能模块20、接收数据处理模块30、发送数据处理模块40,所述控制模块10分别与接收数据处理模块30以及发送数据处理模块40的一端连接,所述功能模块20分别与所述接收数据处理模块30以及发送数据处理模块40的另一端连接;
所述控制模块,用于处理所述功能模块的数据,并和所述功能模块进行通信交互,其中,所述控制模块为单核MCU,用于充分计算处理多个端口;
所述接收数据处理模块,用于对接收的数据进行优先级配置,按照优先级顺序依次接收所述接收的数据;
所述发送数据处理模块,用于对待发送的数据进行优先级配置,按照优先级顺序依次发送所述待发送的数据。
需要说明的是,控制模块即单核MCU,MCU(Microcontroller Unit),中文称为微控制器单元,是一种集成了中央处理器(CPU)、内存(RAM和/或ROM)、输入/输出端口、定时器、计数器等核心功能的微型计算机系统。MCU通常被用于嵌入式系统中,用于控制各种设备和系统。
在本实施例中,所述接收数据处理模块包括硬件接收端口和软件接收端口;
其中,每个硬件接收端口对应一个软件接收端口;
所述硬件接收端口包含接收缓冲单元;
所述接收缓冲单元,用于根据所属的硬件接收端口的优先级依次将数据进行存储;
所述软件接收端口包含数据缓冲单元;
所述软件接收端口,用于根据对应硬件接收端口的优先级进行配置,以使硬件接收端口的优先级和对应的软件接收端口的优先级保持一致;
所述数据缓冲单元,用于接收对应的硬件接收端口中接收缓冲单元存储的数据;
所述数据缓冲单元,还用于按照所述优先级顺序依次处理所述数据得到数据包。
需要说明的是,数据缓冲单元即data_buffer[port_num][max_size],port_num为端口的数量,max_size为协议单包最大长度,每个端口数据接收任务配置一个接收缓冲单元receive_buffer[max_size],max_size一般为协议中单个协议包的最大长度。
在本实施例中,所述发送数据处理模块包括硬件发送端口、软件发送端口以及一个消息队列;
其中,每个硬件发送端口对应一个软件发送端口;
所述硬件发送端口包含数据寄存器;
所述消息队列,用于保存所有端口待发送的数据;
所述数据寄存器,用于根据所属的硬件发送端口的优先级依次将数据进行发送;
所述软件发送端口,用于将所述待发送的数据传入对应硬件发送端口的数据寄存器中。
需要说明的是,发送数据处理模块配置一个三维数组data_buffer[port_num][buffer_num][max_size],port_num为端口的数量,max_size为协议单包最大长度,buffer_num为缓冲区的大小,buffer即缓冲区。
在本实施例中,所述硬件接收端口、软件接收端口、硬件发送端口以及软件发送端口还分为高实时性端口和低实时性端口;
其中,所述高实时性端口采用直接存储器访问方式进行发送,所述高实时性端口采用中断方式进行接收;
所述低实时性输出端口采用中断方式进行接收与发送。
需要说明的是,高实时性端口即uart端口,是一种常见的串行通信协议,通常用于在设备之间传输数据。UART端口是用于连接和实现UART通信的物理接口,低实时性输出端口则采用I2C、SPI等通信协议。
在本实施例中,所述高实时性端口,用于发送数据时,通过直接存储器访问方式检测各自的数据寄存器中是否存在数据;
当所述数据寄存器中存在数据,则检测控制模块内部总线是否空闲;
当所述控制模块内部总线为空闲状态,则占用所述总线并将所述数据发出;
当所述总线不为空闲状态,则等待所述总线空闲状态再发送数据。
需要说明的是,直接寄存器访问方式即DMA,借助内部的控制器来实现内存和外设之间的数据传输。有了DMA,CPU可以专注于内存数据的存取;数据的搬运过程完全可以交由DMA硬件完成。有了DMA以后,不代表完全不需要CPU了,只是不会像中断那样频繁向CPU发送请求。
如图2所示,图2为本发明多端口通信系统第一实施例的通道映射关系图。功能模块例如SOC、4G模块、音频模块各自对应的一个端口(从0到预设值n),通过各端口和DMAchannel(硬件端口)连接。
本实施例通过一种多端口通信系统,让MCU端在排除硬件问题的情况下实现零丢包率,同时域控制系统的实时性还能保持一个较高的水平,让MCU在保持正常运行的同时还能够高效率地处理众多来自其他模块的数据,将MCU的性能通过软件设计处理最大化。
本发明实施例还提供了一种多端口通信方法,参照图3,图3为本发明多端口通信方法第一实施例的流程示意图。
本实施例中,所述多端口通信方法包括以下步骤:
步骤S10:初始化软件配置。
进一步地,初始化一个消息队列来用于发送数据包;初始化一个链表,其中,链表的每个节点都用于存储需要应答但暂未收到应答包的数据包信息,且每个节点都有一个用于计时的参数。
需要说明的是,初始化的消息队列用于发送数据包,消息队列的大小应预设足够大小。
链表是一种基本的数据结构,它由节点组成,每个节点包含数据和指向下一个节点的引用。链表可以分为单向链表、双向链表和循环链表等不同类型。
可理解的是,参数可以为count参数,用于计时和后续的重发检测流程。
应理解的是,应答包是在接收到请求消息后发送给发送方的消息,用于确认收到请求、提供相应的信息或执行相应的操作。
步骤S20:设置数据发送任务以及重发检测任务。
需要说明的是,唯一一个数据发送任务的流程是根据发送数据包中的端口参数将数据发送到目标端口。
可理解的是,重发检测任务的流程是不断检测重发检测链表中的数据包节点是否应答接收超时。
步骤S30:根据数据发送任务,调用软件发送端口,将数据耦合成数据包,判断目标端口是否需要应答。
需要说明的是,软件发送的数据来源只有唯一的一个消息队列,它保存了所有端口想要发送的数据,当发送任务检测到消息队列中有数据时,它就会立即调用软件发送接口,根据发送信息耦合出一个协议包,并判断它是否需要应答,即是否需要目标端口对应的模块针对这个数据包回复一个应答包。
步骤S40:当目标端口不需要应答,则将数据包写入到对应的硬件发送端口的数据寄存器中。
在具体实现中,不需要则直接调用DMA发送接口将协议包写入到硬件DMA内部数据寄存器中。
如图4所示,图4为本发明多端口通信方法第一实施例的硬件发送流程图。n个DMA控制器(n为预设数量)判断各种的寄存器中是否有数据,若为否,则硬件发送流程结束,若为是,则判断MCU总线是否空闲,若为否,则重新进行判断,若为是,则通过该DMA控制器传输数据,硬件发送流程结束。
如图5所示,图5为本发明多端口通信方法第一实施例的软件发送流程图。数据发送任务调度(任务列表遍历调度或线程调度),判断消息队列是否存在数据,若为否,则软件发送流程结束,若为是,则取出数据并调用发送接口,然后判断数据包是否需要应答,若为是,则添加数据包信息到重发判断链表中再将数据传入对应端口的DMA控制器的内部数据寄存器中,若为否,则直接将数据包传入到对应端口的DMA控制器的内部数据寄存器中。
步骤S50:当目标端口需要应答,则根据重发检测任务,将数据包写入重发检测链表中,通过重发检测后将数据包写入对应的硬件发送端口数据寄存器中。
进一步地,当控制模块发送的数据包为需要目标端口对应模块回复相应的应答包时,将数据包保存在重发检测链表中;通过重发检测任务实时检查重发检测链表是否为空;当重发检测链表为空时,退出重发检测任务;当重发检测链表不为空时,对重发检测链表中的每个节点的参数进行检测;当参数超过预设最大值,打包重发包写入消息队列中;当参数没有超过预设最大值,将参数计数加1,重新进入流程进行检测。
需要说明的是,当MCU发送的数据包是需要目标端口对应模块回复相应的应答包时,需要将这个数据包的重要信息(端口号、包号、数据信息等)保存在重发检测链表中,重发检测任务会实时检查重发检测链表是否为空,如果为空则直接退出任务去执行其他的任务,否则对链表中的每个节点的count参数都进行检测,如果count参数超过设定最大值,即超时仍未接收到应该收到的应答包,那么就打包重发包写到消息队列中,如果没有超过最大值则将count计数加1,处理完所有的节点之后,本次的重发检测任务就完成。
应理解的是,如果基于裸机(无操作系统)开发,不需要做链表保护机制,但如果是基于操作系统开发,链表保护机制是必要的。首先说裸机开发,因为MCU为单核,所以除了中断,没有任何事件能打断main函数的while(1)的执行,因此我们写在while(1)中的所有任务的执行都是按顺序的,当某个任务在操作重发检测链表的时候(增加或删除节点),没有其他的任务会同时去操作链表,这样就保证了链表的绝对安全性。如果基于操作系统开发,那么就必须做链表保护机制。操作系统的强大之处在于,可以让任务以线程的形式存在,并且可以根据线程优先级来回切换线程,在体现了极为强大的功能外同时也衍生出了一系列的风险。比如说,当一个低优先级线程正在操作一个公共资源(链表、全局变量等),此时一个高优先级的线程的状态被触发为运行,那么此时系统会保存这个低优先级线程的上下文然后立即去执行高优先级线程,假如高优先级线程也要操作同一个公共资源,那么在它的操作执行完之后,系统才会适时恢复低优先级线程的上下文并接着去执行它,此时公共资源已经被修改过了,继续对它操作可能会引发不可控制的错误。不过操作系统自然有相应的保护工具,最典型的就是互斥锁。互斥锁并不绑定任何资源,它就是一个独立的锁工具。至于使用,只需要在所有操作公共资源行为之前调用互斥锁的占用即可,并且在操作完成之后需要立即释放互斥锁,避免长时间占用互斥锁。那么在程序正常运行时,假设低优先级线程在某一时刻成功占用互斥锁,而在它操作公共资源进度只完成一半时CPU被高优先级线程抢占了,那么在高优先级线程操作公共资源前尝试占用互斥锁时,就会占用失败(互斥锁的占用跟所在线程的优先级无关),这时高优先级线程会保持等待状态并挂起,同时释放CPU,只要互斥锁没有被其他正在使用的线程释放,高优先级线程就会一直维持这个动作,从而实现对公共资源的保护。
应理解的是,互斥锁的使用场景:条件1,它保护的是公共资源,局部资源不存在被多个线程操作的情况;条件2,它所保护的公共资源是会被多个线程操作的。
根据本发明的流程设计的合理性,完成省去了常规流程在数据发送接收时必须要做的端口互斥保护,需要互斥保护的根本原因就是在处理单一的接收或发送buffer时可能会被其他高优先级任务打断,buffer中已经打包好的部分数据可能会被错误覆盖,从而会导致最终输出的协议包数据异常错误。而本发明中设计的流程完全避免了这种情况,接收处理流程:拥有独立接收任务、独立接收buffer,即使是唯一的数据处理任务,也拥有多维数据来独立保存各个端口的数据包。
如图6所示,图6为本发明多端口通信方法第一实施例的重发检测处理流程图。首先进行重发检测任务调度(任务列表遍历调度或线程调度),判断链表中是否存在节点,若为否,则重发流程结束,若为是,则遍历链表,判断当前节点的count参数是否达到设定最大值,若为否,则节点的count参数加1,判断当前节点是否为尾节点,若为是,则重发流程结束,若为否,则重新进入遍历流程,若当前节点的count参数达到最大值,则根据节点保存的数据打包数据包并写入消息队列,同时删除节点,并判断当前节点是否为尾节点。
本实施例通过使用中断接收数据,保证数据接收的最高优先级;实时性要求高的端口使用DMA的方式发送数据,主要目的就是不堵塞数据的接收,尽可能地保证接收数据的处理处于最高效的状态;发送与接收处理独立,既使流程框架更加合理、清晰,又能更方便地排查问题;使用独立的发送任务从唯一的消息队列中获取并发送数据,保证了数据发送的顺序并确保了发送数据的打包过程的安全性,还省去了如果使用常规的方法在接收流程中去立即打包、发送数据,那么当打包过程被线程切换强行打断后,会出现打包数据异常篡改的情况从而导致发出错误协议包,极大影响通信效率;使用DMA方式发送数据,不会让发送占用CPU太多时间,保证了数据接收的最大效率。
参考图7,图7为本发明多端口通信方法第二实施例的流程示意图。
基于上述第一实施例,在本实施例中,所述步骤S20,还可以包括:
步骤S201:设置数据接收任务。
需要说明的是,与端口对应的数据接收任务,它的流程是从各自对应的硬件端口的FIFO(端口接收数据临时存储buffer)中获取数据。
步骤S202:根据数据接收任务,配置软件接收端口的优先级顺序和硬件接收端口的优先级顺序保持一致。
需要说明的是,每个通信端口同样都对应一个软件端口(各个端口的接收任务或线程),任务调度也会涉及到优先级的设置(无操作系统开发则是设置各个端口接收任务的先后执行顺序,基于操作系统开发则是设置各个端口接收线程的优先级),这里任务优先级的设置需要与硬件端口中断优先级设置保持一致,只有端口的硬件中断优先级与软件任务优先级相同才能使端口的优先级真正意义上生效,否则接收流程会变得十分混乱,会大大增加排查问题的难度。
步骤S203:通过数据缓冲单元接收对应的硬件接收端口中接收缓冲单元存储的数据。
在具体实现中,端口优先级配置成功后,那么当各个端口的接收buffer接收到来自它FIFO中的数据。
步骤S204:根据优先级顺序对数据进行处理。
进一步地,通过通信协议对数据进行层层解耦,得到解耦后的数据包;当解耦后的数据包为数据类型包,且数据类型包需要应答,则打包应答包写入消息队列中;当数据类型包不需要应答,则根据数据类型包的含义做出对应处理;当解耦后的数据包为应答类型包,则执行遍历重发检测链表的步骤;根据应答类型包的信息确定应答类型包属于哪个MCU发送的数据包正在等待的应答包;删除应答类型包对应的节点。
需要说明的是,首先按照通信协议层层解耦(主要是去掉包头、包尾、CRC校验、端口号等等);然后再来解析解耦完成之后得到的真正的数据包,先要判断接收到的是数据类型的包还是应答类型的包,如果是数据类型包,还要先判断它是否需要应答,需要则打包应答包然后写入消息队列中,否则就直接根据这个包的含义作出相应操作,如果是应答类型的包,则执行遍历重发检测链表的操作,根据端口号和包号等信息来确定这个应答包是哪个MCU发送的数据包在等待的应答包,找到后则删除对应的节点,避免导致错误重发。
如图8所示,图8为本发明多端口通信方法第二实施例的硬件接收流程。
n个端口接收中断并触发(n为任意数量),且每个端口接收到的数据全部保存到各自端口的FIFO(端口接收数据临时存储buffer)中,硬件接收流程结束。
如图9所示,图9为本发明多端口通信方法第二实施例的软件接收流程。
n个端口接收任务调度(任务列表调度或线程调度),检测各端口中的FIFO是否有数据,若为否,则检查下一端口,若为是,则将该端口中的FIFO数据COPY(复制)到receive_buffer(接收缓冲)中,然后检测receive_buffer(接收缓冲)中是否有数据,若为否,则软件接收流程结束,若为是,则进行格式检查、CRC校验等(取决于具体使用的通信协议),协议包解耦通过后将完整的数据传出,判断解耦后的数据包是数据包还是应答包,若为应答包则遍历重发检测链表,根据端口和包数据找到对应节点并删除,若为数据包,则判断是否需要回复应答包,若为否,则根据通信协议以及数据包内容判断意图并做出相应的操作,若为是,则将应答数据包写入到消息队列中后根据通信协议以及数据包内容判断意图并做出相应的操作。
本实施例通过设置数据接收任务;根据数据接收任务,配置软件接收端口的优先级顺序和硬件接收端口的优先级顺序保持一致;通过数据缓冲单元接收对应的硬件接收端口中接收缓冲单元存储的数据;根据优先级顺序对数据进行处理,通过多个端口各自独立的接收任务和接收buffer,将各个端口的数据接收处理相互独立,并且按照端口优先级合理地处理数据,保证了接收通信的有序合理性以及安全性。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种多端口通信系统,其特征在于,所述多端口通信系统包括控制模块、功能模块、接收数据处理模块、发送数据处理模块,所述控制模块分别与接收数据处理模块以及发送数据处理模块的一端连接,所述功能模块分别与所述接收数据处理模块以及发送数据处理模块的另一端连接;
所述控制模块,用于处理所述功能模块的数据,并和所述功能模块进行通信交互,其中,所述控制模块为单核MCU,用于充分计算处理多个端口;
所述接收数据处理模块,用于对接收的数据进行优先级配置,按照优先级顺序依次接收所述接收的数据;
所述发送数据处理模块,用于对待发送的数据进行优先级配置,按照优先级顺序依次发送所述待发送的数据。
2.如权利要求1所述的多端口通信系统,其特征在于,所述接收数据处理模块包括硬件接收端口和软件接收端口;
其中,每个硬件接收端口对应一个软件接收端口;
所述硬件接收端口包含接收缓冲单元;
所述接收缓冲单元,用于根据所属的硬件接收端口的优先级依次将数据进行存储;
所述软件接收端口包含数据缓冲单元;
所述软件接收端口,用于根据对应硬件接收端口的优先级进行配置,以使硬件接收端口的优先级和对应的软件接收端口的优先级保持一致;
所述数据缓冲单元,用于接收对应的硬件接收端口中接收缓冲单元存储的数据;
所述数据缓冲单元,还用于按照所述优先级顺序依次处理所述数据得到数据包。
3.如权利要求1所述的多端口通信系统,其特征在于,所述发送数据处理模块包括硬件发送端口、软件发送端口以及一个消息队列;
其中,每个硬件发送端口对应一个软件发送端口;
所述硬件发送端口包含数据寄存器;
所述消息队列,用于保存所有端口待发送的数据;
所述数据寄存器,用于根据所属的硬件发送端口的优先级依次将数据进行发送;
所述软件发送端口,用于将所述待发送的数据传入对应硬件发送端口的数据寄存器中。
4.如权利要求1~3中任一项所述的多端口通信系统,其特征在于,所述硬件接收端口、软件接收端口、硬件发送端口以及软件发送端口还分为高实时性端口和低实时性端口;
其中,所述高实时性端口采用直接存储器访问方式进行发送,所述高实时性端口采用中断方式进行接收;
所述低实时性输出端口采用中断方式进行接收与发送。
5.如权利要求4所述的多端口通信系统,其特征在于,所述高实时性端口,用于发送数据时,通过直接存储器访问方式检测各自的数据寄存器中是否存在数据;
当所述数据寄存器中存在数据,则检测控制模块内部总线是否空闲;
当所述控制模块内部总线为空闲状态,则占用所述总线并将所述数据发出;
当所述总线不为空闲状态,则等待所述总线空闲状态再发送数据。
6.一种多端口通信方法,其特征在于,所述多端口通信方法应用于如权利要求1至5任一项所述多端口通信系统,所述多端口通信方法包括:
初始化软件配置;
设置数据发送任务以及重发检测任务;
根据所述数据发送任务,调用软件发送端口,将数据耦合成数据包,判断目标端口是否需要应答;
当所述目标端口不需要应答,则将所述数据包写入到对应的硬件发送端口的数据寄存器中;
当所述目标端口需要应答,则根据所述重发检测任务,将所述数据包写入重发检测链表中,通过重发检测后将所述数据包写入对应的硬件发送端口数据寄存器中。
7.如权利要求6所述的多端口通信方法,其特征在于,所述初始化软件配置,包括:
初始化一个消息队列来用于发送数据包;
初始化一个链表,其中,所述链表的每个节点都用于存储需要应答但暂未收到应答包的数据包信息,且每个节点都有一个用于计时的参数。
8.如权利要求6所述的多端口通信方法,其特征在于,所述方法还包括:
设置数据接收任务;
根据所述数据接收任务,配置软件接收端口的优先级顺序和硬件接收端口的优先级顺序保持一致;
通过数据缓冲单元接收对应的硬件接收端口中接收缓冲单元存储的数据;
根据所述优先级顺序对所述数据进行处理。
9.如权利要求8所述的多端口通信方法,其特征在于,所述根据所述优先级顺序对所述数据进行处理,包括:
通过通信协议对所述数据进行层层解耦,得到解耦后的数据包;
当所述解耦后的数据包为数据类型包,且所述数据类型包需要应答,则打包应答包写入消息队列中;
当所述数据类型包不需要应答,则根据所述数据类型包的含义做出对应处理;
当所述解耦后的数据包为应答类型包,则执行遍历重发检测链表的步骤;
根据所述应答类型包的信息确定所述应答类型包属于哪个MCU发送的数据包正在等待的应答包;
删除所述应答类型包对应的节点。
10.如权利要求6所述的多端口通信方法,其特征在于,所述根据重发检测任务,将所述数据包写入重发检测链表中,通过重发检测后将所述数据包写入对应的硬件发送端口数据寄存器中,包括:
当控制模块发送的数据包为需要目标端口对应模块回复相应的应答包时,将所述数据包保存在重发检测链表中;
通过重发检测任务实时检查重发检测链表是否为空;
当所述重发检测链表为空时,退出所述重发检测任务;
当所述重发检测链表不为空时,对所述重发检测链表中的每个节点的参数进行检测;
当所述参数超过预设最大值,打包重发包写入消息队列中;
当所述参数没有超过预设最大值,将所述参数计数加1,重新进入流程进行检测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311827368.0A CN117896201A (zh) | 2023-12-27 | 2023-12-27 | 多端口通信系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311827368.0A CN117896201A (zh) | 2023-12-27 | 2023-12-27 | 多端口通信系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117896201A true CN117896201A (zh) | 2024-04-16 |
Family
ID=90646590
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311827368.0A Pending CN117896201A (zh) | 2023-12-27 | 2023-12-27 | 多端口通信系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117896201A (zh) |
-
2023
- 2023-12-27 CN CN202311827368.0A patent/CN117896201A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0272834B1 (en) | Inter-processor communication protocol | |
CN108647104B (zh) | 请求处理方法、服务器及计算机可读存储介质 | |
US5931915A (en) | Method for processing early arrival messages within a multinode asynchronous data communications system | |
US20130073752A1 (en) | Low latency, high bandwidth data communications between compute nodes in a parallel computer | |
US20090022156A1 (en) | Pacing a Data Transfer Operation Between Compute Nodes on a Parallel Computer | |
EP0909071A2 (en) | Communication method and apparatus using active messages | |
US7640549B2 (en) | System and method for efficiently exchanging data among processes | |
CN109547162B (zh) | 基于两套单向边界的数据通信方法 | |
US7966618B2 (en) | Controlling data transfers from an origin compute node to a target compute node | |
US20090046585A1 (en) | Determining Communications Latency for Transmissions Between Nodes in a Data Communications Network | |
US6856619B1 (en) | Computer network controller | |
US6012121A (en) | Apparatus for flexible control of interrupts in multiprocessor systems | |
JP3214454B2 (ja) | プログラム内蔵方式パケット処理装置 | |
CN105025063A (zh) | 面向大规模终端设备的在线数据传输方法 | |
CN111722944A (zh) | 一种基于nio的airt-ros通信方法及系统 | |
KR20000060827A (ko) | 실시간 운영체계 커널(Real-time operating systemKernel)의 이벤트 전달 체계 구현방법 | |
US5878226A (en) | System for processing early arrival messages within a multinode asynchronous data communications system | |
JP2002024195A (ja) | 並列処理装置、及び、並列処理方法 | |
US7853713B2 (en) | Communication interface device and communication method | |
CN117896201A (zh) | 多端口通信系统及方法 | |
JPH10155010A (ja) | パケット処理方法とネットワ−クア−キテクチャ | |
US7320044B1 (en) | System, method, and computer program product for interrupt scheduling in processing communication | |
US20070230347A1 (en) | Communication interface device and communication method | |
JPH0458646A (ja) | バッファ管理方式 | |
WO2023098530A1 (zh) | 一种事务的处理方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |