CN110417514B - 数据发送方法和装置、数据接收方法和装置 - Google Patents
数据发送方法和装置、数据接收方法和装置 Download PDFInfo
- Publication number
- CN110417514B CN110417514B CN201910660090.XA CN201910660090A CN110417514B CN 110417514 B CN110417514 B CN 110417514B CN 201910660090 A CN201910660090 A CN 201910660090A CN 110417514 B CN110417514 B CN 110417514B
- Authority
- CN
- China
- Prior art keywords
- data
- frame buffer
- fragment
- area
- frame
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0001—Systems modifying transmission characteristics according to link quality, e.g. power backoff
- H04L1/0033—Systems modifying transmission characteristics according to link quality, e.g. power backoff arrangements specific to the transmitter
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0001—Systems modifying transmission characteristics according to link quality, e.g. power backoff
- H04L1/0036—Systems modifying transmission characteristics according to link quality, e.g. power backoff arrangements specific to the receiver
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Communication Control (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本公开实施例公开了一种数据发送方法和装置、数据接收方法和装置,其中,数据发送方法包括:获取待发送数据帧;确定待发送数据帧的大小,以及确定用于存储待发送数据帧的目标帧缓冲区;基于大小,从预设数量的分片区中确定用于存储待发送数据帧的至少一个目标分片区,以及将待发送数据帧划分为至少一个分片数据并依次存入至少一个目标分片区;对于至少一个目标分片区的每个目标分片区,响应于确定该目标分片区对应的分片数据存入该目标分片区结束,提取该目标分片区中的分片数据并发送至数据接收端。本公开实施例实现了将存储数据和发送数据通过分片分开处理,提高了数据发送的速度。
Description
技术领域
本公开涉及计算机技术领域,尤其是一种数据发送方法和装置、数据接收方法和装置、计算机可读存储介质及电子设备。
背景技术
目前,基于PC侧获取原始图像并对嵌入式设备进行数据回灌多采用PCIe(Peripheral Component Interconnect express,高速串行计算机扩展总线标准)方式或者USB(Universal Serial Bus,通用串行总线)方式传输数据。采用USB方式时,虽然USB3.0的硬件理论速度达到400~500MB,但由于通常将USB接口转换为串口或网口,传输速率较慢,因此,当前需要一种较快的传输速度的数据传输方法。
发明内容
本公开的实施例提供了一种数据发送方法和装置、数据接收方法和装置、计算机可读存储介质及电子设备。
本公开的实施例提供了一种数据发送方法,该方法包括:获取待发送数据帧;确定待发送数据帧的大小,以及确定用于存储待发送数据帧的目标帧缓冲区,其中,目标帧缓冲区包括预设数量的分片区;基于大小,从预设数量的分片区中确定用于存储待发送数据帧的至少一个目标分片区,以及将待发送数据帧划分为至少一个分片数据并依次存入至少一个目标分片区;对于至少一个目标分片区的每个目标分片区,响应于确定该目标分片区对应的分片数据存入该目标分片区结束,提取该目标分片区中的分片数据并发送至数据接收端。
根据本公开实施例的另一个方面,提供了一种数据接收方法,该方法包括:接收数据发送端发送的分片数据;确定当前的帧接收状态是否满足初始接收条件,如果满足,确定分片数据是否为帧头;响应于确定分片数据为帧头,确定当前的帧缓冲区的存储状态;基于当前的帧缓冲区的存储状态,确定新的帧缓冲区并将分片数据存入新的帧缓冲区中的第一分片区。
根据本公开实施例的另一个方面,提供了一种数据发送装置,该装置包括:获取模块,用于获取待发送数据帧;第一确定模块,用于确定待发送数据帧的大小,以及确定用于存储待发送数据帧的目标帧缓冲区,其中,目标帧缓冲区包括预设数量的分片区;第二确定模块,用于基于大小,从预设数量的分片区中确定用于存储待发送数据帧的至少一个目标分片区,以及将待发送数据帧划分为至少一个分片数据并依次存入至少一个目标分片区;发送模块,用于对于至少一个目标分片区的每个目标分片区,响应于确定该目标分片区对应的分片数据存入该目标分片区结束,提取该目标分片区中的分片数据并发送至数据接收端。
根据本公开实施例的另一个方面,提供了一种数据接收装置,该装置包括:接收模块,用于接收数据发送端发送的分片数据;第四确定模块,用于确定当前的帧接收状态是否满足初始接收条件,如果满足,确定分片数据是否为帧头;第五确定模块,用于响应于确定分片数据为帧头,确定当前的帧缓冲区的存储状态;第六确定模块,用于基于当前的帧缓冲区的存储状态,确定新的帧缓冲区并将分片数据存入新的帧缓冲区中的第一分片区。
根据本公开实施例的另一个方面,提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序用于执行上述数据发送方法或数据接收方法。
根据本公开实施例的另一个方面,提供了一种电子设备,电子设备包括:处理器;用于存储处理器可执行指令的存储器;处理器,用于从存储器中读取可执行指令,并执行指令以实现上述数据发送方法或数据接收方法。
基于本公开上述实施例提供的数据发送方法和装置、数据接收方法和装置、计算机可读存储介质及电子设备,通过在数据发送端发送数据帧时,将数据帧划分为至少一个分片数据并依次存入分别对应的目标分片区,每个目标分片区存入相应的分片数据结束时,提取其中的分片数据并发送至数据接收端,从而实现了将存储数据和发送数据通过分片分开处理,提高了数据发送的速度。通过在数据接收端接收数据时,确定数据接收端当前的帧缓冲区的存储状态,基于存储状态,确定用于存储接收自数据发送端的分片数据的分片区,从而实现了通过存储状态的判断,实现自动分配帧缓冲区,避免了因发送数据时的丢包现象造成的存储空间浪费,提高了数据接收的效率。
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
附图说明
通过结合附图对本公开实施例进行更详细的描述,本公开的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本公开实施例的进一步理解,并且构成说明书的一部分,与本公开实施例一起用于解释本公开,并不构成对本公开的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
图1是本公开所适用的***图。
图2是本公开一示例性实施例提供的数据发送方法的流程示意图。
图3是本公开一示例性实施例提供的数据发送方法的应用场景示意图。
图4是本公开一示例性实施例提供的数据接收方法的流程示意图。
图5是本公开一示例性实施例提供的数据接收方法的应用场景示意图。
图6是本公开一示例性实施例提供的数据发送装置的结构示意图。
图7是本公开另一示例性实施例提供的数据发送装置的结构示意图。
图8是本公开一示例性实施例提供的数据接收装置的结构示意图。
图9是本公开另一示例性实施例提供的数据接收装置的结构示意图。
图10是本公开一示例性实施例提供的电子设备的结构图。
具体实施方式
下面,将参考附图详细地描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。
应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。
还应理解,在本公开实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。
还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
另外,本公开中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本公开实施例可以应用于终端设备、计算机***、服务器等电子设备,其可与众多其它通用或专用计算***环境或配置一起操作。适于与终端设备、计算机***、服务器等电子设备一起使用的众所周知的终端设备、计算***、环境和/或配置的例子包括但不限于:个人计算机***、服务器计算机***、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的***、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机***、大型计算机***和包括上述任何***的分布式云计算技术环境,等等。
终端设备、计算机***、服务器等电子设备可以在由计算机***执行的计算机***可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机***/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算***存储介质上。
申请概述
目前,基于PC侧获取原始图像并对嵌入式设备进行数据回灌多采用PCIe(Peripheral Component Interconnect express,高速串行计算机扩展总线标准)方式或者USB(Universal Serial Bus,通用串行总线)方式传输数据。采用USB方式时,虽然USB3.0的硬件理论速度达到400~500MB,但由于通常将USB接口转换为串口或网口,传输速率较慢。
示例性***
图1示出了可以应用本公开的实施例的数据发送方法或装置、数据接收方法或装置的示例性***架构100。
如图1所示,***架构100可以包括数据发送端101和数据接收端102。数据发送端101与数据接收端102可以通过各种方式通信连接,例如通过USB接口连接。
数据发送端101可以是各种电子设备,包括但不限于诸如笔记本电脑、PAD(平板电脑)等等的移动终端设备以及诸如台式计算机、工控机、服务器等等的固定终端。
数据接收端102也可以是各种电子设备,且可以与数据发送端101的类型相同或不同。例如,数据接收端可以是各种嵌入式平台(例如ARM Xilinx zu3等)。
需要说明的是,本公开的实施例所提供的数据发送方法一般由数据发送端101执行,相应地,数据发送装置一般设置于数据发送端101中;本公开的实施例所提供的数据接收方法一般由数据接收端102执行,相应地,数据接收装置一般设置于数据接收端102中。
应该理解,图1中的数据发送端和数据接收端的数目仅仅是示意性的。根据实现需要,可以具有任意数目的数据发送端和数据接收端。
示例性方法
图2是本公开一示例性实施例提供的数据发送方法的流程示意图。本实施例可应用在例如图1所示的数据发送端101上,如图2所示,包括如下步骤:
步骤201,获取待发送数据帧。
在本实施例中,数据发送端可以从远程或从本地获取待发送数据帧。其中,待发送数据帧可以是各种数据帧,例如图像、音频等。
步骤202,确定待发送数据帧的大小,以及确定用于存储待发送数据帧的目标帧缓冲区。
在本实施例中,数据发送端可以确定待发送数据帧的大小,以及确定用于存储待发送数据帧的目标帧缓冲区。其中,目标帧缓冲区包括预设数量的分片区。作为示例,数据发送端可以预先设置有预设容量(例如72MB)的存储区域作为存储数据帧的区域,该区域被划分为若干个(例如12个,每个6MB)帧缓冲区,每个帧缓冲区用于存储一个数据帧,且包括预设数量(例如6个,每个1MB)的分片区。数据发送端可以从各个帧缓冲区中,确定目标帧缓冲区。
如图3所示,实际物理空间为72MB,被划分为12个帧缓冲区,每个帧缓冲区为6MB,包含6个分片区。每个帧缓冲区用于存储一个数据帧,每个数据帧包括帧头(即图中的framehead)、有效数据(即图中的user frame data)和填充数据(即图中的Padding)。每个数据帧的大小(即图中帧头结构frame_head中包括的变量total_len)可以包含在帧头中。图中的初始化函数bct_init完成设备枚举以及描述符获取,根据对应的通道channel号,初始化该channel对应的资源,设备的***轮询检测通知,以及检测到设备启动守护线程进入阻塞等。写函数bct_write用于输入数据帧,每次传输(例如按照图3所示的usb bulk传输)一个数据帧,且最大不超过6M。当传输结束时,利用资源清理函数bct_release清除帧缓冲区索引、删除守护进程等。
步骤203,基于大小,从预设数量的分片区中确定用于存储待发送数据帧的至少一个目标分片区,以及将待发送数据帧划分为至少一个分片数据并依次存入至少一个目标分片区。
在本实施例中,数据发送端可以首先基于所确定的待发送数据帧的大小,从预设数量的分片区中确定用于存储待发送数据帧的至少一个目标分片区。作为示例,假设目标帧缓冲区包括6个分片区,每个分片区的大小为1MB,待发送数据帧的大小为5MB,则可以确定待发送数据帧的5个分片区为目标分片区。
然后,数据发送端将待发送数据帧划分为至少一个分片数据并依次存入至少一个目标分片区。例如,待发送数据帧的大小为5MB,则可以将待发送数据帧划分为5个分片数据,再将每个分片数据依次存储到各个目标分片区。
步骤204,对于至少一个目标分片区的每个目标分片区,响应于确定该目标分片区对应的分片数据存入该目标分片区结束,提取该目标分片区中的分片数据并发送至数据接收端。
在本实施例中,对于至少一个目标分片区的每个目标分片区,数据发送端可以响应于确定该目标分片区对应的分片数据存入该目标分片区结束,提取该目标分片区中的分片数据并发送至数据接收端。
需要说明的是,步骤203和步骤204可以同步地执行,即步骤203中将某个分片数据存储到相应的目标分片区后,即发送该目标分片区中的分片数据。
本公开的上述实施例提供的数据发送方法,通过在数据发送端发送数据帧时,将数据帧划分为至少一个分片数据并依次存入分别对应的目标分片区,每个目标分片区存入相应的分片数据结束时,提取其中的分片数据并发送至数据接收端,从而实现了将存储数据和发送数据通过分片分开处理,提高了数据发送的速度。
在一些可选的实现方式中,存储标记包括预设数量的标记位,预设数量的标记位中的标记位与预设数量的分片区中的分片区一一对应。作为示例,如图3所示,数据帧信息结构frame_info包括的变量busy_flag为存储标记。如果一个帧缓冲区包括6个分片区,则存储标记可以包括六个标记位,每个标记位对应一个分片区。对于至少一个目标分片区的每个目标分片区,数据发送端还可以响应于确定该目标分片区对应的分片数据存入该目标分片区结束,将该目标分片区对应的标记位设置为预设值。作为示例,预设值可以为“1”。存储标记的初始值为000000,如果第一个分片区中存入分片数据后,存储标记变为000001,第二个分片区中存入分片数据后,存储标记变为000011,以此类推。在发送分片数据时,可以根据相应的标记位确定分片区中是否存入分片数据,从而可以使发送数据的进程根据标记位确定是否从帧缓冲区中读取分片数据并发送,进而有助于实现多个分片区并行地向数据接收端发送分片数据,提高了数据发送的速度。
在一些可选的实现方式中,在上述图2所示实施例的步骤202中,数据发送端可以按照如下步骤确定目标帧缓冲区:
首先,获取当前的帧缓冲区索引。其中,当前的帧缓冲区索引用于指示当前可以用来存储数据帧的帧缓冲区。通常,数据发送端按照帧缓冲索引的顺序,依次为数据帧分配帧缓冲区。如图3所示,当前的帧缓冲区索引可以包含在帧发送控制结构frame_tx_ctrl中,即windex。
然后,确定帧缓冲区索引对应的存储标记。其中,存储标记用于指示帧缓冲区索引对应的帧缓冲区的存储状态(例如帧缓冲区被占用或为空闲),例如图3中的busy_flag。
最后,基于存储标记与表征帧缓冲区为空的第一标记,确定当前的帧缓冲区索引指示的帧缓冲区为目标帧缓冲区。作为示例,第一标记可以为“0”,表示帧缓冲区空闲,如果存储标记为第一标记,则确定当前的帧缓冲区索引指示的帧缓冲区为目标帧缓冲区。相应地,如果存储标记不为“0”,则确定当前的帧缓冲区索引对应的帧缓冲区无法存储数据帧。
本实现方式通过存储标记,可以快速地确定当前的帧缓冲区的存储状态,提高确定目标帧缓冲区的速度。
在一些可选的实现方式中,在将该目标分片区对应的标记位设置为预设值之后,数据发送端还可以执行如下步骤:
首先,启动预设的守护进程(例如图3所示的tx_daemon_thread),并设置进程状态标记,利用守护进程,将该目标分片区中的分片数据发送至数据接收端。其中,守护进程用于从分片区中提取数据(例如基于图3所示的读取帧缓冲区索引rindex提取数据)并发送至数据接收端。守护进程可以监控各个目标分片区中是否存储有分片数据,如果有分片数据(即对应的标记位为1),则设置用于表征当前处于分片数据发送过程的进程状态标记(例如图3所示的daemon_state)。
基于下一个分片区对应的标记位与预设值,确定是否需要清除进程状态标记。具体地,如果下一个待发送的分片数据所在的分片区对应的标记位为预设值(例如“1”),表示下一个分片区已存储有分片数据,此时不清除进程状态标记,即守护进程当前仍处于发送状态。如果下一个待发送的分片数据所在的分片区对应的标记位不为预设值,表示下一个分片数据还没有到来,此时清除进程状态标记,即守护进程当前处于等待状态。通常,如果守护进程处于等待状态,当下次发送分片数据时,需要将守护进程唤醒。
本可选的实现方式,利用守护进程实时监控目标帧缓冲区中的各个分片区的状态,通过设置进程状态标记,可以实时地确定是否正常发送数据,有助于判断数据发送是否阻塞。
在一些可选的实现方式中,数据发送端可以响应于待发送数据帧发送完毕,将存储标记设置为第一标记。当下次再发送数据帧时,可以根据存储标记确定帧缓冲区是否为空,从而有助于避免数据帧在缓冲区中的读写错误。通常,在将存储标记设置为第一标记之后,可以更新当前的帧缓冲区索引(例如当前的帧缓冲区索引加1),从而为发送下一个数据帧做准备。
在一些可选的实现方式中,数据发送端可以通过通用串行总线USB接口,将分片数据发送至数据接收端。例如,当采用USB接口时,由于采用了异步并发方式发送数据,因此可以使传输速度达到USB接口的传输极限。
图4是本公开一示例性实施例提供的数据接收方法的流程示意图。本实施例可应用在例如图1所示的数据接收端102上,如图4所示,包括如下步骤:
步骤401,接收数据发送端发送的分片数据。
在本实施例中,数据接收端可以接收如图1所示的数据发送端101发送的分片数据。
步骤402,确定当前的帧接收状态是否满足初始接收条件,如果满足,确定分片数据是否为帧头。
在本实施例中,数据接收端可以确定当前的帧接收状态是否满足初始接收条件。其中,初始接收条件是用于接收新的数据帧的条件。例如,用于存储当前的数据帧的帧缓冲区是否空闲。
如果满足初始接收条件,确定分片数据是否为帧头。其中,帧头是一个数据帧中,包括该数据帧的基本信息的分片数据,通常,帧头是数据帧中最先发送的分片数据。
如图5所示,示出了利用usb bulk传输数据帧的示意图。其中,初始化函数bct_init可以根据通道号等信息打开对应的USB设备以及完成设备的读空间mmap映射,返回操作空间基地址。读取帧信息函数bct_frame_read_info可以用于获取一个数据帧的偏移和物理缓存中的实际长度。读取帧结束函数bct_frame_read_complete用于通知内核数据已经处理完毕,内核执行清理工作。清理函数bct_release用于取消映射,关闭USB设备。
步骤403,响应于确定分片数据为帧头,确定当前的帧缓冲区的存储状态。
在本实施例中,数据接收端可以响应于确定分片数据为帧头,确定当前的帧缓冲区的存储状态。其中,数据接收端可以根据写入数据帧缓冲区索引(例如图5所示的frame_rindex)确定当前的帧缓冲区。存储状态用于表征帧缓冲区已满(即无法继续存储数据)或为空闲。通常,存储状态可以用预设的标记表征。数据接收端中可以预先设置有用于接收数据发送端发送的数据帧的存储区域,该存储区域可以用于存储多个数据帧,每个数据帧存储在一个帧缓冲区中。需要说明的是,本实施例的各个帧缓冲区的容量可以是不同的。
在一些可选的实现方式中,数据接收端可以获取当前的帧缓冲区对应的有效数据标记(例如图5所示的帧结构缓冲信息frame-info中的valid_flag)。其中,有效数据标记用于表征帧缓冲区是否已存储有有效的分片数据(例如有效的分片数据可以是能够确定属于哪个数据帧的分片数据)。
基于有效数据标记与第一预设值,确定当前的帧缓冲区是否已满。作为示例,第一预设值可以为1,每个帧缓冲区对应于一个有效数据标记,当有效数据标记为1时,表示对应的帧缓冲区已满。
步骤404,基于当前的帧缓冲区的存储状态,确定新的帧缓冲区并将分片数据存入新的帧缓冲区中的第一分片区。
在本实施例中,数据接收端可以基于当前的帧缓冲区的存储状态,确定新的帧缓冲区并将分片数据存入新的帧缓冲区中的第一分片区。具体地,可以利用表征帧缓冲区是否已满的标记确定当前的帧缓冲区的存储状态。如果存储状态表征当前的帧缓冲区已满,则从预设的帧存储区中确定其他的帧缓冲区。例如,可以按照用于存储分片数据的分片区索引(例如图5中的帧读取控制结构frame_rx_ctrl中包含的curr_frame_package_num)的顺序以及帧头包括的分片数据数量(例如图5中的帧头结构包括的package_num),确定相应数量的分片区作为新的帧缓冲区。上述第一分片区可以是新的帧缓冲区中用于存储帧头的分片区,通常,第一分片区排在帧缓冲区中的各个分片区的首位。
本公开的上述实施例提供的数据接收方法,通过在数据接收端接收数据时,确定数据接收端当前的帧缓冲区的存储状态,基于存储状态,确定用于存储接收自数据发送端的分片数据的分片区,从而实现了通过存储状态的判断,实现自动分配帧缓冲区,避免了因发送数据时的丢包现象造成的存储空间浪费,提高了数据接收的效率。
需要说明的是,本实施例中的各个帧缓冲区的容量可以不同,即根据接收到的数据帧的帧头分配相应容量的帧缓冲区,使接收的各个数据帧在存储区域中是连续存储的,存入一个数据帧结束后,可以返回存入的数据帧的地址,从而节约了存储空间。如图5所示,第一帧的帧缓冲区为6MB第三帧的帧缓冲区为5MB,各个帧缓冲区在物理空间内时连续存储的,实际物理空间最大72MB。
在一些可选的实现方式中,步骤402中,数据接收端可以按照如下步骤确定当前的帧接收状态是否满足初始接收条件:
首先,确定当前的帧缓冲区对应的当前分片数据计数值和丢弃帧缓冲区对应的丢弃帧标记是否为第二预设值。其中,当前分片数据计数值(例如图5中的帧读取控制结构frame_rx_ctrl中包含的curr_frame_package_num)用于对存储在当前的帧缓冲区中的分片数据进行计数,丢弃帧标记(例如图5中的帧读取控制结构frame_rx_ctrl中包含的curr_frame_in_garbage)用于指示丢弃帧缓冲区(例如图5所示的Garbge_buf)中是否包括分片数据。丢弃帧缓冲区用于在各个帧缓冲区均已满且其中的数据均未被读取的情况下,存储接收的分片数据。作为示例,第二预设值可以为0。
然后,如果当前的帧缓冲区对应的当前分片数据计数值和当前丢弃帧缓冲区对应的丢弃帧标记均为第二预设值(例如0),确定当前的帧接收状态满足初始接收条件。具体地,当前分片数据计数值为第二预设值时,表示当前的帧缓冲区没有被使用,相应地,如果当前分片数据计数值不为第二预设值,表示当前的帧缓冲区正在接收数据帧。丢弃帧标记为第二预设值时,表示当前没有分片数据被丢弃,即帧缓冲区未满。
通过初始接收条件的判断,可以准确地确定当前的帧缓冲区是否能够存储分片数据,有助于及时地分配帧缓冲区,提高数据接收的效率。
在一些可选的实现方式中,如果上述当前分片数据计数值不为第二预设值且丢弃帧标记为第二预设值,数据接收端可以首先确定分片数据在当前接收的数据帧中的位置类型。具体地,当前分片数据计数值不为第二预设值时,表示当前的数据帧缓冲区正在接收一个数据帧中的有效数据。此时,可以确定步骤401中接收的分片数据的位置类型,其中,位置类型包括帧头和有效数据。
然后,数据接收端可以将分片数据存储在与位置类型相对应的帧缓冲区,具体地,当分片数据为帧头时,表示当前的帧缓冲区正在接收分片数据,且还未接收完一个完整的数据帧,此时接收到另一个帧头,即上一帧有分片数据丢失,此时可以重新确定新的帧缓冲区,并将所接收的分片数据存储到新的帧缓冲区。当分片数据不为帧头时,表示当前的帧缓冲区正在正常接收分片数据,此时可以将接收的分片数据按照当前的帧缓冲区中的分片区的顺序,存储到相应的分片区中。
在一些可选的实现方式中,如果上述位置类型表征分片数据为帧头,数据接收端可以输出当前的帧缓冲区的实际长度,并设置当前的帧缓冲区对应的有效数据标记为第一预设值(例如1)。此时,由于当前的帧缓冲区正在等待数据帧中的有效数据,但接收的是另一个帧的帧头,表示当前的帧缓冲区存储的数据帧不完整,即有掉包现象。将有效数据标记设置为第一预设值,表示当前的帧缓冲区已满,无法再存入分片数据。
如果位置类型表示分片数据不是帧头,数据接收端可以将分片数据存储至当前的帧缓冲区。具体地,可以根据分片区的顺序,将分片数据存入相应的分片区中。
如果位置类型表示分片数据为帧尾,设置当前的帧缓冲区对应的有效数据标记为第一预设值。此时,当前的帧缓冲区存储了一个完整的数据帧,将有效数据标记设置为第一预设值后,表示当前的帧缓冲区已满,无法再存入数据。
通过对分片数据的位置类型的判断,可以准确地确定当前的帧缓冲区是否已满,从而有助于及时地为下次接收分片数据做准备。
在一些可选的实现方式中,如果上述当前分片数据计数值为第二预设值(例如0)且丢弃帧标记不为第二预设值,将分片数据存储至丢弃帧缓冲区。具体地,当前分片数据计数值为第二预设值时,表示当前的帧缓冲区没有在接收数据,但由于丢弃帧标记不为第二预设值,表示之前接收的数据存储在丢弃帧缓冲区中,即各个帧缓冲区中的数据尚未被读取,无法存入新的数据。
在一些可选的实现方式中,数据接收端可以执行如下从帧缓冲区中读取数据的步骤:
首先,响应于从帧缓冲区中读取数据的操作,确定待读取帧缓冲区以及待读取帧缓冲区对应的有效数据标记。具体地,数据接收端可以根据用于表征当前待读取的帧缓冲区的索引(例如图5所示的frame_rindex),确定待读取帧缓冲区。
然后,如果待读取帧缓冲区对应的有效数据标记为第一预设值,数据接收端可以读取待读取帧缓冲区中的数据。当有效数据标记为第一预设值时,表示待读取帧缓冲区中包括有效数据,此时可以将有效数据读取出。
最后,响应于读取数据的操作完毕,数据接收端可以将待读取帧缓冲区对应的有效数据标记设置为第三预设值(例如0)。当下次向该待读取帧缓冲区存入数据时,可以根据有效数据标记,确定是否向该待读取帧缓冲区中存入数据。
在一些可选的实现方式中,在上述步骤403之后,数据接收设备还可以执行如下步骤:
如果当前的帧缓冲区的存储状态表征当前的帧缓冲区未满,将分片数据存储至当前的帧缓冲区中的第一分片区中。具体地,可以利用表征帧缓冲区是否已满的标记确定当前的帧缓冲区的存储状态。可选地,基于上述可选的实现方式中的有效数据标记,可以确定当前的帧缓冲区的存储状态。由于有效数据标记用于表征帧缓冲区是否已存储有有效的分片数据,因此,当有效数据标记表征当前的帧缓冲区未满时,同时也表征当前的帧缓冲区中没有存储有效的分片数据。上述第一分片区可以是新的帧缓冲区中用于存储帧头的分片区,通常,第一分片区排在帧缓冲区中的各个分片区的首位。本实现方式与上述步骤404相结合,可以实现自动为接收的分片数据分配存储地址,有助于提高数据接收的效率。
示例性装置
图6是本公开一示例性实施例提供的数据发送装置的结构示意图。本实施例可应用在如图1所示的数据发送端101上,如图6所示,数据发送装置包括:
获取模块601,用于获取待发送数据帧;
第一确定模块602,用于确定待发送数据帧的大小,以及确定用于存储待发送数据帧的目标帧缓冲区,其中,目标帧缓冲区包括预设数量的分片区;
第二确定模块603,用于基于大小,从预设数量的分片区中确定用于存储待发送数据帧的至少一个目标分片区,以及将待发送数据帧划分为至少一个分片数据并依次存入至少一个目标分片区;
发送模块604,用于对于至少一个目标分片区的每个目标分片区,响应于确定该目标分片区对应的分片数据存入该目标分片区结束,提取该目标分片区中的分片数据并发送至数据接收端。
在本实施例中,获取模块601可以从远程或从本地获取待发送数据帧。其中,待发送数据帧可以是各种数据帧,例如图像、音频等。
在本实施例中,第一确定模块602可以确定待发送数据帧的大小,以及确定用于存储待发送数据帧的目标帧缓冲区。其中,目标帧缓冲区包括预设数量的分片区。作为示例,第一确定模块602可以预先设置有预设容量(例如72MB)的存储区域作为存储数据帧的区域,该区域被划分为若干个(例如12个,每个6MB)帧缓冲区,每个帧缓冲区用于存储一个数据帧,且包括预设数量(例如6个,每个1MB)的分片区。第一确定模块602可以从各个帧缓冲区中,确定目标帧缓冲区。
在本实施例中,第二确定模块603可以首先基于所确定的待发送数据帧的大小,从预设数量的分片区中确定用于存储待发送数据帧的至少一个目标分片区。作为示例,假设目标帧缓冲区包括6个分片区,每个分片区的大小为1MB,待发送数据帧的大小为5MB,则可以确定待发送数据帧的5个分片区为目标分片区。
然后,第二确定模块603将待发送数据帧划分为至少一个分片数据并依次存入至少一个目标分片区。例如,待发送数据帧的大小为5MB,则可以将待发送数据帧划分为5个分片数据,再将每个分片数据依次存储到各个目标分片区。
在本实施例中,对于至少一个目标分片区的每个目标分片区,发送模块404可以响应于确定该目标分片区对应的分片数据存入该目标分片区结束,提取该目标分片区中的分片数据并发送至数据接收端。
参照图7,图7是本公开另一示例性实施例提供的数据发送装置的结构示意图。
在一些可选的实现方式中,第一确定模块602可以包括:
第一获取单元6021,用于获取当前的帧缓冲区索引;
第一确定单元6022,用于确定帧缓冲区索引对应的存储标记;
第二确定单元6023,用于基于存储标记与表征帧缓冲区为空的第一标记,确定当前的帧缓冲区索引指示的帧缓冲区为目标帧缓冲区。
在一些可选的实现方式中,存储标记包括预设数量的标记位,预设数量的标记位中的标记位与预设数量的分片区中的分片区一一对应;以及发送模块604进一步用于:对于至少一个目标分片区的每个目标分片区,响应于确定该目标分片区对应的分片数据存入该目标分片区结束,将该目标分片区对应的标记位设置为预设值。
在一些可选的实现方式中,在发送模块604可以包括:
启动单元6041,用于启动预设的守护进程,并设置进程状态标记,利用守护进程,将该目标分片区中的分片数据发送至数据接收端;
第三确定单元6042,用于基于下一个分片区对应的标记位与预设值,确定是否需要清除进程状态标记。
在一些可选的实现方式中,发送模块604可以进一步用于:响应于待发送数据帧发送完毕,将存储标记设置为第一标记。
在一些可选的实现方式中,发送模块604可以进一步用于:通过通用串行总线USB接口,将分片数据发送至数据接收端。
本公开上述实施例提供的数据发送装置,通过在数据发送端发送数据帧时,将数据帧划分为至少一个分片数据并依次存入分别对应的目标分片区,每个目标分片区存入相应的分片数据结束时,提取其中的分片数据并发送至数据接收端,从而实现了将存储数据和发送数据通过分片分开处理,提高了数据发送的速度。
图8是本公开一示例性实施例提供的数据接收装置的结构示意图。本实施例可应用在电子设备上,如图8所示,数据接收装置包括:
接收模块801,用于接收数据发送端发送的分片数据;
第四确定模块802,用于确定当前的帧接收状态是否满足初始接收条件,如果满足,确定分片数据是否为帧头;
第五确定模块803,用于响应于确定分片数据为帧头,确定当前的帧缓冲区的存储状态;
第六确定模块804,用于基于当前的帧缓冲区的存储状态,确定新的帧缓冲区并将分片数据存入新的帧缓冲区中的第一分片区。
在本实施例中,接收模块801可以接收如图1所示的数据发送端101发送的分片数据。
在本实施例中,第四确定模块802可以确定当前的帧接收状态是否满足初始接收条件。其中,初始接收条件是用于接收新的数据帧的条件。例如,用于存储当前的数据帧的帧缓冲区是否空闲。
如果满足初始接收条件,确定分片数据是否为帧头。其中,帧头是一个数据帧中,包括该数据帧的基本信息的分片数据,通常,帧头是数据帧中最先发送的分片数据。
在本实施例中,第五确定模块803可以响应于确定分片数据为帧头,确定当前的帧缓冲区的存储状态。其中,存储状态用于表征帧缓冲区已满(即无法继续存储数据)或为空闲。通常,存储状态可以用预设的标记表征。
在本实施例中,第六确定模块804可以基于当前的帧缓冲区的存储状态,确定新的帧缓冲区并将分片数据存入新的帧缓冲区中的第一分片区。具体地,可以利用表征帧缓冲区是否已满的标记确定当前的帧缓冲区的存储状态。如果存储状态表征当前的帧缓冲区已满,则从预设的帧存储区中确定其他的帧缓冲区。例如,可以按照用于存储分片数据的分片区索引的顺序以及帧头包括的分片数据数量,确定相应数量的分片区作为新的帧缓冲区。上述第一分片区可以是新的帧缓冲区中用于存储帧头的分片区,通常,第一分片区排在帧缓冲区中的各个分片区的首位。
参照图9,图9是本公开另一示例性实施例提供的数据接收装置的结构示意图。
在一些可选的实现方式中,第五确定模块803可以包括:第二获取单元8031,用于获取当前的帧缓冲区对应的有效数据标记;第四确定单元8032,用于基于有效数据标记与第一预设值,确定当前的帧缓冲区是否已满。
在一些可选的实现方式中,第四确定模块802可以包括:第五确定单元8021,用于确定当前的帧缓冲区对应的当前分片数据计数值和丢弃帧缓冲区对应的丢弃帧标记是否为第二预设值;第六确定单元8022,用于如果当前的帧缓冲区对应的当前分片数据计数值和当前丢弃帧缓冲区对应的丢弃帧标记均为第二预设值,确定当前的帧接收状态满足初始接收条件。
在一些可选的实现方式中,第四确定模块802还可以包括:第七确定单元8023,用于如果当前分片数据计数值不为第二预设值且丢弃帧标记为第二预设值,确定分片数据在当前接收的数据帧中的位置类型;第一存储单元8024,用于将分片数据存储在与位置类型相对应的帧缓冲区。
在一些可选的实现方式中,第一存储单元8024可以包括:第一设置子单元80241,用于如果位置类型表征分片数据为帧头,输出当前的帧缓冲区的实际长度,并设置当前的帧缓冲区对应的有效数据标记为第一预设值;存储子单元80242,用于如果位置类型表示分片数据不是帧头,将分片数据存储至当前的帧缓冲区;第二设置子单元80243,用于确定位置类型表示分片数据是否为帧尾,如果位置类型表示分片数据为帧尾,设置当前的帧缓冲区对应的有效数据标记为第一预设值。
在一些可选的实现方式中,第四确定模块802还可以包括:第二存储单元8025,用于如果当前分片数据计数值为第二预设值且丢弃帧标记不为第二预设值,将分片数据存储至丢弃帧缓冲区。
在一些可选的实现方式中,上述装置还可以包括:第七确定模块805,用于响应于从帧缓冲区中读取数据的操作,确定待读取帧缓冲区以及待读取帧缓冲区对应的有效数据标记;读取模块806,用于如果待读取帧缓冲区对应的有效数据标记为第一预设值,读取待读取帧缓冲区中的数据;设置模块807,用于响应于读取数据的操作完毕,将待读取帧缓冲区对应的有效数据标记设置为第三预设值。
在一些可选的实现方式中,上述装置还可以包括:存储模块808,用于如果当前的帧缓冲区的存储状态表征当前的帧缓冲区未满,将分片数据存储至当前的帧缓冲区中的第一分片区中。
本公开上述实施例提供的数据接收装置,通过在数据接收端接收数据时,确定数据接收端当前的帧缓冲区的存储状态,基于存储状态,确定用于存储接收自数据发送端的分片数据的分片区,从而实现了通过存储状态的判断,实现自动分配帧缓冲区,避免了因发送数据时的丢包现象造成的存储空间浪费,提高了数据接收的效率。
示例性电子设备
下面,参考图10来描述根据本公开实施例的电子设备。该电子设备可以是如图1所示的数据发送端101和数据接收端中的任一个。
图10图示了根据本公开实施例的电子设备的框图。
如图10所示,电子设备1000包括一个或多个处理器1001和存储器1002。
处理器1001可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备1000中的其他组件以执行期望的功能。
存储器1002可以包括一个或多个计算机程序产品,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器1001可以运行程序指令,以实现上文的本公开的各个实施例的数据发送方法、数据接收方法以及/或者其他期望的功能。在计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
在一个示例中,电子设备1000还可以包括:输入装置1003和输出装置1004,这些组件通过总线***和/或其他形式的连接机构(未示出)互连。
例如,该输入装置1003可以是鼠标、键盘等设备,用于输入命令等信息。
该输出装置1004可以向外部输出各种信息,包括数据帧。该输出设备1004可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图10中仅示出了该电子设备1000中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备1000还可以包括任何其他适当的组件。
示例性计算机程序产品和计算机可读存储介质
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的数据发送方法或数据接收方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的数据发送方法或数据接收方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于***实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本公开中涉及的器件、装置、设备、***的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、***。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (16)
1.一种数据发送方法,包括:
获取待发送数据帧;
确定所述待发送数据帧的大小,以及确定用于存储所述待发送数据帧的目标帧缓冲区,其中,所述目标帧缓冲区包括预设数量的分片区;
基于所述大小,从所述预设数量的分片区中确定用于存储所述待发送数据帧的至少一个目标分片区,以及将所述待发送数据帧划分为至少一个分片数据并依次存入所述至少一个目标分片区;
对于所述至少一个目标分片区的每个目标分片区,响应于确定该目标分片区对应的分片数据存入该目标分片区结束,提取该目标分片区中的分片数据并发送至数据接收端;
所述确定用于存储所述待发送数据帧的目标帧缓冲区,包括:
获取当前的帧缓冲区索引;
确定所述帧缓冲区索引对应的存储标记;
基于所述存储标记与表征帧缓冲区为空的第一标记,确定所述当前的帧缓冲区索引指示的帧缓冲区为目标帧缓冲区。
2.根据权利要求1所述的方法,其中,所述存储标记包括预设数量的标记位,所述预设数量的标记位中的标记位与所述预设数量的分片区中的分片区一一对应;以及
所述方法还包括:
对于所述至少一个目标分片区的每个目标分片区,响应于确定该目标分片区对应的分片数据存入该目标分片区结束,将该目标分片区对应的标记位设置为预设值。
3.根据权利要求2所述的方法,其中,在所述将该目标分片区对应的标记位设置为预设值之后,所述方法还包括:
启动预设的守护进程,并设置进程状态标记,利用所述守护进程,将该目标分片区中的分片数据发送至数据接收端;
基于下一个分片区对应的标记位与所述预设值,确定是否需要清除所述进程状态标记。
4.根据权利要求1所述的方法,其中,所述方法还包括:
响应于所述待发送数据帧发送完毕,将所述存储标记设置为所述第一标记。
5.根据权利要求1-4之一所述的方法,其中,所述提取该目标分片区中的分片数据并发送至数据接收端,包括:
通过通用串行总线USB接口,将分片数据发送至所述数据接收端。
6.一种数据接收方法,包括:
接收数据发送端发送的分片数据;
确定当前的帧接收状态是否满足初始接收条件,如果满足,确定所述分片数据是否为帧头;
响应于确定所述分片数据为帧头,确定当前的帧缓冲区的存储状态;
基于所述当前的帧缓冲区的存储状态,确定新的帧缓冲区并将所述分片数据存入所述新的帧缓冲区中的第一分片区;
所述确定当前的帧接收状态是否满足初始接收条件,包括:
确定当前的帧缓冲区对应的当前分片数据计数值和丢弃帧缓冲区对应的丢弃帧标记是否为第二预设值;
如果当前的帧缓冲区对应的当前分片数据计数值和当前丢弃帧缓冲区对应的丢弃帧标记均为第二预设值,确定当前的帧接收状态满足初始接收条件。
7.根据权利要求6所述的方法,其中,所述确定当前的帧缓冲区的存储状态,包括:
获取所述当前的帧缓冲区对应的有效数据标记;
基于所述有效数据标记与第一预设值,确定所述当前的帧缓冲区是否已满。
8.根据权利要求6所述的方法,其中,所述方法还包括:
如果所述当前分片数据计数值不为第二预设值且所述丢弃帧标记为第二预设值,确定所述分片数据在当前接收的数据帧中的位置类型;
将所述分片数据存储在与所述位置类型相对应的帧缓冲区。
9.根据权利要求8所述的方法,其中,所述将所述分片数据存储在与所述位置类型相对应的帧缓冲区,包括:
如果所述位置类型表征所述分片数据为帧头,输出所述当前的帧缓冲区的实际长度,并设置当前的帧缓冲区对应的有效数据标记为所述第一预设值;
如果所述位置类型表示所述分片数据不是帧头,将所述分片数据存储至所述当前的帧缓冲区;
确定所述位置类型表示所述分片数据是否为帧尾,如果所述位置类型表示所述分片数据为帧尾,设置所述当前的帧缓冲区对应的有效数据标记为第一预设值。
10.根据权利要求6所述的方法,其中,所述方法还包括:
如果所述当前分片数据计数值为第二预设值且所述丢弃帧标记不为第二预设值,将所述分片数据存储至丢弃帧缓冲区。
11.根据权利要求7所述的方法,其中,所述方法还包括:
响应于从帧缓冲区中读取数据的操作,确定待读取帧缓冲区以及所述待读取帧缓冲区对应的有效数据标记;
如果所述待读取帧缓冲区对应的有效数据标记为第一预设值,读取所述待读取帧缓冲区中的数据;
响应于所述读取数据的操作完毕,将所述待读取帧缓冲区对应的有效数据标记设置为第三预设值。
12.根据权利要求6-11之一所述的方法,其中,所述方法还包括:
如果所述当前的帧缓冲区的存储状态表征当前的帧缓冲区未满,将所述分片数据存储至所述当前的帧缓冲区中的第一分片区中。
13.一种数据发送装置,包括:
获取模块,用于获取待发送数据帧;
第一确定模块,用于确定所述待发送数据帧的大小,以及确定用于存储所述待发送数据帧的目标帧缓冲区,其中,所述目标帧缓冲区包括预设数量的分片区;
第二确定模块,用于基于所述大小,从所述预设数量的分片区中确定用于存储所述待发送数据帧的至少一个目标分片区,以及将所述待发送数据帧划分为至少一个分片数据并依次存入所述至少一个目标分片区;
发送模块,用于对于所述至少一个目标分片区的每个目标分片区,响应于确定该目标分片区对应的分片数据存入该目标分片区结束,提取该目标分片区中的分片数据并发送至数据接收端;
所述第一确定模块包括:
第一获取单元,用于获取当前的帧缓冲区索引;
第一确定单元,用于确定所述帧缓冲区索引对应的存储标记;
第二确定单元,用于基于所述存储标记与表征帧缓冲区为空的第一标记,确定所述当前的帧缓冲区索引指示的帧缓冲区为目标帧缓冲区。
14.一种数据接收装置,包括:
接收模块,用于接收数据发送端发送的分片数据;
第四确定模块,用于确定当前的帧接收状态是否满足初始接收条件,如果满足,确定所述分片数据是否为帧头;
第五确定模块,用于响应于确定所述分片数据为帧头,确定当前的帧缓冲区的存储状态;
第六确定模块,用于基于所述当前的帧缓冲区的存储状态,确定新的帧缓冲区并将所述分片数据存入所述新的帧缓冲区中的第一分片区;
所述第四确定模块包括:
第五确定单元,用于确定当前的帧缓冲区对应的当前分片数据计数值和丢弃帧缓冲区对应的丢弃帧标记是否为第二预设值;
第六确定单元,用于如果当前的帧缓冲区对应的当前分片数据计数值和当前丢弃帧缓冲区对应的丢弃帧标记均为第二预设值,确定当前的帧接收状态满足初始接收条件。
15.一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1-12任一所述的方法。
16.一种电子设备,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1-12任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910660090.XA CN110417514B (zh) | 2019-07-22 | 2019-07-22 | 数据发送方法和装置、数据接收方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910660090.XA CN110417514B (zh) | 2019-07-22 | 2019-07-22 | 数据发送方法和装置、数据接收方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110417514A CN110417514A (zh) | 2019-11-05 |
CN110417514B true CN110417514B (zh) | 2022-02-01 |
Family
ID=68362299
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910660090.XA Active CN110417514B (zh) | 2019-07-22 | 2019-07-22 | 数据发送方法和装置、数据接收方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110417514B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115190089B (zh) * | 2022-05-26 | 2024-03-22 | 中科驭数(北京)科技有限公司 | 一种报文存储方法、装置、设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1929436A (zh) * | 2005-09-08 | 2007-03-14 | 北京中电华大电子设计有限责任公司 | 解决wlan接收缓冲区占用问题的方法和装置 |
CN101272221A (zh) * | 2008-05-04 | 2008-09-24 | 中兴通讯股份有限公司 | 一种文件数据的传输、接收方法及装置 |
EP2326049A1 (en) * | 2006-03-31 | 2011-05-25 | Qualcomm Incorporated | Memory management for high speed media access control |
CN103023808A (zh) * | 2012-12-28 | 2013-04-03 | 南京邮电大学 | 基于块状链表结构的6lowpan数据包重装缓存方法 |
CN103389944A (zh) * | 2012-05-09 | 2013-11-13 | 辉达公司 | 用于具有存储器分配限制的协处理器的虚拟存储器结构 |
CN103402136A (zh) * | 2013-07-29 | 2013-11-20 | 重庆大学 | 自适应调整缓存的控制方法、装置及自适应播放器 |
CN108696773A (zh) * | 2017-04-11 | 2018-10-23 | 上海谦问万答吧云计算科技有限公司 | 一种实时视频的传输方法及装置 |
CN109408447A (zh) * | 2018-12-11 | 2019-03-01 | 北京地平线机器人技术研发有限公司 | 一种基于spi的数据传输方法、装置及电子设备 |
-
2019
- 2019-07-22 CN CN201910660090.XA patent/CN110417514B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1929436A (zh) * | 2005-09-08 | 2007-03-14 | 北京中电华大电子设计有限责任公司 | 解决wlan接收缓冲区占用问题的方法和装置 |
EP2326049A1 (en) * | 2006-03-31 | 2011-05-25 | Qualcomm Incorporated | Memory management for high speed media access control |
CN101272221A (zh) * | 2008-05-04 | 2008-09-24 | 中兴通讯股份有限公司 | 一种文件数据的传输、接收方法及装置 |
CN103389944A (zh) * | 2012-05-09 | 2013-11-13 | 辉达公司 | 用于具有存储器分配限制的协处理器的虚拟存储器结构 |
CN103023808A (zh) * | 2012-12-28 | 2013-04-03 | 南京邮电大学 | 基于块状链表结构的6lowpan数据包重装缓存方法 |
CN103402136A (zh) * | 2013-07-29 | 2013-11-20 | 重庆大学 | 自适应调整缓存的控制方法、装置及自适应播放器 |
CN108696773A (zh) * | 2017-04-11 | 2018-10-23 | 上海谦问万答吧云计算科技有限公司 | 一种实时视频的传输方法及装置 |
CN109408447A (zh) * | 2018-12-11 | 2019-03-01 | 北京地平线机器人技术研发有限公司 | 一种基于spi的数据传输方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110417514A (zh) | 2019-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10120820B2 (en) | Direct memory access transmission control method and apparatus | |
US7953915B2 (en) | Interrupt dispatching method in multi-core environment and multi-core processor | |
EP3029912A1 (en) | Remote accessing method for device, thin client, and virtual machine | |
CN112650558B (zh) | 数据处理方法、装置、可读介质和电子设备 | |
US20180285294A1 (en) | Quality of service based handling of input/output requests method and apparatus | |
US8706927B2 (en) | Method for the recovery of a clock and system for the transmission of data between data memories by remote direct memory access and network station set up to operate in the method as a transmitting or, respectively, receiving station | |
KR20120087980A (ko) | 다중 인터페이스 솔리드 스테이트 디스크, 및 다중 인터페이스 솔리드 스테이트 디스크의 처리 방법 및 시스템 | |
WO2021109767A1 (zh) | 网络设备及其降低传输时延的方法 | |
CN107426113B (zh) | 报文接收方法及网络设备 | |
WO2014193467A1 (en) | Adaptive interrupt coalescing in a converged network | |
US6842792B2 (en) | Method and/or apparatus to sort request commands for SCSI multi-command packets | |
US20170364279A1 (en) | Systems and methods for non-uniform memory access aligned i/o for virtual machines | |
CN108090003A (zh) | 一种基于零拷贝的提升web服务器性能的方法、*** | |
CN102841870A (zh) | 基于高速串行总线的通用dma结构及预读方法 | |
CN110417514B (zh) | 数据发送方法和装置、数据接收方法和装置 | |
CN107025146B (zh) | 一种文件生成方法、装置和*** | |
US9940269B2 (en) | Conditionally releasing locks in response to requests | |
CN105677592A (zh) | 一种总线通信方法及*** | |
JP4468332B2 (ja) | パケット処理方法およびパケット処理装置 | |
CN115658586A (zh) | 资源管理芯片、方法、电子设备及可读存储介质 | |
EP1970815A1 (en) | Data transfering apparatus and information processing system | |
KR20120072134A (ko) | 가상 데스크톱 가속 장치 및 방법 | |
CN114020529A (zh) | 一种流表数据的备份方法、装置、网络设备和存储介质 | |
EP3734459B1 (en) | Method and system for prioritizing critical data object storage during backup operations | |
EP3734458B1 (en) | Method and system for prioritizing critical data object storage during backup operations |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |