CN113885811B - 一种数据接收方法、装置、芯片和电子设备 - Google Patents
一种数据接收方法、装置、芯片和电子设备 Download PDFInfo
- Publication number
- CN113885811B CN113885811B CN202111216582.3A CN202111216582A CN113885811B CN 113885811 B CN113885811 B CN 113885811B CN 202111216582 A CN202111216582 A CN 202111216582A CN 113885811 B CN113885811 B CN 113885811B
- Authority
- CN
- China
- Prior art keywords
- data
- thread
- data buffer
- writing
- usb
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/63—Image based installation; Cloning; Build to order
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Information Transfer Systems (AREA)
- Telephone Function (AREA)
Abstract
本申请实施例提供数据接收方法、装置、芯片和电子设备。方法应用于电子设备,电子设备包括用于暂存数据的第一存储器以及用于保存数据的第二存储器,第一存储器包括第一接收数据缓冲区以及第一解析数据缓冲区,方法包括:使用第一接收数据缓冲区接收第一数据;在第一数据接收完毕后,解析第一数据,获取第二数据,将第二数据写入到第一解析数据缓冲区;在第二数据写入到第一解析数据缓冲区完成后,将第二数据写入到第二存储器。根据本申请实施例的方法,可以大大提高数据传输效率,降低数据传输耗时。
Description
技术领域
本申请涉及通信技术领域,特别涉及一种数据接收方法、装置、芯片和电子设备。
背景技术
在现有技术的应用场景中,在对电子设备进行功能调试(debug)或出厂前的操作系统安装(例如,在手机出厂前刷机,在手机上安装操作系统)的过程中,通常需要将调试程序数据镜像或操作系统数据镜像(例如,pac包格式的数据)刷写至电子设备的存储器(例如,flash)。例如,在手机出厂前,需要将镜像烧写至手机flash,手机才能正常运行操作系统;又例如,在对手机进行调试时,需要将修改代码编译出的镜像烧写至手机flash,手机才能正常运行调试程序。
随着电子设备操作系统(例如,安卓(Android)系统)的升级,调试程序或操作系统的相应编译镜像产物也越来越大,将数据镜像刷写至电子设备的存储器的耗时也越来越长,这就严重影响了电子设备的debug效率以及产线效率(工厂批量刷电子设备操作系统的效率)。
发明内容
针对现有技术下将数据镜像刷写至电子设备的存储器的耗时过长的问题,本申请提供了一种数据接收方法、装置、芯片和电子设备,本申请还提供一种计算机可读存储介质。
本申请实施例采用下述技术方案:
第一方面,本申请提供一种数据接收方法,所述方法应用于电子设备,所述电子设备包括用于暂存数据的第一存储器以及用于保存数据的第二存储器,所述第一存储器包括第一接收数据缓冲区以及第一解析数据缓冲区,所述方法包括:
使用所述第一接收数据缓冲区接收第一数据;
在所述第一数据接收完毕后,解析所述第一接收数据缓冲区中的第一数据,获取第二数据,将所述第二数据写入到所述第一解析数据缓冲区;
在所述第二数据写入到所述第一解析数据缓冲区完成后,将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器。
在第一方面的一种实现方式中,所述第一存储器还包括第二接收数据缓冲区以及第二解析数据缓冲区,所述方法还包括:
在所述第一数据接收完毕后,使用所述第二接收数据缓冲区接收第三数据;
在所述第二数据写入到所述第一解析数据缓冲区完成后,在所述第三数据接收完毕后,解析所述第二接收数据缓冲区中的第三数据,获取第四数据,将所述第四数据写入到所述第二解析数据缓冲区;
在所述第四数据写入到所述第二解析数据缓冲区完成后,在将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器完成后,将所述第二解析数据缓冲区中的第四数据写入到所述第二存储器。
在第一方面的一种实现方式中,所述方法还包括:
在所述第三数据接收完毕后,在所述第二数据写入到所述第一解析数据缓冲区完成后,使用所述第一接收数据缓冲区接收第五数据;
在所述第四数据写入到所述第二解析数据缓冲区完成后,在所述第五数据接收完毕后,解析所述第一接收数据缓冲区中的第五数据,获取第六数据,将所述第六数据写入到所述第一解析数据缓冲区;
在所述第六数据写入到所述第一解析数据缓冲区完成后,在将所述第二解析数据缓冲区中的第四数据写入到所述第二存储器完成后,将所述第一解析数据缓冲区中的第六数据写入到所述第二存储器。
在第一方面的一种实现方式中,所述第一数据为压缩格式的数据,所述第二数据为所述第一数据解压缩之后的数据。
在第一方面的一种实现方式中,所述第一数据为sparse格式的数据。
在第一方面的一种实现方式中,所述第二数据为raw格式的数据。
在第一方面的一种实现方式中:
所述使用所述第一接收数据缓冲区接收第一数据,包括,获取所述第一接收数据缓冲区的锁,使用所述第一接收数据缓冲区接收所述第一数据,释放所述第一接收数据缓冲区的锁;
所述解析所述第一接收数据缓冲区中的第一数据,获取第二数据,将所述第二数据写入到所述第一解析数据缓冲区,包括,获取所述第一接收数据缓冲区以及所述第一解析数据缓冲区的锁,读取所述第一接收数据缓冲区中的第一数据,解析所述第一数据获取所述第二数据,将所述第二数据写入到所述第一解析数据缓冲区,释放所述第一接收数据缓冲区以及所述第一解析数据缓冲区的锁;
所述将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器,包括,获取所述第一解析数据缓冲区的锁,将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器,释放所述第一解析数据缓冲区的锁;
所述使用所述第二接收数据缓冲区接收第三数据,包括,获取所述第二接收数据缓冲区的锁,使用所述第二接收数据缓冲区接收所述第三数据,释放所述第二接收数据缓冲区的锁。
在第一方面的一种实现方式中,所述将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器,其中,基于后台写入模式将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器。
在第一方面的一种实现方式中:
所述将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器,包括:将所述第一解析数据缓冲区中的数据中,满足后台写入模式的数据转移规则的数据,基于所述后台写入模式写入到所述第二存储器;将所述第一解析数据缓冲区中的数据中,不满足所述后台写入模式的数据转移规则的数据,缓存为第一待写入数据;
所述将所述第二解析数据缓冲区中的第四数据写入到所述第二存储器,包括:将所述第一待写入数据与所述第二解析数据缓冲区中的第四数据作为一个数据集合,将所述数据集合中,满足所述后台写入模式的数据转移规则的数据,基于所述后台写入模式写入到所述第二存储器;将所述数据集合中,不满足所述后台写入模式的数据转移规则的数据,缓存为第二待写入数据。
在第一方面的一种实现方式中:
在所述第一解析数据缓冲区被写入第二数据后,所述第二解析数据缓冲区没有被写入数据时,将所述第一待写入数据,基于普通写入模式写入到所述第二存储器;
和/或,
在所述第二解析数据缓冲区被写入第四数据后,所述第一解析数据缓冲区没有被写入数据时,将所述第二待写入数据,基于普通写入模式写入到所述第二存储器。
在第一方面的一种实现方式中,所述方法还包括:
创建相互独立的接收数据线程、解析数据线程以及写入数据线程,其中:
所述接收数据线程用于,使用所述第一接收数据缓冲区接收所述第一数据;
所述解析数据线程用于,解析所述第一接收数据缓冲区中的第一数据,获取所述第二数据,将所述第二数据写入到所述第一解析数据缓冲区;
所述写入数据线程用于,在所述第一数据接收完毕后,将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器。
在第一方面的一种实现方式中,所述使用所述第一接收数据缓冲区接收所述第一数据之后,所述方法还包括:
当已接收到的数据总量与本次数据传输需要传输的数据总量一致时,结束所述接收数据线程。
在第一方面的一种实现方式中,所述解析所述第一接收数据缓冲区中的第一数据,获取所述第二数据,将所述第二数据写入到所述第一解析数据缓冲区之后,所述方法还包括:
当已解析的数据块总个数与本次数据传输需要传输的数据块总个数一致时,结束所述解析数据线程。
在第一方面的一种实现方式中,所述将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器之后,所述方法还包括:
当已写入的数据块总个数与本次数据传输需要传输的数据块总个数一致时,结束所述写入数据线程。
第二方面,本申请还提供一种数据接收装置,包括:
第一存储器,其用于暂存数据,所述第一存储器包括第一接收数据缓冲区以及第一解析数据缓冲区;
第二存储器,其用于保存数据;
数据接收模块,其用于使用所述第一接收数据缓冲区接收第一数据;
数据解析模块,其用于在所述第一数据接收完毕后,解析所述第一接收数据缓冲区中的第一数据,获取第二数据,将所述第二数据写入到所述第一解析数据缓冲区;
数据写入模块,其用于在所述第二数据写入到所述第一解析数据缓冲区完成后,将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器。
第三方面,本申请还提供一种通信芯片,包括:
处理器,其用于执行存储在存储器上的计算机程序指令,其中,当该计算机程序指令被该处理器执行时,触发所述通信芯片执行第一方面所述的方法步骤。
第四方面,本申请还提供一种电子设备,其特征在于,所述电子设备包括用于暂存数据的第一存储器、用于保存数据的第二存储器、用于存储计算机程序指令的第三存储器和用于执行程序指令的处理器,所述第一存储器包括第一接收数据缓冲区以及第一解析数据缓冲区,其中,当该计算机程序指令被该处理器执行时,触发所述电子设备执行如第一方面所述的方法步骤。
第五方面,本申请还提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如第一方面所述的方法。
根据本申请实施例所提出的上述技术方案,至少可以实现下述技术效果:
根据本申请实施例的方法,可以大大提高数据传输效率,降低数据传输耗时。
附图说明
图1所示为根据本申请一实施例的镜像数据传输数据流示意图;
图2所示为根据本申请一实施例的镜像数据传输数据流示意图;
图3所示为根据本申请一实施例的镜像数据传输数据流示意图;
图4所示为根据本申请一实施例的数据传输流程时序示意图;
图5a所示为根据本申请一实施例的数据传输的部分流程时序示意图;
图5b所示为根据本申请一实施例进行数据传输的耗时分布;
图5c所示为根据本申请一实施例进行数据传输的耗时分布;
图6所示为根据本申请一实施例的数据传输的部分流程时序示意图;
图7所示为根据本申请一实施例的数据传输的部分流程时序示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的实施方式部分使用的术语仅用于对本申请的具体实施例进行解释,而非旨在限定本申请。
在对电子设备进行debug或出厂前的操作系统安装时,通常由调试设备或安装设备通过下载(download)工具,使用通用串行总线(USB)将调试程序数据镜像或操作系统数据镜像刷写至电子设备的存储器。
例如,图1所示为根据本申请一实施例的镜像数据传输数据流示意图。如图1所示,在一pac包下载流程中,首先通过个人电脑终端(Personal Computer,PC)100中的下载工具(ResearchDownload)将image镜像通过USB以2MB的包大小发送至手机101的双倍速率同步动态随机存储器(Double Data Rate SDRAM,DDR)110中,手机收到镜像数据包(假设为2MB大小的数据包A1)后向PC端100反馈,之后手机端101通过后台(backstage)方式(例如,直接存储器访问(Direct Memory Access,DMA))在后台触发镜像的写入,将DDR110中的镜像(数据包A1)写入到手机的本地存储器120(例如,内嵌式存储器(Embedded Multi Media Card,EMMC))。然后手机101返回USB端继续触发PC100传输下一包2MB镜像数据(假设为2MB大小的数据包B1,数据包B1为数据包A1的下一个数据包),完成后返回EMMC端120问询上一包数据是否写入完成(数据包A1是否已成功写入到EMMC),若已完成写入,则在后台触发镜像的写入,将DDR110中的镜像(数据包B1)写入到EMMC120。然后手机返回USB端继续触发PC100传输下一包2MB镜像数据(假设为2MB大小的数据包C1,数据包C1为数据包B1的下一个数据包)。但是,如果未完成写入,则需要进行阻塞等待。
在上述流程中,镜像数据按照PC端发送-手机端接收-手机端写入的流程进行传输,如果手机端接收或手机端写入流程滞后,那么PC端或手机端就需要进行等待。严格意义上讲,镜像数据的传输并不是真正意义上的后台并行执行,这就大大影响了数据传输效率。
针对上述问题,本申请一实施例提出了一种数据传输方法。在镜像数据发送设备传输镜像数据到电子设备的过程中,在接收镜像数据的电子设备的内存中建立多个(至少两个)数据缓冲区,电子设备基于内存中的数据缓冲区接收镜像数据。多个数据缓冲区轮流被使用,当一个数据缓冲区被用于接收镜像数据时,其他的数据缓冲区可用于将数据缓冲区中的镜像数据写入到电子设备的本地存储器(EMMC)。这样,接收镜像数据与将接收到的镜像数据写入本地存储器的流程就可以并行执行,从而大大提高数据传输效率。
图2所示为根据本申请一实施例的镜像数据传输数据流示意图。如图2所示,手机201的内存(DDR210)中构造有usb buf 211以及usb buf 212两个数据缓冲区。
PC200中的下载工具(ResearchDownload)将image镜像通过USB以2MB的包大小(假设为2MB大小的数据包A2)发送至手机201的DDR110中的一个数据缓冲区中usb buf 211。在数据包A2发送完成后,PC200中的下载工具(ResearchDownload)可以继续将数据包B2发送至手机201的DDR110中的另一个数据缓冲区中usb buf 212,数据包B2为数据包A2的下一个数据包。并且,在PC200完成发送数据包A2到usb buf 211之后,usb buf 211中的数据包A2就可以被写入到手机201的本地存储器EMMC220。数据包B2的发送接收与数据包A2的写入可以并行执行,数据包B2的发送接收无需等待数据包A2完成写入后再执行。
进一步的,在数据包B2发送完成后(并且,usb buf 211中的数据包A2也成功写入到EMMC220后),PC200中的下载工具(ResearchDownload)可以继续将数据包C2发送至usbbuf 211,数据包C2为数据包B2的下一个数据包。
同样的,在数据包B2发送完成后(并且,usb buf 211中的数据包A2也成功写入到EMMC220后),usb buf 212中的数据包B2就也可以被写入到手机的本地存储器EMMC220。这样,DDR110通过usb buf 211以及usb buf 212两个数据缓冲区交替进行镜像数据的接收以及写入,使得接收镜像数据与将镜像数据写入到本地存储器的流程并行执行,大大提高了数据传输效率。
这里需要说明的是,在本申请说明书实施例中,数据传输设备通过USB向数据接收设备传输数据,并且,在每轮数据传输中,每个数据包的大小为2MB,但是,本申请实施例对数据传输的载体方式并不做具体限定,本领域的技术人员可以根据实际需求设计数据传输的载体以及数据包大小。
进一步的,在PC200向手机201发送镜像数据的过程中,镜像数据(例如,super.img)是以原始(raw)格式数据进行传输的,这就大大增加了镜像数据的数据量,增加了USB的传输时间,影响下载速率。这对这一问题,在本申请一实施例中,基于压缩格式(例如,稀疏(sparse)格式)进行镜像数据的传输,电子设备接收压缩格式的镜像数据并将其保存到内存(例如,DDR)。并且,在将内存中的镜像数据写入到电子设备的本地存储器之前,解析内存中的压缩格式的镜像数据,将其恢复为未压缩格式的镜像数据(例如,raw格式)。之后再将未压缩格式的镜像数据写入到电子设备的本地存储器。
这里需要说明的是,在本申请说明书的实施例中,电子设备接收的是镜像数据,但是,在本申请的实施例中,对电子设备所接收的数据的数据格式并不做具体限定,在本申请其他实施例中,电子设备可以基于本申请实施例的方法,接收镜像数据以外的其他类型的数据。
进一步的,在本申请说明书的实施例中,针对采用sparse压缩格式对需要传输到电子设备的数据进行压缩。但是,在本申请的实施例中,对压缩格式并不做具体限定,在本申请其他实施例中,可以采用sparse压缩格式以外的其他压缩格式。
图3所示为根据本申请一实施例的镜像数据传输数据流示意图。如图3所示,手机301的内存(DDR310)中构造有usb buf 1以及usb buf 2两个接收数据缓冲区,以及,emmcbuf 1以及emmc buf 2两个写入数据缓冲区。
PC300中的下载工具(ResearchDownload)将压缩格式的image镜像通过USB以2MB的包大小(假设为2MB大小的数据包A3)发送至手机301的DDR310中的一个接收数据缓冲区中usb buf 1。在数据包A3发送完成后,PC300中的下载工具(ResearchDownload)可以继续将数据包B3发送至手机301的DDR310中的另一个接收数据缓冲区中usb buf 2,数据包B3为数据包A3的下一个数据包。并且,在数据包A3发送完成后,手机301就可以对usb buf 1中压缩格式的镜像数据进行解析(解压缩),将解析结果(非压缩格式的镜像数据)保存到emmcbuf 1。数据包B3的发送接收与数据包A3的解析(解压缩)可以并行执行,数据包B3的发送接收无需等待数据包A3完成解析后再执行。
进一步的,在数据包B3发送完成后(并且,usb buf 1中的数据包A3也成功被解压缩到emmc buf 1后),PC200中的下载工具(ResearchDownload)可以继续将数据包C3发送至usb buf 1,数据包C3为数据包B3的下一个数据包。同样的,在数据包B3发送完成后(并且,usb buf 1中的数据包A3也成功被解压缩到emmc buf 1后),usb buf 2中的数据包B3就也可以被解析并写入到emmc buf 2。这样,DDR310通过usb buf 1、emmc buf 1以及usb buf2、emmc buf 2两组数据缓冲区交替进行镜像数据的接收以及解析,使得接收镜像数据与解析镜像数据的流程并行执行,大大提高了数据传输效率。
进一步的,在usb buf 1中的数据被解析完毕(解压缩的镜像数据被保存到emmcbuf 1)之后,手机301就可以将emmc buf 1中的非压缩格式的镜像数据写入到手机301的本地存储器EMMC320。在手机301将emmc buf 1中的非压缩格式的镜像数据写入到手机301的本地存储器EMMC320的过程中,手机301可以同步执行解析usb buf 2中的数据到emmc buf2的流程。在usb buf 2中的数据被解析完毕(解压缩的镜像数据被保存到emmc buf 2)之后,手机301就可以将emmc buf 2中的非压缩格式的镜像数据写入到手机301的本地存储器EMMC320。在手机301将emmc buf 2中的非压缩格式的镜像数据写入到手机301的本地存储器EMMC320的过程中,手机301可以同步执行解析usb buf 1中的数据到emmc buf 1的流程。
根据图3所示实施例,不仅可以大大降低PC300发送到手机301的数据的数据量,而且可以在手机301侧实现数据接收、解析以及写入的同步执行,从而大大提高数据传输的效率。
进一步的,为了实现图3所示实施例中的数据接收、解析以及写入的同步执行,在本申请一实施例中,采用了多线程并行执行的方案,针对数据的接收、解析以及写入分别创建独立的线程。例如,针对数据接收创建数据接收线程(USB线程,usb-thread),针对数据解析创建数据解析线程(sparse线程,sparse-thread),针对数据写入创建数据写入线程(EMMC线程,emmc- thread)。
具体的,在一实施例中,通过引入小核心(Little Kernel,lk)中的多线程机制,在引导加载(u-boot)下载阶段主线程(main)下创建三个下载相关线程:usb-thread、sparse-thread、emmc- thread。lk是类似操作系统(operating system,OS)一样的小操作系统,安卓(android)lk 也是应用启动(appsboot),是Qualcomm平台 arm11 端的启动引导(bootloader)。
图4所示为根据本申请一实施例的数据传输流程时序示意图。如图4所示,在图3所示的手机301从PC300下载数据之前,手机301的主线程(main)的执行进程(主循环main-loop)开启下载进程(do_download)。在do_download进程中,主线程(main)首先进行线程创建/恢复操作(thead create/resume),创建usb-thread、sparse-thread、emmc- thread三个线程,或者,恢复之前创建的usb-thread、sparse-thread、emmc- thread三个线程。usb-thread、sparse-thread、emmc- thread三个线程的执行进程分别为数据接收循环(usb-loop)、数据解析循环(sparse-loop)、数据写入循环(emmc-loop)。
usb-thread、sparse-thread、emmc- thread三个线程被创建/恢复完毕后进入等待队列(wait queue)。usb-thread、sparse-thread、emmc- thread三个线程休眠(block)后被列入(schedule)下载进程(do_download)的队列中。
在此之后,主线程(main)下载镜像数据(downlaod raw file),主线程(main)唤醒(wake up)下载进程(do_download)队列中的usb-thread、sparse-thread、emmc- thread三个线程,进入接收-解析-下载的循环进程中。例如,首先唤醒usb-thread,触发usb-thread开始在usb-loop中执行usb进程(数据接收进程,usb work)。在接收-解析-下载的循环进程中,usb-thread、sparse-thread、emmc- thread三个线程相互间进行线程调度转移(schedule yield),相互间进行执行节点的触发,完成镜像数据的接收、解析以及写入。
在主线程(main)唤醒usb-thread后,主线程(main)进入等待队列(wait queue)。在usb-thread、sparse-thread、emmc- thread结束后唤醒主线程(main)结束镜像数据的下载流程,例如,进行后续的USB进程(usb work)(例如,关闭USB端口)完成镜像数据的下载流程。
进一步的,本申请实施例对接收-解析-下载的循环进程中usb-thread、sparse-thread、emmc- thread三个线程间的触发逻辑关系不做具体限定,本领域的技术人员可以根据实际需求设计usb-thread、sparse-thread、emmc- thread三个线程间的触发逻辑关系。例如,在一实施例中,由主线程(main)触发usb-thread,由usb-thread触发sparse-thread,由sparse-thread触发emmc- thread,再由emmc- thread触发usb-thread已构成循环。
如图4所示,主线程(main)开始下载镜像数据(downlaod raw file)时,主线程(main)首先唤醒(wake up)usb-thread,触发usb-thread进入usb-loop,执行usb work,接收压缩格式的镜像数据。
在usb-thread执行usb work,接收压缩格式的镜像数据的过程中,usb-thread唤醒sparse-thread,触发sparse-thread进入sparse-loop,执行sparse work,解析压缩格式的镜像数据。
在sparse-thread执行sparse work,解析压缩格式的镜像数据的过程中,sparse-thread唤醒emmc-thread,触发emmc-thread进入emmc-loop,执行emmc work,将解压缩格式的镜像数据写入本地存储器。
在emmc-thread执行emmc work,将解压缩格式的镜像数据写入本地存储器的过程中,emmc-thread触发usb-thread继续执行usb work中的相关执行节点,构成进程循环。
进一步的,为了在接收-解析-下载的循环进程中usb-thread、sparse-thread、emmc- thread三个线程的并行执行混乱,出现两个进程同时针对同一个数据缓冲区进行读写操作的情况,在本申请一实施例中,引入了“锁”的方案。具体的,每一个数据缓冲区存在对应的锁,一个线程只有获取到对应数据缓冲区的锁后,才能对该数据缓冲区进行读写操作。每个锁在同一时刻只能被一个线程所获取,只有在获取锁的线程释放锁之后,该锁才能被其他线程所获取。
具体的,图5a所示为根据本申请一实施例的数据传输的部分流程时序示意图。在如图4所示,手机301的主线程(main)唤醒usb-thread,进入接收-解析-下载的循环进程中后。手机301的usb-thread、sparse-thread、emmc- thread三个线程执行下述流程。
S511,usb-thread获取usb buf 1的锁。
具体的,在主线程(main)唤醒usb-thread,进入接收-解析-下载的循环进程之前,usb buf 1、usb buf 2、emmc buf 1以及emmc buf 2四个数据缓冲区的锁默认为释放状态,任意线程可以获取处于释放状态的锁。进一步的,usb-thread、sparse-thread、emmc-thread三个线程可以在线程结束时释放自身所获取的锁,或者,在S511之前,在主线程(main)唤醒usb-thread之前,主线程(main)可以执行初始化步骤,将usb buf 1、usb buf2、emmc buf 1以及emmc buf 2四个数据缓冲区的锁初始化为释放状态。
并且,在主线程(main)唤醒usb-thread,进入接收-解析-下载的循环进程之前,接收数据缓冲的指针(usb_cur_buf)默认指向为usb buf 1,在S511中,usb-thread获取接收数据缓冲的指针所指向的接收数据缓冲区(usb buf 1)的锁。具体的,在S511之前,在主线程(main)唤醒usb-thread之前,主线程(main)可以执行初始化步骤,将usb_cur_buf初始化为指向usb buf 1。
在S511之后,usb-thread触发PC300通过USB向手机301的usb buf 1传输写入数据(S501)。
具体的,在S501中,usb-thread触发PC300通过USB向接收数据缓冲的指针所指向的接收数据缓冲区(usb buf 1)写入数据。
在S501之后,PC300通过USB向手机301的usb buf 1写入一个2MB大小的sparse格式镜像数据包(S502)。例如,在S502中,手机301的接收PC300通过USB发送的一个2MB大小的sparse格式镜像数据包,该镜像数据包保存到usb buf 1。
在S511之后,usb-thread还执行S512,检查usb buf 1的数据写入是否完成(S502是否执行完毕)。
具体的,在S512中,可以采用多种不同的方式检查usb buf 1的数据写入是否完成。例如,检查usb buf 1中的数据,确认usb buf 1中是否已被写入一个完整的数据包(usbbuf 1中写入的数据的结尾是否包含数据包结束标识);或者,监控PC300通过USB发送来的数据,确认PC300是否已发送数据包结束标识。
进一步的,在S512中,在确认usb buf 1的数据写入已完成后,usb-thread还检查PC300通过USB向手机301发送的数据是否已经全部发送完毕。如果已发送完毕,则说明在本次数据传输中,PC300不需要再通过USB向手机301传输数据,可以结束(block)usb-thread。
具体的,在一实施例中,在PC300开始通过USB向手机301发送sparse格式镜像数据包(发送第一个数据包)时,PC300向手机301发送本次需要传输的sparse格式镜像数据的整体大小(part_size)。在主线程(main)唤醒usb-thread后,usb-thread会统计本次数据传输中PC300通过USB所传输过来的数据的累计数据量(recv_total_size)。当recv_total_size=part_size时,则说明PC300已将本次需要传输的sparse格式镜像数据全部传输到手机301。
因此,在S512中,在确认usb buf 1的数据写入已完成后,usb-thread计算最新的recv_total_size,之后判断recv_total_size==part_size?。如果recv_total_size==part_size,则block usb-thread。如果不相等,则令接收数据缓冲的指针指向下一个接收数据缓冲区(令usb_cur_buf=usb_cur_buf->next),使得PC300向手机301传输下一个数据包时,数据包写入下一个接收数据缓冲区。具体的,由于S512之前,usb_cur_buf指向usbbuf 1,因此,当令usb_cur_buf=usb_cur_buf->next后,usb_cur_buf指向usb buf 2。
在确认usb buf 1的数据写入已完成,并且,recv_total_size不等于part_size后,usb-thread执行S513,释放usb buf 1的锁,并且,获取usb buf 2的锁。具体的,在S513中,由于usb buf 2的锁处于默认的释放状态,因此,usb-thread可以顺利获取usb buf 2的锁。
在usb-thread获取usb buf 2的锁之后,usb-thread触发PC300通过USB向手机301的usb buf 2传输写入数据(S503)。参照S501。
在S503之后,PC300通过USB向手机301的usb buf 2写入一个2MB大小的sparse格式镜像数据包。参照S502。
在usb-thread获取usb buf 2的锁之后,usb-thread还执行S514,检查usb buf 2的数据写入是否完成。参照S512。进一步的,在S514中,在确认usb buf 1的数据写入已完成后,usb-thread还检查PC300通过USB向手机301发送的数据是否已经全部发送完毕。如果已发送完毕,则说明在本次数据传输中,PC300不需要再通过USB向手机301传输数据,可以结束(block)usb-thread。参照S512的描述。
在确认usb buf 2的数据写入已完成,并且,recv_total_size不等于part_size后,usb-thread执行S515,释放usb buf 2的锁。
在S513之后,在usb-thread释放usb buf 1的锁之后,usb-thread触发sparse-thread执行S521,获取usb buf 1、emmc buf 1的锁。
具体的,在S521中,sparse-thread获取usb-thread释放的锁以及解析数据存储缓存指针(sparse2emmc_buf)所指向的写入数据缓冲区的锁。
usb-thread触发sparse-thread执行S521之前,usb-thread执行S513,释放usbbuf 1的锁。因此,在S521中,sparse-thread获取usb buf 1的锁。
在主线程(main)唤醒usb-thread,进入接收-解析-下载的循环进程之前,解析数据存储缓存指针(sparse2emmc_buf)默认指向为emmc buf 1,因此,在S521中,usb-thread获取解析数据存储缓存指针(sparse2emmc_buf)所指向的写入数据缓冲区(usb buf 1)的锁。具体的,在S511之前,在主线程(main)唤醒usb-thread之前,主线程(main)可以执行初始化步骤,将usb_cur_buf初始化为指向usb buf 1。进一步的,在S521之前,emmc buf 1的锁为默认的释放状态,因此,在S521中,sparse-thread可以顺利获取emmc buf 1的锁。
进一步的,在S513之后,在usb-thread释放usb buf 1的锁之后,usb-thread还可以基于返回(yield)关键字令sparse-thread执行S521。具体的,在S513之后,在usb-thread释放usb buf 1的锁之后,usb-thread yield到sparse-thread,向sparse-thread返回释放的usb buf 1的锁的描述。在从usb-thread yield回来时,sparse-thread执行S521。
在S521之后,sparse-thread执行S522,解析(解压缩)usb buf 1的数据,将解析结果(解压缩结果)写入emmc buf 1。例如,原始的镜像数据的格式为RAW格式,经过sparse格式压缩后得到sparse格式的镜像数据;在S502中,sparse格式的镜像数据被PC300通过USB写入到usb buf 1;在S522中,sparse-thread解析usb buf 1中sparse格式的镜像数据,得到RAW格式的原始的镜像数据,sparse-thread将RAW格式的原始的镜像数据写入emmc buf1。
进一步的,针对某些压缩格式,只有获取到完整的压缩文件后才能对压缩文件进行解压缩。而在将数据分包发送的应用场景中,一个压缩文件可能会被分割到多个压缩包中,只有获取到该压缩文件对应的所有压缩包后,才能解压缩获取该压缩文件的原始文件。
例如,基于sparse格式对RAW格式的原始的镜像数据进行压缩时,每个RAW格式的原始文件会被打包为一个片文件(chunk)。在数据传输时,一个chunk可能会被切割为多个数据块(block)进行传输,并且,不同的chunk可能被切割为不同数量的block。在PC300通过USB向usb buf 1或usb buf 2写入sparse格式数据时,一次写入一个2MB大小的sparse格式数据包,在该数据包中,可能包含一个完整chunk的所有block,也可能包含一个完整chunk的部分block。
例如,chunk A的数据大小为1MB;chunk B的数据大小为2MB,包含20个block;chunk C的数据大小为1MB。PC300通过USB向usb buf 1写入一个2MB大小的sparse格式数据包,该数据包包含chunk A以及chunk B的前10个block。之后,PC300通过USB向usb buf 2写入一个2MB大小的sparse格式数据包,该数据包包含chunk C以及chunk B的后10个block。sparse-thread解析usb buf 1的数据,可以获取chunk A对应的RAW格式的原始文件,但无法获取chunk B对应的RAW格式的原始文件。
因此,在S522中,并不一定会对usb buf 1中的所有数据进行解析(解压缩),而是首先针对chunk文件对应的原始文件的格式(chunk_type)为RAW格式的情况,sparse-thread需要检测usb buf 1中的数据是否完成了一个完整chunk的传输。
具体的,在chunk文件的头数据中,包含该chunk文件所包含的block的数量,sparse-thread首先读取chunk文件的头数据中的block数量,然后计算usb buf 1的数据中归属该chunk文件的block总数是否达到了chunk文件的头数据中的block数量。如果达到了,就说明usb buf 1中的数据完成了一个完整chunk的传输。如果未达到,就说明usb buf1中的数据并未完成一个完整chunk的传输。
如果usb buf 1中的数据完成了一个完整chunk的传输,sparse-thread则解析(解压缩)该chunk文件获取对应的RAW格式的原始文件。在对完整chunk完成解析(解压缩)后将解析结果(解压缩结果)RAW格式的原始文件写入emmc buf 1。
如果usb buf 1中的数据并未完成一个完整chunk的传输,例如,usb buf 1中包括某个chunk(chunkXX)从起始数据开始的前半部分数据,sparse-thread则解析(解压缩)该chunkXX在usb buf 1中的前半部分数据,并且记录chunkXX的类型(type),在下次对接收数据缓冲区(usb buf 2)的数据进行解析时根据记录的chunkXX的type,解析usb buf 2中,chunkXX的后半部分的数据。
进一步的,在sparse-thread针对usb buf 1或usb buf 2完成一次数据解析后,如果本次数据传输的所有sparse格式的数据均已被解析,则说明在本次数据传输中,不再会有新的sparse格式的数据被写入到usb buf 1以及usb buf 2,sparse-thread在本次数据传输中不再需要进行数据解析操作,可以结束sparse-thread。
因此,在S522中,在sparse-thread则解析完整chunk文件获取对应的RAW格式的原始文件并将RAW格式的原始文件写入emmc buf 1之后,sparse-thread还需要确认是否已将本次数据传输的所有sparse格式的数据均已被解析。如果本次数据传输的所有sparse格式的数据均已被解析,则结束sparse-thread。如果本次数据传输中还存在并未被解析的sparse格式的数据,则令解析数据存储缓存指针(sparse2emmc_buf)指向下一个写入数据缓冲区(令sparse2emmc_buf= sparse2emmc_buf->next),使得sparse-thread在下一次解析sparse格式的数据时,针对下一个写入数据缓冲区。具体的,由于S522之前,sparse2emmc_buf指向emmc buf 1,因此,当令sparse2emmc_buf= sparse2emmc_buf->next后,sparse2emmc_buf指向emmc buf 2。
具体的,在一实施例中,在PC300开始通过USB向手机301发送sparse格式镜像数据包(发送第一个数据包)时,PC300向手机301发送本次需要传输的sparse格式镜像数据所包含的所有block数量(total_blocks)。在sparse-thread解析chunk文件时,sparse-thread会统计已解析的chunk文件的累计block数量(sparse_header.total_blks),具体的,sparse-thread通过已解析的chunk文件中头数据所包含的block数量进行累加计算sparse_header.total_blks。当sparse_header.total_blks==total_blocks时,则说明sparse-thread已将本次需要传输的sparse格式镜像数据全部解析完成。
因此,在S522中,在sparse-thread解析完整chunk文件获取对应的RAW格式的原始文件并将RAW格式的原始文件写入emmc buf 1之后,sparse-thread计算最新的sparse_header.total_blks,之后判断sparse_header.total_blks==total_blocks?。如果sparse_header.total_blks==total_blocks,则结束sparse-thread (block sparse-thread)。如果不相等,则令sparse2emmc_buf= sparse2emmc_buf->next。
在sparse-thread对usb buf 1中所有可以被解析的数据(完整的chunk)完成解析,将解析结果写入emmc buf 1,并且,sparse_header.total_blks不等于total_blocks时,sparse-thread执行S523,释放usb buf 1、emmc buf 1的锁。
在sparse-thread释放emmc buf 1的锁(S523)之后,sparse-thread触发emmc-thread执行S531,获取emmc buf 1的锁。
具体的,在S531中,emmc-thread获取sparse -thread释放的锁。
sparse-thread触发emmc-thread执行S531之前,sparse-thread执行S523,释放emmc buf 1的锁。因此,在S531中,emmc-thread获取emmc buf 1的锁。
进一步的,在S523之后,在sparse-thread释放emmc buf 1的锁之后,sparse-thread还可以基于返回(yield)关键字令emmc-thread执行S531。具体的,在S523之后,在sparse-thread释放emmc buf 1的锁之后,sparse-thread yield到emmc-thread,向emmc-thread返回释放的emmc buf 1的锁的描述。在从sparse-thread yield回来时,emmc-thread判定sparse-thread针对emmc buf 1已处理完毕,emmc-thread执行S531。
在S531之后,emmc-thread将emmc buf 1中的数据写入到手机301的本地存储器EMMC320(S532)。
具体的,在S532中,emmc-thread基于后台(backstage)方式将emmc buf 1中的数据写入到EMMC320。
backstage方式对数据块大小(block size)以及存储地址偏移(emmc_offset)有限制,在基于后台(backstage)方式写入数据的过程中,数据只能以512 bytes的大小为单位进行写入,如果某段数据小于512bytes,只能将其补足为512bytes后才能写入。由于emmcbuf 1中的数据量并不一定是512bytes的整数倍,因此,在基于后台(backstage)方式将emmc buf 1中的数据写入到EMMC320的过程中,可能存在一部分数据(小于512bytes)无法写入到EMMC320的情况。
因此,在S532的一种实现方式中,基于后台(backstage)方式将emmc buf 1中的数据写入到EMMC320之前,emmc-thread首先判断emmc buf 1中的数据是否满足backstage数据传输规则(判断emmc buf 1中的数据量是否为512bytes的整数倍)。如果满足,则基于后台(backstage)方式将emmc buf 1中的数据写入到EMMC320。如果不满足,则基于后台(backstage)方式将emmc buf 1中为512bytes的整数倍的数据写入到EMMC320,基于普通写入模式(common_raw_write)将剩余的数据(小于512bytes)写入到EMMC320。
进一步的,在S532的一种实现方式中,基于后台(backstage)方式将emmc buf 1中的数据写入到EMMC320之前,emmc-thread判断emmc buf 1中的数据是否满足backstage数据传输规则(判断emmc buf 1中的数据量是否为512bytes的整数倍)。如果不满足,则基于后台(backstage)方式将emmc buf 1中为512bytes的整数倍的数据写入到EMMC320,缓存剩余的数据(小于512bytes)(例如,将剩余的数据缓存为第一待写入数据)。
之后,在S535中,如果在S532中缓存了第一待写入数据,在将emmc buf 2中的数据写入到EMMC320的过程中,将缓存的剩余的数据(第一待写入数据)与emmc buf 2中的数据作为一个整体,判断第一待写入数据与emmc buf 2中的数据的集合是否满足backstage数据传输规则(判断数据量是否为512bytes的整数倍)。如果满足,则基于后台(backstage)方式将第一待写入数据与emmc buf 2中的数据的集合写入到EMMC320。
如果不满足,则基于后台(backstage)方式第一待写入数据与emmc buf 2中的数据的集合中为512bytes的整数倍的数据写入到EMMC320,缓存剩余的数据(小于512bytes)(例如,将剩余的数据缓存为第二待写入数据),之后,在下一次的将emmc buf 1中的数据写入到EMMC320的过程中,将缓存的剩余的数据(第二待写入数据)与emmc buf 1中的数据作为一个整体。
进一步的,在一种实现方式中,如果在emmc buf 1被写入数据后,没有数据写入到emmc buf 2,那么,在S532中,如果emmc buf 1中的数据不满足backstage数据传输规则(emmc buf 1中的数据量不为512bytes的整数倍),基于普通写入模式将不满足backstage数据传输规则的数据(emmc buf 1中的数据中512bytes的整数倍之外的剩余数据)(小于512bytes)写入到EMMC320。
进一步的,在一种实现方式中,如果在S532中缓存了第一待写入数据,如果在emmcbuf 2被写入数据后,没有数据写入到emmc buf 1,那么,在S535中,如果第一待写入数据与emmc buf 2中的数据的数据集合不满足backstage数据传输规则(数据量不为512bytes的整数倍),基于普通写入模式将不满足backstage数据传输规则的剩余数据(第二待写入数据)(小于512bytes)写入到EMMC320。
进一步的,在emmc-thread将emmc buf 1或emmc buf 2的数据写到EMMC320后,如果本次数据传输的所有的数据均已被写入EMMC320,则说明emmc-thread在本次数据传输中不再需要进行数据写入操作,可以结束emmc-thread。
因此,在S532中,在emmc-thread将emmc buf 1的数据写到EMMC320后,emmc-thread还需要确认是否已将本次数据传输的数据写入EMMC320。如果本次数据传输的所有数据均已被写入EMMC320,则结束emmc-thread。
具体的,在一实施例中,在PC300开始通过USB向手机301发送sparse格式镜像数据包(发送第一个数据包)时,PC300向手机301发送本次需要传输的sparse格式镜像数据所包含的所有block数量(total_blocks)。在sparse-thread解析chunk文件时,sparse-thread会统计已解析的chunk文件的累计block数量(sparse_header.total_blks),参照S522的描述。当sparse_header.total_blks==total_blocks时,则说明sparse-thread已将本次需要传输的sparse格式镜像数据全部解析完成。
因此,在S532中,在emmc-thread将emmc buf 1的数据写到EMMC320后,emmc-thread判断sparse_header.total_blks==total_blocks?。如果sparse_header.total_blks==total_blocks,则结束emmc-thread (block emmc-thread)。
进一步的,在S531中,emmc-thread还可以根据之前匹配好的(fixed)的写入数据缓冲区确认需要获取的锁。
具体的,在主线程(main)唤醒usb-thread,进入接收-解析-下载的循环进程之前,emmc-thread默认匹配好的(fixed)emmc buf 1。具体的,在S511之前,在主线程(main)唤醒usb-thread之前,主线程(main)可以执行初始化步骤,将emmc-thread匹配好的(fixed)emmc buf 1。
在S523之后,sparse-thread触发emmc-thread执行S531,emmc-thread获取其所匹配好的(fixed)的emmc buf 1的锁。
在S532中,emmc-thread首先检测其所匹配好的(fixed)的emmc buf 1中的数据是否满足backstage数据传输规则(512b的整数倍),如果满足,则基于后台(backstage)方式将emmc buf 1中的数据写入到EMMC320。如果不满足,则基于后台(backstage)方式将emmcbuf 1中为512b的整数倍的数据写入到EMMC320,基于普通写入模式(common_raw_write)将剩余的数据(小于512b)写入到EMMC320。
进一步的,在S532中,在emmc-thread将emmc buf 1的数据写到EMMC320后,emmc-thread判断sparse_header.total_blks==total_blocks?。如果sparse_header.total_blks==total_blocks,则结束emmc-thread (block emmc-thread)。如果不相等,则将自己的匹配好的(fixed)对象转移到下一个写入数据缓冲区(emmc buf 2)。
在emmc-thread将emmc buf 1的数据写到EMMC320后,并且,当sparse_header.total_blks与total_blocks不相等时(S532之后),emmc-thread执行S533,释放emmc buf 1的锁。
进一步的,在另一实施例中,也在emmc-thread将emmc buf 1的数据写到EMMC320后,先执行S533,然后再确认本次数据传输的所有数据是否均已被写入EMMC320(确认sparse_header.total_blks与total_blocks是否相等)。
在S533之后(sparse_header.total_blks与total_blocks不相等,并且,emmc-thread已释放emmc buf 1的锁),emmc-thread触发usb-thread执行S516,获取usb buf 1的锁。由于在S523中,sparse-thread释放usb buf 1的锁。因此,在S516中,usb-thread可以获取usb buf 1的锁。
在S516之后,usb-thread触发PC300通过USB向手机301的usb buf 1传输写入数据(S505)。参照S501。
在S505之后,PC300通过USB向手机301的usb buf 1写入一个2MB大小的sparse格式镜像数据包(S506)。参照S502。
在S516之后,usb-thread还执行S517,检查usb buf 1的数据写入是否完成(S506是否执行完毕)。参照S512。
如果S506执行完毕,usb-thread执行S518,释放usb buf 1的锁。
在S515之后,在usb-thread释放usb buf 2的锁之后,usb-thread触发sparse-thread执行S524,获取usb buf 2、emmc buf 2的锁。参照S521。
在S524之后,sparse-thread执行S525,解析(解压缩)usb buf 2的数据,将解析结果(解压缩结果)写入emmc buf 2。参照S522。
在sparse-thread对usb buf 2中所有可以被解析的数据(完整的chunk)完成解析,将解析结果写入emmc buf 2,并且,sparse_header.total_blks不等于total_blocks时,sparse-thread执行S526,释放usb buf 2、emmc buf 2的锁。参照S523。
在sparse-thread释放emmc buf 2的锁(S526)之后,sparse-thread触发emmc-thread执行S534,获取emmc buf 2的锁。参照S531。
在S534之后,emmc-thread将emmc buf 2中的数据写入到手机301的本地存储器EMMC320(S535)。参照S532。
在emmc-thread将emmc buf 2的数据写到EMMC320后,并且,当sparse_header.total_blks与total_blocks不相等时(S535之后),emmc-thread执行S536,释放emmc buf 1的锁。参照S533。
在S536之后(sparse_header.total_blks与total_blocks不相等,并且,emmc-thread已释放emmc buf 2的锁),emmc-thread触发usb-thread执行S519,获取usb buf 2的锁。参照S516。
在S519之后,usb-thread触发PC300通过USB向手机301的usb buf 2传输写入数据(S507)。参照S505。
在S507之后,PC300通过USB向手机301的usb buf 2写入一个2MB大小的sparse格式镜像数据包(S508)。参照S504。
在S519之后,usb-thread检查usb buf 2的数据写入是否完成,继续进行USB数据接收的循环执行(参照S514~S519),直到某次循环中recv_total_size与part_size相等,usb-thread结束。
在S518之后,在usb-thread释放usb buf 1的锁之后,usb-thread触发sparse-thread执行S527,获取usb buf 1、emmc buf 1的锁。在此之后,sparse-thread继续进行解析数据的循环执行(参照S521~S526),直到某次循环中sparse_header.total_blks与total_blocks相等,sparse-thread结束。
在S536之后,emmc-thread等待sparse-thread再次触发以再次进行循环写入操作(参照S531~S536),直到某次循环中sparse_header.total_blks与total_blocks相等,emmc-thread结束。
根据图5a所示实施例的逻辑流程,可以有效提高镜像数据的传输效率,降低镜像数据传输耗时。图5b所示为采用图1所示实施例进行数据传输的耗时分布。如图5b所示,短暂延时(__udelay)的耗时分布为94.066%。图5c所示为采用图5a所示实施例进行数据传输的耗时分布。如图5c所示,短暂延时(__udelay)的耗时分布为7.615%。对比图5b以及图5c,相较于图1所示实施例,在图5a所示实施例中,大量__udelay被合理利用,数据的传输效率比大大提高,数据传输耗时被有效控制。
图6所示为根据本申请另一实施例的数据传输的部分流程时序示意图。在如图6所示,手机301的主线程(main)唤醒usb-thread,进入接收-解析-下载的循环进程中后。手机301的usb-thread、sparse-thread、emmc- thread三个线程执行下述流程。
S611,usb-thread获取usb buf 1的锁。参照S511。
在S611之后,usb-thread触发PC300通过USB向手机301的usb buf 1传输写入数据(S601)。参照S501。
在S601之后,PC300通过USB向手机301的usb buf 1写入一个2MB大小的sparse格式镜像数据包(S602)。参照S502。
在S611之后,usb-thread还执行S612,检查usb buf 1的数据写入是否完成(S602是否执行完毕)。参照S512。
在确认usb buf 1的数据写入已完成,并且,recv_total_size不等于part_size后,usb-thread执行S613,释放usb buf 1的锁,并且,获取usb buf 2的锁。参照S513。
在usb-thread获取usb buf 2的锁之后,usb-thread触发PC300通过USB向手机301的usb buf 2传输写入数据(S603)。参照S503。
在S603之后,PC300通过USB向手机301的usb buf 2写入一个2MB大小的sparse格式镜像数据包(S604)。参照S504。
在S613之后,在usb-thread释放usb buf 1的锁之后,usb-thread触发sparse-thread执行S621,获取usb buf 1、emmc buf 1的锁。参照S521。
在S621之后,sparse-thread执行S622,解析(解压缩)usb buf 1的数据,将解析结果(解压缩结果)写入emmc buf 1。参照S522。
在sparse-thread对usb buf 1中所有可以被解析的数据(完整的chunk)完成解析,将解析结果写入emmc buf 1,并且,sparse_header.total_blks不等于total_blocks时(S622之后),sparse-thread执行S623,释放usb buf 1、emmc buf 1的锁。参照S523。
在sparse-thread释放emmc buf 1的锁(S623)之后,sparse-thread触发emmc-thread执行S631,获取emmc buf 1的锁。参照S531。
在S631之后,emmc-thread将emmc buf 1中的数据写入到手机301的本地存储器EMMC320(S632)。参照S532。
在emmc-thread将emmc buf 1的数据写到EMMC320后,并且,当sparse_header.total_blks与total_blocks不相等时(S632之后),emmc-thread执行S633,释放emmc buf 1的锁。参照S533。
进一步的,在另一实施例中,也在emmc-thread将emmc buf 1的数据写到EMMC320后,先执行S633,然后再确认本次数据传输的所有数据是否均已被写入EMMC320(确认sparse_header.total_blks与total_blocks是否相等)。
在S633之后(sparse_header.total_blks与total_blocks不相等,并且,emmc-thread已释放emmc buf 1的锁),emmc-thread触发usb-thread执行S614,检查usb buf 2的数据写入是否完成。参照S514。
在确认usb buf 2的数据写入已完成,并且,recv_total_size不等于part_size后,usb-thread执行S615,释放usb buf 2的锁,获取usb buf 1的锁。由于在S623中,sparse-thread释放usb buf 1的锁。因此,在S615中,usb-thread可以获取usb buf 1的锁。
在S615之后,usb-thread触发PC300通过USB向手机301的usb buf 1传输写入数据(S605)。参照S505。
在S605之后,PC300通过USB向手机301的usb buf 1写入一个2MB大小的sparse格式镜像数据包(S606)。参照S506。
在S615之后,在usb-thread释放usb buf 2的锁之后,usb-thread触发sparse-thread执行S624,获取usb buf 2、emmc buf 2的锁。参照S524。
在S624之后,sparse-thread执行S625,解析(解压缩)usb buf 2的数据,将解析结果(解压缩结果)写入emmc buf 2。参照S525。
在sparse-thread对usb buf 2中所有可以被解析的数据(完整的chunk)完成解析,将解析结果写入emmc buf 2,并且,sparse_header.total_blks不等于total_blocks时,sparse-thread执行S626,释放usb buf 2、emmc buf 2的锁。参照S526。
在sparse-thread释放emmc buf 2的锁(S626)之后,sparse-thread触发emmc-thread执行S634,获取emmc buf 2的锁。参照S534。
在S634之后,emmc-thread将emmc buf 2中的数据写入到手机301的本地存储器EMMC320(S635)。参照S535。
在emmc-thread将emmc buf 2的数据写到EMMC320后,并且,当sparse_header.total_blks与total_blocks不相等时(S635之后),emmc-thread执行S636,释放emmc buf 1的锁。参照S536。
在S636之后(sparse_header.total_blks与total_blocks不相等,并且,emmc-thread已释放emmc buf 2的锁),emmc-thread触发usb-thread执行S616,检查usb buf 1的数据写入是否完成(S606是否执行完毕)。参照S517。
如果S606执行完毕,usb-thread执行S617,释放usb buf 1的锁,获取usb buf 2的锁。
在S617之后,usb-thread触发PC300通过USB向手机301的usb buf 2传输写入数据(S607)。参照S507。
在S607之后,PC300通过USB向手机301的usb buf 2写入一个2MB大小的sparse格式镜像数据包(S608)。参照S508。
在S617之后,usb-thread等待emmc-thread触发检查usb buf 2的数据写入是否完成,继续进行USB数据接收的循环执行(参照S614~S617),直到某次循环中recv_total_size与part_size相等,usb-thread结束。
在S626之后,sparse-thread等待usb-thread释放usb buf 1的锁,等待usb-thread触发sparse-thread获取usb buf 1、emmc buf 1的锁。在此之后,sparse-thread继续进行解析数据的循环执行(参照S621~S626),直到某次循环中sparse_header.total_blks与total_blocks相等,sparse-thread结束。
在S636之后,emmc-thread等待sparse-thread再次触发以再次进行循环写入操作(参照S631~S636),直到某次循环中sparse_header.total_blks与total_blocks相等,emmc-thread结束。
在本申请实施例的描述中,为了描述的方便,描述装置时以功能分为各种模块分别描述,各个模块的划分仅仅是一种逻辑功能的划分,在实施本申请实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
具体的,本申请实施例所提出的装置在实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块以软件通过处理元件调用的形式实现,部分模块通过硬件的形式实现。例如,检测模块可以为单独设立的处理元件,也可以集成在电子设备的某一个芯片中实现。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,ASIC),或,一个或多个数字信号处理器(Digital Singnal Processor,DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,FPGA)等。再如,这些模块可以集成在一起,以片上装置(System-On-a-Chip,SOC)的形式实现。
在实际应用场景中,图1~图2所示实施例的方法流程可以由安装在电子设备上的电子芯片所实现。因此,本申请一实施例提出了一种电子芯片,电子芯片包括:
处理器,其用于执行存储在存储器上的计算机程序指令,其中,当该计算机程序指令被该处理器执行时,触发电子芯片执行本申请实施例所述的方法步骤。
本申请一实施例还提出了一种电子设备(例如,手机),电子设备包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发电子设备执行如本申请实施例所述的方法步骤。
具体的,在本申请一实施例中,上述一个或多个计算机程序被存储在上述存储器中,上述一个或多个计算机程序包括指令,当上述指令被上述设备执行时,使得上述设备执行本申请实施例所述的方法步骤。
具体的,在本申请一实施例中,电子设备的处理器可以是片上装置SOC,该处理器中可以包括中央处理器(Central Processing Unit,CPU),还可以进一步包括其他类型的处理器。具体的,在本申请一实施例中,电子设备的处理器可以是PWM控制芯片。
具体的,在本申请一实施例中,涉及的处理器可以例如包括CPU、DSP、微控制器或数字信号处理器,还可包括GPU、嵌入式神经网络处理器(Neural-network Process Units,NPU)和图像信号处理器(Image Signal Processing,ISP),该处理器还可包括必要的硬件加速器或逻辑处理硬件电路,如ASIC,或一个或多个用于控制本申请技术方案程序执行的集成电路等。此外,处理器可以具有操作一个或多个软件程序的功能,软件程序可以存储在存储介质中。
具体的,在本申请一实施例中,电子设备的存储器可以是只读存储器(read-onlymemory,ROM)、可存储静态信息和指令的其它类型的静态存储设备、随机存取存储器(random access memory,RAM)或可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备,或者还可以是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何计算机可读介质。
具体的,在本申请一实施例中,处理器可以和存储器可以合成一个处理装置,更常见的是彼此独立的部件,处理器用于执行存储器中存储的程序代码来实现本申请实施例所述方法。具体实现时,该存储器也可以集成在处理器中,或者,独立于处理器。
进一步的,本申请实施例阐明的设备、装置、模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
本领域内的技术人员应明白,本申请实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
在本申请所提供的几个实施例中,任一功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
具体的,本申请一实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行本申请实施例提供的方法。
本申请一实施例还提供一种计算机程序产品,该计算机程序产品包括计算机程序,当其在计算机上运行时,使得计算机执行本申请实施例提供的方法。
本申请中的实施例描述是参照根据本申请实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
还需要说明的是,本申请实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示单独存在A、同时存在A和B、单独存在B的情况。其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项”及其类似表达,是指的这些项中的任意组合,包括单项或复数项的任意组合。例如,a,b和c中的至少一项可以表示:a,b,c,a和b,a和c,b和c或a和b和c,其中a,b,c可以是单个,也可以是多个。
本申请实施例中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以意识到,本申请实施例中描述的各单元及算法步骤,能够以电子硬件、计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述,仅为本申请的具体实施方式,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。本申请的保护范围应以所述权利要求的保护范围为准。
Claims (17)
1.一种数据接收方法,其特征在于,所述方法应用于电子设备,所述电子设备包括用于暂存数据的第一存储器以及用于保存数据的第二存储器,所述第一存储器包括第一接收数据缓冲区以及第一解析数据缓冲区,所述方法包括:
使用所述第一接收数据缓冲区接收第一数据,包括,获取所述第一接收数据缓冲区的锁,使用所述第一接收数据缓冲区接收所述第一数据,释放所述第一接收数据缓冲区的锁;
在所述第一数据接收完毕后,解析所述第一接收数据缓冲区中的第一数据,获取第二数据,将所述第二数据写入到所述第一解析数据缓冲区,包括,获取所述第一接收数据缓冲区以及所述第一解析数据缓冲区的锁,读取所述第一接收数据缓冲区中的第一数据,解析所述第一数据获取所述第二数据,将所述第二数据写入到所述第一解析数据缓冲区,释放所述第一接收数据缓冲区以及所述第一解析数据缓冲区的锁;
在所述第二数据写入到所述第一解析数据缓冲区完成后,将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器,包括,获取所述第一解析数据缓冲区的锁,将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器,释放所述第一解析数据缓冲区的锁。
2.根据权利要求1所述的方法,其特征在于,所述第一存储器还包括第二接收数据缓冲区以及第二解析数据缓冲区,所述方法还包括:
在所述第一数据接收完毕后,使用所述第二接收数据缓冲区接收第三数据;
在所述第二数据写入到所述第一解析数据缓冲区完成后,在所述第三数据接收完毕后,解析所述第二接收数据缓冲区中的第三数据,获取第四数据,将所述第四数据写入到所述第二解析数据缓冲区;
在所述第四数据写入到所述第二解析数据缓冲区完成后,在将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器完成后,将所述第二解析数据缓冲区中的第四数据写入到所述第二存储器。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述第三数据接收完毕后,在所述第二数据写入到所述第一解析数据缓冲区完成后,使用所述第一接收数据缓冲区接收第五数据;
在所述第四数据写入到所述第二解析数据缓冲区完成后,在所述第五数据接收完毕后,解析所述第一接收数据缓冲区中的第五数据,获取第六数据,将所述第六数据写入到所述第一解析数据缓冲区;
在所述第六数据写入到所述第一解析数据缓冲区完成后,在将所述第二解析数据缓冲区中的第四数据写入到所述第二存储器完成后,将所述第一解析数据缓冲区中的第六数据写入到所述第二存储器。
4.根据权利要求1所述的方法,其特征在于,所述第一数据为压缩格式的数据,所述第二数据为所述第一数据解压缩之后的数据。
5.根据权利要求4所述的方法,其特征在于,所述第一数据为sparse格式的数据。
6.根据权利要求5所述的方法,其特征在于,所述第二数据为raw格式的数据。
7.根据权利要求2所述的方法,其特征在于:
所述使用所述第二接收数据缓冲区接收第三数据,包括,获取所述第二接收数据缓冲区的锁,使用所述第二接收数据缓冲区接收所述第三数据,释放所述第二数据缓冲区的锁。
8.根据权利要求2所述的方法,其特征在于:
所述将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器,包括:将所述第一解析数据缓冲区中的数据中,满足后台写入模式的数据转移规则的数据,基于所述后台写入模式写入到所述第二存储器;将所述第一解析数据缓冲区中的数据中,不满足所述后台写入模式的数据转移规则的数据,缓存为第一待写入数据;
所述将所述第二解析数据缓冲区中的第四数据写入到所述第二存储器,包括:将所述第一待写入数据与所述第二解析数据缓冲区中的第四数据作为一个数据集合,将所述数据集合中,满足所述后台写入模式的数据转移规则的数据,基于所述后台写入模式写入到所述第二存储器;将所述数据集合中,不满足所述后台写入模式的数据转移规则的数据,缓存为第二待写入数据。
9.根据权利要求8所述的方法,其特征在于:
在所述第一解析数据缓冲区被写入第二数据后,所述第二解析数据缓冲区没有被写入数据时,将所述第一待写入数据,基于普通写入模式写入到所述第二存储器;
和/或,
在所述第二解析数据缓冲区被写入第四数据后,所述第一解析数据缓冲区没有被写入数据时,将所述第二待写入数据,基于普通写入模式写入到所述第二存储器。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
创建相互独立的接收数据线程、解析数据线程以及写入数据线程,其中:
所述接收数据线程用于,使用所述第一接收数据缓冲区接收所述第一数据;
所述解析数据线程用于,解析所述第一接收数据缓冲区中的第一数据,获取所述第二数据,将所述第二数据写入到所述第一解析数据缓冲区;
所述写入数据线程用于,在所述第一数据接收完毕后,将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器。
11.根据权利要求10所述的方法,其特征在于,所述使用所述第一接收数据缓冲区接收所述第一数据之后,所述方法还包括:
当已接收到的数据总量与本次数据传输需要传输的数据总量一致时,结束所述接收数据线程。
12.根据权利要求10所述的方法,其特征在于,所述解析所述第一接收数据缓冲区中的第一数据,获取所述第二数据,将所述第二数据写入到所述第一解析数据缓冲区之后,所述方法还包括:
当已解析的数据块总个数与本次数据传输需要传输的数据块总个数一致时,结束所述解析数据线程。
13.根据权利要求12所述的方法,其特征在于,所述将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器之后,所述方法还包括:
当已写入的数据块总个数与本次数据传输需要传输的数据块总个数一致时,结束所述写入数据线程。
14.一种数据接收装置,其特征在于,包括:
第一存储器,其用于暂存数据,所述第一存储器包括第一接收数据缓冲区以及第一解析数据缓冲区;
第二存储器,其用于保存数据;
数据接收模块,其用于使用所述第一接收数据缓冲区接收第一数据,包括,获取所述第一接收数据缓冲区的锁,使用所述第一接收数据缓冲区接收所述第一数据,释放所述第一接收数据缓冲区的锁;
数据解析模块,其用于在所述第一数据接收完毕后,解析所述第一接收数据缓冲区中的第一数据,获取第二数据,将所述第二数据写入到所述第一解析数据缓冲区,包括,获取所述第一接收数据缓冲区以及所述第一解析数据缓冲区的锁,读取所述第一接收数据缓冲区中的第一数据,解析所述第一数据获取所述第二数据,将所述第二数据写入到所述第一解析数据缓冲区,释放所述第一接收数据缓冲区以及所述第一解析数据缓冲区的锁;
数据写入模块,其用于在所述第二数据写入到所述第一解析数据缓冲区完成后,将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器,包括,获取所述第一解析数据缓冲区的锁,将所述第一解析数据缓冲区中的第二数据写入到所述第二存储器,释放所述第一解析数据缓冲区的锁。
15.一种电子芯片,其特征在于,包括:
处理器,其用于执行存储在存储器上的计算机程序指令,其中,当该计算机程序指令被该处理器执行时,触发所述电子芯片执行权利要求1~13中任一项所述的方法步骤。
16.一种电子设备,其特征在于,所述电子设备包括用于暂存数据的第一存储器、用于保存数据的第二存储器、用于存储计算机程序指令的第三存储器和用于执行程序指令的处理器,所述第一存储器包括第一接收数据缓冲区以及第一解析数据缓冲区,其中,当该计算机程序指令被该处理器执行时,触发所述电子设备执行如权利要求1~13中任一项所述的方法步骤。
17.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如权利要求1~13中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111216582.3A CN113885811B (zh) | 2021-10-19 | 2021-10-19 | 一种数据接收方法、装置、芯片和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111216582.3A CN113885811B (zh) | 2021-10-19 | 2021-10-19 | 一种数据接收方法、装置、芯片和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113885811A CN113885811A (zh) | 2022-01-04 |
CN113885811B true CN113885811B (zh) | 2023-09-19 |
Family
ID=79003615
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111216582.3A Active CN113885811B (zh) | 2021-10-19 | 2021-10-19 | 一种数据接收方法、装置、芯片和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113885811B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105718219A (zh) * | 2016-01-19 | 2016-06-29 | 浙江大学 | 基于usb3.0的高速数据传输存储的方法与模块 |
CN107154968A (zh) * | 2017-04-26 | 2017-09-12 | 深圳市优网科技有限公司 | 一种数据处理方法及设备 |
CN108829613A (zh) * | 2018-05-24 | 2018-11-16 | 中山市江波龙电子有限公司 | 数据存储方法及存储设备 |
CN111131243A (zh) * | 2019-12-24 | 2020-05-08 | 北京拓明科技有限公司 | Dpi系统策略处理方法及装置 |
CN111209228A (zh) * | 2020-01-02 | 2020-05-29 | 上海航天计算机技术研究所 | 一种加速多路星上载荷文件存储的方法 |
-
2021
- 2021-10-19 CN CN202111216582.3A patent/CN113885811B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105718219A (zh) * | 2016-01-19 | 2016-06-29 | 浙江大学 | 基于usb3.0的高速数据传输存储的方法与模块 |
CN107154968A (zh) * | 2017-04-26 | 2017-09-12 | 深圳市优网科技有限公司 | 一种数据处理方法及设备 |
CN108829613A (zh) * | 2018-05-24 | 2018-11-16 | 中山市江波龙电子有限公司 | 数据存储方法及存储设备 |
CN111131243A (zh) * | 2019-12-24 | 2020-05-08 | 北京拓明科技有限公司 | Dpi系统策略处理方法及装置 |
CN111209228A (zh) * | 2020-01-02 | 2020-05-29 | 上海航天计算机技术研究所 | 一种加速多路星上载荷文件存储的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113885811A (zh) | 2022-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10007592B2 (en) | Debugging non-deterministic embedded systems | |
EP3358465A1 (en) | In-vehicle control device, program update system, and program update software | |
CN101398782A (zh) | 产生用于数据处理装置的跟踪流的技术 | |
US9703669B2 (en) | Apparatus and method for distributed instruction trace in a processor system | |
US9740541B2 (en) | Information processing apparatus and method of collecting performance analysis data | |
Schulz et al. | Nexmon: Build your own wi-fi testbeds with low-level mac and phy-access using firmware patches on off-the-shelf mobile devices | |
CN106445616B (zh) | 终端设备从多系统至单系统的升级方法及装置 | |
US20200042313A1 (en) | Methods and systems for remote software update | |
CN112182010B (zh) | 脏页刷新方法和装置、存储介质和电子设备 | |
WO2011119455A1 (en) | Methods and apparatus for debugging programs in shared memory | |
CN101310241A (zh) | 用于在多处理器系统中共享存储器的方法和装置 | |
CN109947355A (zh) | 用于动态执行存储器回收数据储存装置与操作方法 | |
CN113885811B (zh) | 一种数据接收方法、装置、芯片和电子设备 | |
CN115269544A (zh) | 一种数据库集群升级方法、装置、电子设备及存储介质 | |
CN114661322B (zh) | 操作系统的升级方法、电子设备及存储介质 | |
CN109521970B (zh) | 一种数据处理方法及相关设备 | |
CN113596010B (zh) | 一种数据处理方法、装置、节点设备及计算机存储介质 | |
CN109634822B (zh) | 一种函数耗时统计方法、装置、存储介质及终端设备 | |
CN111930651B (zh) | 一种指令执行方法、装置、设备及可读存储介质 | |
JP6772883B2 (ja) | 読込プログラム、読込方法および情報処理装置 | |
US8484517B2 (en) | High compression program flow trace | |
US9858170B2 (en) | Function-calling-information collection method and computer-readable recording medium | |
CN106469043B (zh) | 例外处理事件的追踪 | |
CN110716923B (zh) | 数据处理方法、装置、节点设备及存储介质 | |
WO2005048075A2 (en) | Embedded software update methods and systems for digital devices |
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 |