CN111831596B - 一种rtos串口网络传输方法及装置 - Google Patents
一种rtos串口网络传输方法及装置 Download PDFInfo
- Publication number
- CN111831596B CN111831596B CN202010739892.2A CN202010739892A CN111831596B CN 111831596 B CN111831596 B CN 111831596B CN 202010739892 A CN202010739892 A CN 202010739892A CN 111831596 B CN111831596 B CN 111831596B
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- serial port
- rtos
- descriptor
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Transfer Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明属于串口通信领域,提供了一种RTOS串口网络传输方法及装置。其中,RTOS串口网络传输方法包括数据接收步骤:采用DMA循环接收模式接收数据且接收数据全程无中断产生,对接收到的数据进行打包处理;内存管理步骤:指定一块内存虚拟成一个内存堆设备,注册到RTOS设备驱动框架中,通过设备访问接口实现内存申请与释放,采用双向链表实现对已申请内存采用类fifo的管理;数据发送步骤:遍历双向链表来查找并读取设备节点信息;维护两张描述符表table1和table2,实现多路socket数据无漏转发及无漏释放;其中,table1记录每一路处于连接状态的描述符;table2记录引用内存的设备节点描述符。
Description
技术领域
本发明属于串口通信领域,尤其涉及一种RTOS串口网络传输方法及装置。
背景技术
本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
数据通信是日常生活中必不可少的一部分,比如两个人打电话、电脑上网、物联网等等。市场上的底层嵌入式终端设备最常用的通信方式就是串口通信及网络通信,尤其是在物联网市场,物联网设备运行着嵌入式实时操作系统(RTOS)连接着串口设备与网络端,比如物联网设备中的串口服务器作为嵌入式设备和网络端的连接设备,可以为新老终端设备提供联网功能,市场需求率非常高。串口与网络之间的数据传输存在数据量大且数据不定长度的特点,在RTOS下,为了满足数据内存的需求会为实际的内存需求向系统申请一块内存,当进行大量数据传输时,就会频繁的申请释放内存,这样就会容易造成严重的内存碎片化问题,在设备长期运行时,就会因为内存碎片问题导致数据传输效率不高且运行不稳定。
目前市场上的设备中网络和串口之间数据的传输传统方法是:串口接收数据后简单打包,根据数据量大小从总的内存中申请一块内存,如果一个串口的数据需要向N路socket发送时,就会对应申请N块内存,然后将数据复制N次后给每个socket使用。发明人发现,传统方案存在以下缺点:1)内存的碎片化比较严重;2)内存利用率低。
发明内容
为了解决上述问题,本发明提供一种RTOS串口网络传输方法及装置,其中串口接收采用DMA循环接收模式,接收全程无中断产生,降低CPU的占用率,可以实现满波特率打包不丢数据;内存采用内存堆设备管理,采用类fifo的机制对内存的使用进行管理,避免产生大量的内存碎片化;通过维护两张连接描述符表,实现多路嵌套字数据不漏发,提高了数据的传输效率
为了实现上述目的,本发明采用如下技术方案:
本发明的第一个方面提供一种RTOS串口网络传输方法。
一种RTOS串口网络传输方法,包括:
数据接收步骤:采用DMA循环接收模式接收数据且接收数据全程无中断产生,对接收到的数据进行打包处理;
内存管理步骤:指定一块内存虚拟成一个内存堆设备,注册到RTOS设备驱动框架中,通过设备访问接口实现内存申请与释放,采用双向链表实现对已申请内存采用类fifo的管理;
数据发送步骤:遍历双向链表来查找并读取设备节点信息;维护两张描述符表table1和table2,实现多路socket数据无漏转发及无漏释放;其中,table1记录每一路处于连接状态的描述符;table2记录引用内存的设备节点描述符。
本发明的第二个方面提供一种RTOS串口网络传输系统。
一种RTOS串口网络传输装置,包括:
数据接收模块,其用于:采用DMA循环接收模式接收数据且接收数据全程无中断产生,对接收到的数据进行打包处理;
内存管理模块,其用于:指定一块内存虚拟成一个内存堆设备,注册到RTOS设备驱动框架中,通过设备访问接口实现内存申请与释放,采用双向链表实现对已申请内存采用类fifo的管理;
数据发送模块,其用于:遍历双向链表来查找并读取设备节点信息;维护两张描述符表table1和table2,实现多路socket数据无漏转发及无漏释放;其中,table1记录每一路处于连接状态的描述符;table2记录引用内存的设备节点描述符。
本发明的第三个方面提供一种计算机可读存储介质。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的RTOS串口网络传输方法中的步骤。
本发明的第四个方面提供一种计算机设备。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的RTOS串口网络传输方法中的步骤。
与现有技术相比,本发明的有益效果是:
(1)本发明的串口接收采用DMA循环接收模式,接收全程无中断产生,降低CPU的占用率,可以实现满波特率打包不丢数据。
(2)本发明将一块内存虚拟成一个内存堆设备,注册到RTOS中,通过设备访问接口对内存块实现管理,一路串口到网络的内存采用内存堆设备管理,采用类fifo的机制对内存的使用进行管理,完全避免因频繁的malloc(memory allocation,动态内存分配)产生大量的内存碎片。
(3)本发明的串口到网络的内存块通过链表管理,内存释放的顺序完全与申请的顺序保持一致,可以完全解决在该块内存的碎片化问题,提高了系统长期运行的稳定性,通过维护两张连接描述符表table,实现多路socket数据不漏发,不漏释放,提高了数据的传输效率。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1是本发明实施例的一种RTOS串口网络传输方法流程图;
图2是数据流和内存设备之间的工作流程;
图3是类fifo机制原理图;
图4是数据发送步骤的具体实现过程示意图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
术语解释:
DMA:Direct Memory Access,直接存储器访问,它允许不同速度的硬件装置来沟通,而不需要依赖于CPU的大量中断负载。否则,CPU需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU对于其他的工作来说就无法使用。
CPU:central processing unit,中央处理器。
fifo:First Input First Output,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。
实施例一
附图1给出了本实施例的一种RTOS串口网络传输方法流程图。
参照图1,本实施例的RTOS串口网络传输方法,包括:
(1)数据接收步骤:采用DMA循环接收模式接收数据且接收数据全程无中断产生,对接收到的数据进行打包处理。
串口数据接收打包数据的实现方式如下:
采用DMA传输机制将接收到的数据循环存入环形缓冲区;
打包定时器的中断处理函数更新环形缓冲区的写指针及执行打包策略;
串口数据处理线程将数据读出并更新环形缓冲区的读指针。
在具体实施中,串口数据接收部分负责接收串口数据,性能指标是串口在满波特率的情况下不丢数据。本实施例中的串口接收部分采用的是DMA传输机制,由于RTOS中,为保护临界资源,大量使用了全局关中断和全局开中断,为了减少因关中断影响串口数据的接收,所以DMA设置为循环接收模式,串口中断全部关闭,接收过程没有任何中断发生,完全不受RTOS系统的影响。有数据进来时,DMA将数据循环存入我们开辟的环形缓冲区中。
打包定时器的中断处理函数负责执行串口数据打包的两个打包条件:打包长度和打包时间,打包定时器的中断时间间隔为1ms,定时到了后进中断处理函数,进入中断处理函数后首先对缓冲区的数据量进行判断,如果数据量超过了打包的长度,则释放信号量,解除读取阻塞。通过判断前后两次记录的缓冲区数据量判断本次中断有无新的数据进来,如果没有数据进来,则执行打包时间--,当时间减小到0则释放信号量,解除读取的阻塞。如果读取的缓冲区数据量有增加,则对打包时间重新赋值。
对数据进行读取时,先去判断缓冲区的数据量是否大于打包长度,如果大于则直接将缓冲区的数据读出,否则阻塞等待数据长度满足打包长度要求或时间满足打包时间的要求。当解除阻塞后,同样会判断判断缓冲区的数据量是否大于打包长度,如果大于则直接将缓冲区的数据读出,否则将所有的数据全部取出。
(2)内存管理步骤:指定一块内存虚拟成一个内存堆设备,注册到RTOS设备驱动框架中,通过设备访问接口实现内存申请与释放,采用双向链表实现对已申请内存采用类fifo的管理。
将指定大小的内存注册为一个设备的实现方式实现如下:
1)指定一块内存的起始地址和大小。
2)按照RTOS的驱动框架封装访问内存的访问接口。
3)注册为设备后,约定的使用方通过访问接口,实现设备查找、初始化、打开、关闭、内存申请与释放等操作。
在内存管理的步骤实施过程中,数据透传功能会涉及到两个关键点:数据移动和数据不定长。串口数据打包后会将数据通过读取函数返回,应用层(串口线程)获取到数据后需要转移到网络线程。
考虑实际应用中会有数据缓存功能,为了协调内存利用率及数据缓冲量,所以数据由串口到网络不采用传递环形缓冲区指针的形式实现(如果采用指针形式,数据量超出缓冲大小后会覆盖掉旧的数据或停止缓存),数据读取函数读到数据后会直接为其申请一块内存,进行数据的复制,然后串口处理程序将该数据的相关信息挂到双向链表中,网络处理程序遍历链表后将第一节点的数据发出后进行内存的释放及节点的删除。
由于前面提到的数据不定长特点,为了提高内存利用率,所以整个数据传输过程中会不断的malloc不同长度内存块,由此造成的问题就是内存碎片化严重,非常不利于设备的长期稳定运行。在内存管理方面有很多算法,比较好的方法是内存池,但是内存池存在空间浪费的问题,所以为了提高内存利用率及减少碎片化问题。
本实施例采用分内存堆管理,将某一块内存注册为一个设备,通过该设备的访问接口可以实现该内存块的申请及释放,一路串口和对应的N路socket之间共用一个设备,该设备的内存使用仅限该条链路使用。内存申请与释放管理采用fifo的机制,串口处理程序依次申请,网络处理程序依次释放,整个过程不会有第三方进行该设备的内存申请,所以按照内存申请顺序释放,整个过程几乎没有内存碎片产生。
如图2所示,下面详细描述整个数据流和内存设备之间的工作流程,数据流的方向以串口到网络为主,如图2中所示,一路串口会对应多路socket(套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象),串口接收到数据后会使用上面注册的内存设备申请一块内存来存储数据,系统会维护一个双向链表,串口部分申请完内存填充数据后会将该块内存的相关信息挂到链表上,每来一次数据会往链表上挂一个节点,这样就形成了一个有序的数据队列。
如图3所示,类fifo的特点是先进先出,每一路socket的处理函数会遍历该双向链表,将最先申请的第一个节点数据取出,确定是最后一个引用该数据的socket,然后将内存释放掉,该操作保证了最先申请的内存会被最先释放。
内存的申请与释放完全遵循了一下两点:
A约定内存设备使用对象。
B申请与释放符合类fifo机制,完全不会产生内存碎片。
通过以上的措施,减小了内存碎片化,从而能使设备长期稳定的运行不会受到内存碎片的影响。
系统会为串口到多路socket链路维护一个双向链表及一个具有数据块相关信息的结构体,串口数据到描述符的传输方式如下:
a)串口读到打包后的数据,调用设备访问接口访问内存堆设备,为数据申请相应大小的内存。
b)填充结构体的内存地址、数据长度、socket描述符表。
c)将该结构体挂到链表上。
d)描述符端轮询遍历链表,将第一个节点的数据读出,更新描述符表table,如果是最后一个引用该节点数据的socket,则删除节点,释放内存。
通过设备对内存进行管理,对内存进行了保护,提高了系统的稳定性,减小了代码的耦合程度。通过约定设备的使用方,可以完全避免在该设备管理的内存区域产生碎片化问题。
(3)数据发送步骤:遍历双向链表来查找并读取设备节点信息;维护两张描述符表table1和table2,实现多路socket数据无漏转发及无漏释放;其中,table1记录每一路处于连接状态的描述符;table2记录引用内存的设备节点描述符。
针对多路socket对应多个socket处理程序,每一路socket处理程序会遍历链表,如果有节点则将第一个节点的相关数据取出。同时系统会维护一个多路套接字的table1,该表中记录着每一路socket描述符,系统会实时的更新表中描述符,如果有新的连接加入,则将新连接的描述符加入table1中,反之有断连的socket,则将table1中该socket的描述符删除,从而保证表中的连接都是正常状态的。每一个节点的数据包中有一个引用该内存的设备描述符table2,每一路socket使用内存后会向table2写入该路socket的描述符。
各路socket引用数据时,需要对比系统维护的描述符表table1及内存块中的描述符表table2,只要保证table1中的处于连接状态的描述符全部出现在table2中就可以实现处于连接状态的描述符全部引用该数据,当一路描述符处理程序想要引用该节点的数据时,判断table1中除了本连接以外所有连接描述符都在table2,所以可以判定本次引用为最后一次,应用完数据后释放内存,并删除链表中的节点,反之将本次引用的描述符写入内存块中的table2中。
参照图4,数据发送步骤的具体实现方法如下:
a.每一路socket处理程序会遍历链表查找是否有节点信息存在,如果有则将节点信息取出,如table2、数据地址、数据长度,没有则继续等待。
b.socket处理程序在数据发送时先遍历描述符表table1,同时对比内存块中的table2,判断table1中的其他socket描述符是否全部在内存块中的table2中,如果不是则将数据发送出去且将本连接的描述符写入内存中的table2中。如果是,则说明本次的发送是最后次对内存的使用,待数据转发完后,释放掉内存块,删除链表中该节点。数据的整个传输过程结束。
需要说明的是,存在以上过程的原因主要是因为多路socket连接,在设备工作期间会存在断连等相关问题,为了保证内存块的最终释放,需要确定最后一次的数据引用,这样的话既不影响内存的释放,也不会漏掉处于连接状态的描述符对数据的转发。
实施例二
本实施例提供了一种RTOS串口网络传输装置,其包括:
(1)数据接收模块,其用于:采用DMA循环接收模式接收数据且接收数据全程无中断产生,对接收到的数据进行打包处理。
具体地,采用DMA传输机制将接收到的数据循环存入环形缓冲区,打包定时器的中断处理函数更新环形缓冲区的写指针及执行打包策略,串口数据处理线程将数据读出并更新环形缓冲区的读指针。
进入中断处理函数后先判断缓冲区的数据量,若数据量超过打包长度,则释放信号量,解除读取阻塞;通过判断前后两次记录的缓冲区数据量来判断本次中断有无新的数据进来,若无,则执行打包时间,当时间减小到0时释放信号量,解除读取的阻塞;若读取的缓冲区数据量有增加,则重新赋值打包时间。
具体地,在串口数据处理线程读取数据时,先判断缓冲区的数据量是否大于打包长度,若是则直接将缓冲区的数据读出,否则,阻塞等待数据长度满足打包长度要求或时间满足打包时间要求;当解除阻塞后,判断判断缓冲区的数据量是否大于打包长度,若是则直接将缓冲区的数据读出,否则将所有的数据全部取出。
本实施例的串口接收采用DMA循环接收模式,接收全程无中断产生,降低CPU的占用率,可以实现满波特率打包不丢数据。
(2)内存管理模块,其用于:指定一块内存虚拟成一个内存堆设备,注册到RTOS设备驱动框架中,通过设备访问接口实现内存申请与释放,采用双向链表实现对已申请内存采用类fifo的管理。
在具体实施中,一路串口和对应的N路socket之间共用一个设备,该设备的内存使用仅限当前链路使用;内存申请与释放管理采用类fifo机制,串口处理程序依次申请,网络处理程序依次释放。
本实施例将一块内存虚拟成一个内存堆设备,注册到RTOS中,通过设备访问接口对内存块实现管理,一路串口到网络的内存采用内存堆设备管理,采用类fifo的机制对内存的使用进行管理,完全避免因频繁的malloc(memory allocation,动态内存分配)及无序的释放导致产生大量的内存碎片
(3)数据发送模块,其用于:遍历双向链表来查找并读取设备节点信息;维护两张描述符表table1和table2,实现多路socket数据无漏转发及无漏释放;其中,table1记录每一路处于连接状态的描述符;table2记录引用内存的设备节点描述符。
在具体实施中,在数据发送时遍历描述符表table1,同时对比内存块中的table2,通过判断table1中其他描述符是否全部在table2内,确定出最后一个引用当前设备节点数据的描述符,数据转发完后释放内存块,删除双向链表中的当前设备节点,结束当前设备节点的数据传输。
其中,判断table1中的其他描述符是否全部在内存块中的table2中,如果不是,则将数据发送出去且将本连接的描述符写入内存中的table2中;如果是,则确定出最后一个引用当前设备节点数据的描述符。
本实施例的串口到socket的内存块通过链表管理,内存释放的顺序完全与申请的顺序保持一致,可以完全解决在该块内存的碎片问题,提高了系统长期运行的稳定性,通过维护两张连接描述符表table,实现多路socket数据不漏发,不漏释放,提高了数据的传输效率。
实施例三
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例一所述的RTOS串口网络传输方法中的步骤。
实施例四
本实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述实施例一所述的RTOS串口网络传输方法中的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种RTOS串口网络传输方法,其特征在于,包括:
数据接收步骤:采用DMA循环接收模式接收数据且接收数据全程无中断产生,对接收到的数据进行打包处理;
内存管理步骤:指定一块内存虚拟成一个内存堆设备,注册到RTOS设备驱动框架中,通过设备访问接口实现内存申请与释放,采用双向链表实现对已申请内存采用类fifo的管理;类fifo的特点是先进先出,每一路socket的处理函数会遍历该双向链表,将最先申请的第一个节点数据取出,确定是最后一个引用该数据的socket,然后将内存释放掉,该操作保证了最先申请的内存会被最先释放;
数据发送步骤:遍历双向链表来查找并读取设备节点信息;维护两张描述符表table1和table2,实现多路socket数据无漏转发及无漏释放;其中,table1记录每一路处于连接状态的描述符;table2记录引用内存的设备节点描述符;
在所述数据发送步骤中,在数据发送时遍历描述符表table1,同时对比内存块中的描述符表table2,通过判断table1中其他描述符是否全部在table2内,确定出最后一个引用当前设备节点数据的描述符,数据转发完后释放内存块,删除双向链表中的当前设备节点,结束当前设备节点的数据传输。
2.如权利要求1所述的RTOS串口网络传输方法,其特征在于,判断table1中的其他描述符是否全部在内存块中的table2中,如果不是,则将数据发送出去且将本连接的描述符写入内存中的table2中;如果是,则确定出最后一个引用当前设备节点数据的描述符。
3.如权利要求1所述的RTOS串口网络传输方法,其特征在于,在所述数据接收步骤中,采用DMA传输机制将接收到的数据循环存入环形缓冲区,打包定时器的中断处理函数更新环形缓冲区的写指针及执行打包策略,串口数据处理线程将数据读出并更新环形缓冲区的读指针。
4.如权利要求3所述的RTOS串口网络传输方法,其特征在于,在所述数据接收步骤中,进入中断处理函数后先判断缓冲区的数据量,若数据量超过打包长度,则释放信号量,解除读取阻塞;通过判断前后两次记录的缓冲区数据量来判断本次中断有无新的数据进来,若无,则执行打包时间,当时间减小到0时释放信号量,解除读取的阻塞;若读取的缓冲区数据量有增加,则重新赋值打包时间。
5.如权利要求3所述的RTOS串口网络传输方法,其特征在于,在串口数据处理线程读取数据时,先判断缓冲区的数据量是否大于打包长度,若是则直接将缓冲区的数据读出,否则,阻塞等待数据长度满足打包长度要求或时间满足打包时间要求;当解除阻塞后,判断判断缓冲区的数据量是否大于打包长度,若是则直接将缓冲区的数据读出,否则将所有的数据全部取出。
6.如权利要求1所述的RTOS串口网络传输方法,其特征在于,在内存管理步骤中,一路串口和对应的N路描述符之间共用一个设备,该设备的内存使用仅限当前链路使用;内存申请与释放管理采用类fifo机制,串口处理程序依次申请,网络处理程序依次释放。
7.一种RTOS串口网络传输装置,其特征在于,包括:
数据接收模块,其用于:采用DMA循环接收模式接收数据且接收数据全程无中断产生,对接收到的数据进行打包处理;
内存管理模块,其用于:指定一块内存虚拟成一个内存堆设备,注册到RTOS设备驱动框架中,通过设备访问接口实现内存申请与释放,采用双向链表实现对已申请内存采用类fifo的管理;类fifo的特点是先进先出,每一路socket的处理函数会遍历该双向链表,将最先申请的第一个节点数据取出,确定是最后一个引用该数据的socket,然后将内存释放掉,该操作保证了最先申请的内存会被最先释放;
数据发送模块,其用于:遍历双向链表来查找并读取设备节点信息;维护两张描述符表table1和table2,实现多路socket数据无漏转发及无漏释放;其中,table1记录每一路处于连接状态的描述符;table2记录引用内存的设备节点描述符;
在数据发送时遍历描述符表table1,同时对比内存块中的描述符表table2,通过判断table1中其他描述符是否全部在table2内,确定出最后一个引用当前设备节点数据的描述符,数据转发完后释放内存块,删除双向链表中的当前设备节点,结束当前设备节点的数据传输。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一项所述的RTOS串口网络传输方法中的步骤。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-6中任一项所述的RTOS串口网络传输方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010739892.2A CN111831596B (zh) | 2020-07-28 | 2020-07-28 | 一种rtos串口网络传输方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010739892.2A CN111831596B (zh) | 2020-07-28 | 2020-07-28 | 一种rtos串口网络传输方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111831596A CN111831596A (zh) | 2020-10-27 |
CN111831596B true CN111831596B (zh) | 2022-01-21 |
Family
ID=72920248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010739892.2A Active CN111831596B (zh) | 2020-07-28 | 2020-07-28 | 一种rtos串口网络传输方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831596B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113438241B (zh) * | 2021-06-25 | 2024-02-13 | 佳缘科技股份有限公司 | 一种数据传输方法及系统 |
CN114237945B (zh) * | 2022-02-25 | 2022-05-13 | 四川鸿创电子科技有限公司 | 一种基于srio接口的互联系统消息处理方法、装置和介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870627A (en) * | 1995-12-20 | 1999-02-09 | Cirrus Logic, Inc. | System for managing direct memory access transfer in a multi-channel system using circular descriptor queue, descriptor FIFO, and receive status queue |
CN101227341A (zh) * | 2007-12-18 | 2008-07-23 | 浪潮电子信息产业股份有限公司 | Linux系统上以太网卡快速捕包的方法 |
CN101470632A (zh) * | 2007-12-24 | 2009-07-01 | 华为软件技术有限公司 | 共享内存管理方法及装置 |
CN106844224A (zh) * | 2016-12-21 | 2017-06-13 | 华中科技大学 | 一种基于nvram的内存分配链表及内存分配方法 |
CN106951380A (zh) * | 2017-03-17 | 2017-07-14 | 山东浪潮商用系统有限公司 | 一种客户端、服务端、数据传输方法及系统 |
CN108470008A (zh) * | 2018-01-23 | 2018-08-31 | 广州市中海达测绘仪器有限公司 | 串口数据读写方法、装置、计算机设备和存储介质 |
CN109614240A (zh) * | 2018-12-13 | 2019-04-12 | 锐捷网络股份有限公司 | 内存申请方法、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107135189B (zh) * | 2016-02-26 | 2020-02-14 | 华为技术有限公司 | 一种报文发送方法及物理机 |
-
2020
- 2020-07-28 CN CN202010739892.2A patent/CN111831596B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870627A (en) * | 1995-12-20 | 1999-02-09 | Cirrus Logic, Inc. | System for managing direct memory access transfer in a multi-channel system using circular descriptor queue, descriptor FIFO, and receive status queue |
CN101227341A (zh) * | 2007-12-18 | 2008-07-23 | 浪潮电子信息产业股份有限公司 | Linux系统上以太网卡快速捕包的方法 |
CN101470632A (zh) * | 2007-12-24 | 2009-07-01 | 华为软件技术有限公司 | 共享内存管理方法及装置 |
CN106844224A (zh) * | 2016-12-21 | 2017-06-13 | 华中科技大学 | 一种基于nvram的内存分配链表及内存分配方法 |
CN106951380A (zh) * | 2017-03-17 | 2017-07-14 | 山东浪潮商用系统有限公司 | 一种客户端、服务端、数据传输方法及系统 |
CN108470008A (zh) * | 2018-01-23 | 2018-08-31 | 广州市中海达测绘仪器有限公司 | 串口数据读写方法、装置、计算机设备和存储介质 |
CN109614240A (zh) * | 2018-12-13 | 2019-04-12 | 锐捷网络股份有限公司 | 内存申请方法、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
Mbalancer:虚拟机内存资源动态预测与调配;王志钢等;《软件学报》;20141230;第25卷(第10期);全文 * |
面向对象的Modbus通信调度系统的研究;程轶斐等;《信息与电脑》;20181231(第2期);论文第4节 * |
Also Published As
Publication number | Publication date |
---|---|
CN111831596A (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240220442A1 (en) | High level instructions with lower-level assembly code style primitives within a memory appliance for accessing memory | |
US10846224B2 (en) | Methods and apparatus for control of a jointly shared memory-mapped region | |
US8276138B2 (en) | Segmented virtual machine transport mechanism | |
US20190102346A1 (en) | Offload of data lookup operations | |
CN111831596B (zh) | 一种rtos串口网络传输方法及装置 | |
JP6757808B2 (ja) | インフィニバンド(IB)上で仮想ホストバスアダプタ(vHBA)を管理およびサポートするためのシステムおよび方法、ならびに単一の外部メモリインターフェイスを用いてバッファの効率的な使用をサポートするためのシステムおよび方法 | |
CN104333533B (zh) | 一种用于工业控制系统网络的数据包零拷贝获取方法 | |
WO2018032510A1 (zh) | 应用于存储设备中的访问请求的处理方法和装置 | |
US7640549B2 (en) | System and method for efficiently exchanging data among processes | |
WO2020199760A1 (zh) | 数据存储方法、存储器和服务器 | |
WO2019153702A1 (zh) | 一种中断处理方法、装置及服务器 | |
US10719376B2 (en) | Methods and apparatus for multiplexing data flows via a single data structure | |
US11176064B2 (en) | Methods and apparatus for reduced overhead data transfer with a shared ring buffer | |
CN103731364A (zh) | 基于x86平台实现万兆大流量快速收包的方法 | |
CN111541624B (zh) | 空间以太网缓存处理方法 | |
US10095765B1 (en) | Method and apparatus for a hardware-implemented AVL tree module | |
CN109117288B (zh) | 一种低延迟旁路的消息优化方法 | |
CN111221642B (zh) | 一种数据处理方法、装置、存储介质及终端 | |
Tianhua et al. | Research and implementation of zero-copy technology in Linux | |
CN118152154B (zh) | 基于共享内存开发的通讯控制方法、系统和可读存储介质 | |
CN114828298B (zh) | 一种协议栈与物理层之间的通信系统与方法 | |
WO2024152588A1 (zh) | 内存访问的页错误处理方法及装置 | |
KR102260820B1 (ko) | 대칭적 인터페이스 기반 인터럽트 신호 처리 장치 및 방법 | |
Zhang et al. | Achieving Zero-copy Serialization for Datacenter RPC | |
CN118152154A (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 250101 rooms 1103 and 1105, 11 / F, building 1, Aosheng building, 1166 Xinluo street, high tech Zone, Jinan City, Shandong Province Applicant after: Shandong Youren networking Co.,Ltd. Address before: 250101 rooms 1103 and 1105, 11 / F, building 1, Aosheng building, 1166 Xinluo street, high tech Zone, Jinan City, Shandong Province Applicant before: SHANDONG YOUREN INFORMATION TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |