CN109947572B - 通信控制方法、装置、电子设备及存储介质 - Google Patents
通信控制方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN109947572B CN109947572B CN201910226820.5A CN201910226820A CN109947572B CN 109947572 B CN109947572 B CN 109947572B CN 201910226820 A CN201910226820 A CN 201910226820A CN 109947572 B CN109947572 B CN 109947572B
- Authority
- CN
- China
- Prior art keywords
- register
- memory
- data
- shared memory
- pseudo
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Multi Processors (AREA)
Abstract
本公开提供了一种通信控制方法、装置、电子设备及计算机可读存储介质,涉及通信技术领域,所述通信控制方法包括:接收主机端发送的基于共享内存的通信请求,并根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存;其中,所述共享内存被至少划分为伪寄存器段和数据段;响应所述通信请求,基于判断结果生成与所述通信请求对应的处理结果;通过所述伪寄存器段将所述处理结果传输至所述主机端,以与所述主机端进行通信。本公开能够减少分配内存导致的额外开销,提高信息交互的效率。
Description
技术领域
本公开涉及通信技术领域,具体而言,涉及一种通信控制方法、通信控制装置、电子设备以及计算机可读存储介质。
背景技术
在多方进行通信时,为了提高信息传输效率和速度,可基于共享内存来进行信息传输。
相关技术中,一般通信双方将共享内存看作一个完整的内存块,通过链表和位图文件bitmap对共享内存进行分配释放等。进而通信双方中的一方将消息存放在已分配的内存中,等待对方处理。其中,链表和bitmap等数据结构需要通过互斥量等额外的机制进行保护。
在这种方式中,在任何实际情况下都会分配内存,因此会产生额外开销,难以实现消息地快速传输。另外,需要频繁维护共享内存中的消息和数据,从而导致需要保护的内容比较多,可能影响信息传输速度和效率。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种通信控制方法、装置、电子设备及计算机可读存储介质,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的无法快速进行信息传输的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的一个方面,提供一种通信控制方法,包括:
接收主机端发送的基于共享内存的通信请求,并根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存;其中,所述共享内存被至少划分为伪寄存器段和数据段;
响应所述通信请求,基于判断结果生成与所述通信请求对应的处理结果;
通过所述伪寄存器段将所述处理结果传输至所述主机端,以与所述主机端进行通信。
在本公开的一种示例性实施例中,根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存包括:
若所述待处理数据的长度满足预设条件,则不从所述共享内存中分配内存;
若所述待处理数据的长度不满足所述预设条件,则从所述共享内存的数据段中分配内存。
在本公开的一种示例性实施例中,所述伪寄存器段包括控制寄存器、回复寄存器、使能寄存器以及状态寄存器,基于判断结果生成与所述通信请求对应的处理结果包括:
响应于所述主机端发送的唤醒操作,将所述使能寄存器配置为第一预设值并将所述状态寄存器变更为第一状态;
若不分配内存,则在通过所述控制寄存器完成命令后,对所述回复寄存器中的数据地址和数据长度进行填充,以得到所述处理结果。
在本公开的一种示例性实施例中,所述伪寄存器段包括控制寄存器、回复寄存器、使能寄存器以及状态寄存器,基于判断结果生成与所述通信请求对应的处理结果包括:
响应于所述主机端发送的唤醒操作,将所述使能寄存器配置为第一预设值并将所述状态寄存器变更为第一状态;
若分配内存,则在通过所述控制寄存器完成命令后,对所述回复寄存器中的数据地址、数据长度以及从所述数据段中分配的内存的地址进行填充,以得到所述处理结果。
在本公开的一种示例性实施例中,通过所述伪寄存器段将所述处理结果传输至所述主机端包括:
若填充完成,则将所述状态寄存器变更为第二状态并重新唤醒主机端,以对所述处理结果进行传输。
在本公开的一种示例性实施例中,所述方法还包括:
若接收到由所述主机端发送的预设命令,则释放分配的内存。
在本公开的一种示例性实施例中,当存在多个线程时,每个线程对应一个伪寄存器段,且每个线程只访问对应的所述伪寄存器段。
根据本公开的一个方面,提供一种通信控制方法,包括:
确定基于共享内存的通信请求中的待处理数据的长度,并根据所述长度判断是否触发设备端从所述共享内存中分配内存;其中,所述共享内存被至少划分为伪寄存器段和数据段;
将所述通信请求发送至所述设备端,以使所述设备端基于判断结果生成所述通信请求对应的处理结果;
接收通过所述伪寄存器段返回的所述处理结果,并根据所述处理结果与所述设备端进行通信。
在本公开的一种示例性实施例中,所述伪寄存器段包括控制寄存器、回复寄存器、使能寄存器和状态寄存器;将所述通信请求发送至所述设备端,以使所述设备端基于判断结果生成所述通信请求对应的处理结果包括:
填充所述控制寄存器,将所述使能寄存器配置为第二预设值,并唤醒所述设备端,以使所述设备端生成所述处理结果。
在本公开的一种示例性实施例中,根据所述处理结果与所述设备端进行通信包括:
响应于来自所述设备端的重新唤醒操作,判断所述状态寄存器是否为第二状态,并在为所述第二状态时判断是否需要继续处理;
若需要继续处理,则根据所述回复寄存器中的内容进行处理。
在本公开的一种示例性实施例中,所述方法还包括:
若分配内存且不需要继续处理,则通过所述控制寄存器将预设命令发送至设备端,以使所述设备端释放分配的内存。
在本公开的一种示例性实施例中,通过所述控制寄存器将预设命令发送至设备端包括:
将所述预设命令写入所述控制寄存器的命令标识寄存器中,并将所述控制寄存器中的其他寄存器配置为预设值,以将所述预设命令发送至所述设备端。
在本公开的一种示例性实施例中,当存在多个线程时,所述共享内存还包括全局伪寄存器段,所述方法还包括:
通过所述全局伪寄存器段确定所述共享内存中包括的伪寄存器段的数量,并根据对应于所述数量的信号量对每个伪寄存器段对应的线程进行同步。
根据本公开的一个方面,提供一种通信控制装置,包括:
内存分配模块,用于接收主机端发送的基于共享内存的通信请求,并根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存;其中,所述共享内存被至少划分为伪寄存器段和数据段;
请求处理模块,用于响应所述通信请求,基于判断结果生成与所述通信请求对应的处理结果;
结果传输模块,用于通过所述伪寄存器段将所述处理结果传输至所述主机端,以与所述主机端进行通信。
根据本公开的一个方面,提供一种通信控制装置,包括:
内存分配判断模块,用于确定基于共享内存的通信请求中的待处理数据的长度,并根据所述长度判断是否触发设备端从所述共享内存中分配内存;其中,所述共享内存被至少划分为伪寄存器段和数据段;
请求发送模块,用于将所述通信请求发送至所述设备端,以使所述设备端基于判断结果生成所述通信请求对应的处理结果;
结果接收模块,用于接收通过所述伪寄存器段返回的所述处理结果,并根据所述处理结果与所述设备端进行通信。
根据本公开的一个方面,提供一种电子设备,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一项所述的通信控制方法。
根据本公开的一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的通信控制方法。
本示例性实施例提供的通信控制方法、装置、电子设备及计算机可读存储介质中,一方面,通过将共享内存划分为伪寄存器段和数据段,并基于待处理数据的长度确定是否从共享内存中分配内存,进而根据判断结果来通过共享内存实现数据传输,由于能够对是否分配内存进行判断,避免了所有情况都必须分配内存的操作,减少了由于分配内存而导致的额外开销,在此基础上能实现信息的快速传输,提高信息传输的高效性。另一方面,由于大多情况下不需要分配内存,因此不需要其他数据结构来保护分配的内存,通过共享内存的伪寄存器段即可实现通信双方的通信控制,简化了控制过程,且减少了对共享内存的维护,提高了便利性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性示出本公开示例性实施例中一种通信控制方法的示意图。
图2示意性示出本公开示例性实施例中确定是否申请内存的具体流程图。
图3示意性示出本公开示例性实施例中设备端的交互流程图。
图4示意性示出本公开示例性实施例中另一种通信控制方法的示意图。
图5示意性示出本公开示例性实施例中主机端进行交互的流程图。
图6示意性示出本公开示例性实施例中不申请内存时通信双方进行交互的流程图。
图7示意性示出本公开示例性实施例中申请内存时通信双方进行交互的流程图。
图8示意性示出本公开示例性实施例中一种通信控制装置的框图。
图9示意性示出本公开示例性实施例中另一种通信控制装置的框图。
图10示意性示出本公开示例性实施例中的电子设备的示意图。
图11示意性示出本公开示例性实施例中的计算机可读存储介质的示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
为了解决相关技术中的技术问题,本示例性实施例中,首先提供了一种通信控制方法,该通信控制方法可以应用于在特定应用场景中进行通信的情况。其中,特定应用场景可以包括以下特征:一、通信双方采用一方发起一方响应的结构;通信双方大多数是通过命令加简单参数的形式进行通信时;通信发起方与响应方是一对多的关系。参考图1所示,以设备端为执行主体,对本示例性实施例中的通信控制方法进行详细说明。
在步骤S110中,接收主机端发送的基于共享内存的通信请求,并根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存;其中,所述共享内存被至少划分为伪寄存器段和数据段。
本示例性实施例中,可将通信双方区分为主机端和设备端,具体由主机端发起通信,由设备端响应并回复。共享内存指的是在多处理器的计算机系统中,可以被不同中央处理器访问的大容量内存。共享内存一般为多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。共享内存具体可以由函数来创建,此处不作详细说明。
本示例性实施例中,首先将共享内存划分为至少包括伪寄存器段和数据段的几部分,此处可根据线程的情况来进行划分。具体而言,在单线程情况下,可将共享内存划分为伪寄存器段和数据段,具体的划分情况参考表1中所示。在多线程情况下,可将共享内存划分为伪寄存器段、数据段以及全局伪寄存器段,具体的划分情况参考表2中所示。
首先对单线程的情况进行详细说明。参考表1所示,单线程下可将共享内存划分为表1中的格式。
其中,伪寄存器段中预先定义了一系列固定长度的伪寄存器,所有的控制和简单的数据传递都通过这些伪寄存器来进行。由表1中可以得出,共享内存的伪寄存器段主要包括控制寄存器即Command_*寄存器、回复寄存器即Reply_*寄存器、使能寄存器enable以及状态寄存器status。控制寄存器用于发布命令,控制寄存器中可以包括命令ID寄存器,用以区分不同的命令;还可以包括命令参数Command_param(lsb/msb)寄存器,用于指定不同命令的具体细节和参数等等。其中,每个命令参数寄存器的长度均为4比特,通过设置两个命令参数以覆盖更多的场景从而使得应用范围更广。回复寄存器用于表示响应命令得到的回复内容。状态寄存器用户表示命令处理状态(即正在处理或者是完成)。使能寄存器用于触发主机端或设备端处于工作状态。
表1
接下来对多线程的情况进行详细说明。参考表2所示,多线程下可将共享内存划分为以下格式:
地址 | 名称 | 功能 | |
全局伪寄存器段 | 0x0 | Reg_group_base | 伪寄存器段基地址 |
0x4 | Reg_group_count | 伪寄存器段个数 | |
0x8 | Reg_group_size | 伪寄存器段长度 | |
伪寄存器段1 | … | … | |
伪寄存器段2 | … | … | |
… | |||
数据段 | … | … |
表2
其中,伪寄存器段1、伪寄存器段2等多个伪寄存器段和表1所示的单线程情况下的伪寄存器段相同,相比于单线程而言增加了全局伪寄存器段。全局伪寄存器段中具体包括伪寄存器段的数量、各伪寄存器段的长度以及伪寄存器段基地址。本示例性实施例中,在将共享内存划分为多个字段后,服务端可基于该共享内存建立与主机端的通信连接,主机端也可以基于该共享内存与服务端建立通信连接,从而实现服务端和主机端的信息传输。
对于服务端而言,首先可接收主机端发送的通信请求。该通信请求可以为数据传输或者是数据处理等等。通信请求中可包括待处理数据。在响应通信请求之前,首先可判断是否分配内存。参考图2中所示,确定是否分配内存的步骤包括步骤S210至步骤S230,其中:
在步骤S210中,判断待处理数据的长度是否满足预设条件。具体而言,可以将待处理数据的长度和预设条件进行对比,以得到对比结果;进而根据对比结果确定是否需要分配内存。预设条件指的是预设设定的伪寄存器中的固定长度,为了保证数据的快速传输,该固定长度可以设置为较大的值,此处不作特殊限定。
在步骤S220中,若是,则不分配内存。具体地,若待处理数据的长度满足预设条件,即对比结果为待处理数据的长度小于等于固定长度,由于可以满足传输要求,因此可以不从共享内存中分配内存。
在步骤S230中,若否,则从数据段中分配内存。若待处理数据的长度不满足预设条件,即对比结果为待处理数据的长度大于固定长度,由于待处理数据不满足传输要求,因此需要从共享内存中分配内存。在分配内存时,可由设备端进行分配。具体地,可以由设备端从共享内存的数据段中分配内存,并将分配的内存的地址通过共享内存中的伪寄存器段传递给主机端。
本示例性实施例中,在特定应用场景下,即当主机端与设备端之间的通信大多数是命令加简单参数的情况下,若待处理数据的长度满足预设条件,则不需要分配内存,从而避免分配内存产生的额外开销,实现快速高效的消息传递。另外,在待处理数据的长度不满足预设条件时,由于只需要设备端从共享内存的数据段分配内存,而不需要通信双方进行分配,只有设备端在完成分配并将分配的内存地址返回给主机端后,主机端才能访问重新分配的内存,从而避免了主机端与设备端同时分配内存时导致的同步异常问题,能够实现准确的同步。
进一步地,在步骤S120中,响应所述通信请求,基于判断结果生成与所述通信请求对应的处理结果。
本示例性实施例中,服务端可以根据是否分配内存的判断结果,分别通过不同的方式生成与通信请求对应的处理结果。具体而言,主机端可以通过填充控制寄存器中的不同参数来生成通信请求,设备端可以响应该通信请求,根据其中的具体参数以及是否分配内存等内容来填充回复寄存器。参考表1中所示,回复寄存器可包括回复返回值、申请的缓存(buffer)地址、回复数据长度、回复数据地址、校验等伪寄存器。对于不同的通信请求而言,填充的具体寄存器也不相同。本示例性实施例中,通过是否分配内存可以更准确地填充回复寄存器,在不需要分配内存时,能够快速回复和响应通信请求,快速得到处理结果。
在步骤S130中,通过所述伪寄存器段将所述处理结果传输至所述主机端,以与所述主机端进行通信。
本示例性实施例中,在填充完回复寄存器之后,可基于共享内存中划分的伪寄存器段将处理结果传输至主机端,以实现与主机端之间的交互。本示例性实施例中,由于将共享内存进行了拆分,而大多数情况下又不需要分配内存,从而避免分配内存产生的额外开销,实现快速高效地传递信息。另外,通过伪寄存器段即可实现信息传输,减少了要维护的内容,提高了传输效率。进一步地,通过伪寄存器段即可实现通信双方的信息交互,不仅控制简单,并且对内存的管理要求非常低,提高了便利性。
图3中示意性示出设备端的交互流程图。参考图3中所示,在单线程的情况下,主要包括步骤S310至步骤S340,其中:
在步骤S310中,响应于所述主机端发送的唤醒操作,将所述使能寄存器的值配置为第一预设值并将所述状态寄存器变更为第一状态。
本步骤中,通信开始时,主机端首先可以填充伪寄存器段中的控制寄存器,并计算控制寄存器的校验值。随后,可对使能寄存器进行配置并唤醒设备端。
对于设备端而言,可响应主机端发送的唤醒操作开始执行对应的操作。设备端被唤醒后,先使用平台提供的原子操作查询使能寄存器的值。如果使能寄存器的值不是第一预设值,则可以将使能寄存器的值重新配置为第一预设值,此处的第一预设值例如可以为0。若使能寄存器的值是第一预设值,则不进行处理。例如,如果使能寄存器enable为1,则将使能寄存器enable重新置0。需要说明的是,使能寄存器为1,则触发对应的主机端或设备端处于正常的工作状态。
除此之外,还可以将状态寄存器变更为第一状态。第一状态例如可以为正在处理状态,以通过第一状态表示正在执行命令。
在步骤S320中,若不分配内存,则在通过所述控制寄存器完成命令后,对所述回复寄存器中的数据地址和数据长度进行填充,以得到处理结果。
本步骤中,在将使能寄存器配置为0,以及将状态寄存器变更为正在处理状态后,可根据控制寄存器中的命令ID和命令参数等执行相应的操作。当命令操作处理完成后,可设置回复寄存器。参考表1中所示,回复返回值Reply_retval用于标志处理结果是否成功。同时,回复本身的数据长度可以通过Reply_data_len来指定,回复本身的数据地址可以用Reply_data_addr来指定。
在步骤S330中,若分配内存,则在通过所述控制寄存器完成命令后,对所述回复寄存器中的数据地址、数据长度以及分配的内存的地址进行填充。
本步骤中,如果需要传递大量数据或者是待处理数据的长度不满足预设条件,主机端需要填充控制寄存器中关于请求的缓存长度,以请求设备端分配相应长度的内存。设备端则可按照请求的缓存长度从共享内存的数据段来分配内存。
对回复寄存器中的数据地址以及数据长度的填充方法与步骤S320中的相同,此处不再赘述。由于服务端从数据段分配了内存,因此可以将实际分配到的内存的地址返回至回复寄存器中的申请的缓存地址Reply_buffer_addr中,以对回复寄存器进行填充,从而得到处理结果。
在步骤S340中,若填充完成,则将所述状态寄存器变更为第二状态并重新唤醒主机端,以对所述处理结果进行传输。
本步骤中,在不分配内存时,如果对回复寄存器中的数据长度和数据地址填充完成,则可将状态寄存器由第一状态变更为第二状态,第二状态例如可以为完成状态,以表示对回复寄存器完成填充。
在分配内存时,如果对回复寄存器中的数据长度、数据地址以及分配的内存的实际地址填充完成,则可将状态寄存器由第一状态变更为第二状态,第二状态例如可以为完成状态,以表示对回复寄存器完成填充。
当回复寄存器全部填充完后,设备端将状态寄存器设置为完成状态,并重新唤醒主机端,以使主机端根据回复寄存器中的内容进行后续处理。
图3中的步骤,设备端通过共享内存中的伪寄存器段即可进行信息交互,大多情况下不会分配内存,从而避免了分配内存产生的额外开销,实现快速高效地传递信息。另外,通过对使能寄存器的值和状态寄存器的状态进行配置变更,只需要维护使能寄存器和状态寄存器的同步即可实现主机端和设备端之间的数据同步,避免了相关技术中需要维护太多内容导致的额外开销。
需要补充的是,在分配内存的情况下,所述方法还包括:若接收到由所述主机端发送的预设命令,则释放分配的内存。
本步骤中,预设命令指的是用于结束本次通信的特殊的结尾命令,具体可以包括一个预先定义好的数,当然也可以为其它形式,此处不作特殊限定。在设备端重新唤醒主机端后,主机端若确定不需要继续处理,则可以发出预设命令。举例而言,主机端将预设命令发送至设备端,若预设命令为预先定义好的数“1000”,则设备端在接收到该“1000”时,即可释放从数据段分配的所有的内存,以完成一次通信过程。通过预设命令将分配的内存释放掉,以提高系统内存资源的利用率,进而提升系统性能。除此之外,还能避免对分配的内存中的数据的维护,提高处理速度。
需要补充的是,在多线程的情况下,共享内存相比于单线程而言增加了全局伪寄存器段。全局伪寄存器段中具体包括伪寄存器段的数量、各伪寄存器段的长度以及伪寄存器段基地址。对于多线程下的设备端,由于每个伪寄存器段对应一个线程,且每个线程本身只会访问自己对应的伪寄存器段,因此在设备端不存在设备段之间的数据同步的问题。由于设备端不存在数据同步的问题,避免了大量同步产生的额外消耗的问题,提高了操作有效性和效率。
接下来,本示例性实施例中,还提供了另一种通信控制方法,其执行主体可以为主机端,参考图4所示,对本示例性实施例中的通信控制方法进行详细说明。
在步骤S410中,确定基于共享内存的通信请求中的待处理数据的长度,并根据所述长度判断是否触发设备端从所述共享内存中分配内存;其中,所述共享内存被至少划分为伪寄存器段和数据段。
本示例性实施例中,具体由主机端发起通信,由设备端响应并回复。共享内存的划分情况与步骤S110中相同,此处不再赘述。
待处理数据指的是将由主机端传输至服务端的待传输的信息或者是数据。在确定待处理数据之后,可以将待处理数据的长度和预设条件进行对比;进而根据对比结果确定是否向设备端发送分配内存的请求。若对比结果为待处理数据的长度小于等于固定长度,则不发送分配内存的请求。若对比结果为待处理数据的长度大于固定长度,则发送分配内存的请求。
需要说明的是,分配内存具体由服务端执行,分配好之后,主机端通过共享内存中的伪寄存器段接收分配的内存的地址即可。
本示例性实施例中,当主机端与设备端之间的通信大多数是命令加简单参数的情况下,若待处理数据的长度满足预设条件,则不需要分配内存,从而避免分配内存产生的额外开销,实现快速高效的消息传递。由于内存是设备端分配的,只有设备端在完成分配并将分配的内存地址返回给主机端后,主机端才能访问重新分配的内存,从而避免了主机端与设备端同时分配内存时导致的同步异常问题,能够实现准确的同步。
在步骤S420中,将所述通信请求发送至设备端,以使所述设备端基于判断结果生成所述通信请求对应的处理结果。
本示例性实施例中,在主机端接收到服务端分配好的内存的地址之后或者是不分配内存的情况下,只通过伪寄存器段即可传输通信请求。即,主机端可根据是否分配内存填充伪寄存器段中的控制寄存器,以将通信请求传输至设备端。具体而言,在单线程下,主机端发送通信请求具体包括以下步骤:填充所述控制寄存器,将所述使能寄存器配置为第二预设值,并唤醒所述设备端。
本步骤中,通信开始时,由主机端填充伪寄存器段的控制寄存器。通过其中的Command_id寄存器来区分不同的命令,命令参数寄存器由其中的Command_param(lsb/msb)指定。最后,计算控制寄存器的校验值并填充Command_checksum寄存器,并使用平台提供的原子操作将使能寄存器设置为第二预设值,第二预设值例如可以为1。其中,原子操作指的是不会被线程调度机制打断的操作。它执行多次的所消耗的时间远远小于由于线程所挂起到恢复所消耗的时间,大大提升了性能和效率。进一步地,在配置完伪寄存器段之后,可以唤醒设备端。
在步骤S430中,接收通过所述伪寄存器段返回的所述处理结果,并根据所述处理结果与所述设备端进行通信。
本示例性实施例中,设备端填充完回复寄存器后,可将处理结果返回至主机端并重新唤醒主机端。主机端可以根据状态寄存器以及回复寄存器中的内容进行后续处理,即根据处理结果进行后续处理。
图5中示意性示出了主机端如何进行后续处理的具体过程。参考图5中所示,具体包括步骤S510至步骤S530,其中:
在步骤S510中,响应于来自所述设备端的重新唤醒操作,判断所述状态寄存器是否为第二状态,并在为所述第二状态时判断是否需要继续处理。
本步骤中,主机端获被唤醒后,检查状态寄存器是否为第二状态,即检查状态寄存器的状态是否为完成状态。若是完成状态(主机端和设备端已完成交互),则可以进一步判断是否需要继续处理。举例而言,是否需要继续处理可由设备端的响应次数来决定。例如,设备端响应一次,则认为不需要继续处理;若设备端响应多次,则可以认为需要继续处理,具体可发生在分配内存并使用内存的情况下。
在步骤S520中,若需要继续处理,则根据所述回复寄存器中的内容进行处理。
本步骤中,主机端被唤醒后,检查状态寄存器,一旦状态寄存器为完成状态且需要继续处理,主机端就会根据回复寄存器中的内容进行后续处理。例如,主机端需要分配内存,设备端分配内存后,主机端使用该内存执行命令1,执行完命令1之后设备端写入对应的内容并将对应的内容传输至主机端,由于存在交互,则可认为需要继续处理。再例如,若检测到回复寄存器中还包括一个数据处理请求1,则可根据数据处理请求1继续进行处理,并将对应结果发送给设备端。需要说明的是,对于分配内存和不分配内存的情况,均可在需要继续处理时根据回复寄存器中的内容进行处理。
在步骤S530中,若分配内存且不需要继续处理,则通过所述控制寄存器将预设命令发送至设备端,以使所述设备端释放分配的内存。
本步骤中,在分配内存的情况下,如果不再需要继续处理,主机端可发送一个预设命令给设备端,预设命令指的是一个特殊的结尾命令,结尾命令是一个预先定义好的数,比如“1000”。控制寄存器中包括但不限于以下几种寄存器:命令标识寄存器Command_id、命令参数寄存器Command_param(lsb)/Command_param(msb)以及Command_req_buf_len寄存器。
主机端发送预设命令时,可将预设命令写入所述控制寄存器的命令标识寄存器Command_id中,并将控制寄存器中的其他寄存器配置为预设值,以将预设命令发送至所述设备端。预设值可以为0或者是其它数值,只要与结尾命令区分即可,以避免对控制寄存器填入具体数值而导致的误操作。具体地,发送结尾命令时可将设定的预设值写入标识寄存器Command_id中,并保持其他控制寄存器都为0。设备端接收到由主机端发送的结尾命令后,可释放在二者通信期间分配到的所有内存,以避免内存占用的问题。在释放完内存后,可完成一次通信。
当存在多个线程时,伪寄存器段的执行过程与上述步骤相同,此处不再赘述。
需要说明的是,当多线程情况下,共享内存还包括全局伪寄存器段,在此基础上,所述方法还包括:通过所述全局伪寄存器段确定所述共享内存中包括的伪寄存器段的数量,并根据对应于所述数量的信号量对每个伪寄存器段对应的线程进行同步。
具体地,主机端根据全局伪寄存器段中的Reg_group_count(伪寄存器段个数)得到共享内存区中包含的伪寄存器段的数量,即最大的并发数量。比如当有4个伪寄存器段时,主机端可以使用一个初始值为4的信号量对主机端的线程之间进行同步管理。其中,信号量用于通过控制其他的通信资源(例如文件、外部设备)来实现进程间通信,以负责数据操作的互斥和同步等功能。信号量是一个非负整数,所有通过它的线程/进程都会将该整数减一(即用一个线程,则信号量减一)。当该信号量为零时,所有将要通过它的线程都将处于等待状态。在信号当一个线程调用等待操作时,它要么得到资源然后将信号量减一,要么一直等下去,直到信号量大于等于一时。举例而言,若主机端的信号量的初始值为4,则存在4个线程。用一个则信号量减一,当信号量为0时,如果需要占用线程发消息则需要等待内存,直至有一个释放掉为止。另外,对信号量进行加减都是原子操作,这是由于信号量的主要作用是维护多线程的同步访问。通过信号量机制,能够保障4个线程之间的同步,提高主机端线程之间的同步效果。
本示例性实施例中提供的基于共享内存的通信方法,通过共享内存中的伪寄存器段的方式,即可实现通信双方的信息交互,能够保留多线程处理,在上述特定应用场景下,能够通过多线程处理有效提升信息交互速度和效率。
图6示意性示出本公开示例性实施例中不申请内存时通信双方进行交互的流程图。参考图6所示,主要包括以下步骤:
在步骤S601中,主机端填充回复寄存器,具体的填充情况如下:Command_id=1,Command_req_buf_len=0,Command_param(lsb)=10,Command_param(msb)=0。
在步骤S602中,主机端将使能寄存器置1,并唤醒设备端等待设备端响应。
在步骤S603中,设备端被唤醒,检查使能寄存器是否为1,并将状态寄存器设置为正在处理状态。
在步骤S604中,设备端按照命令参数和命令标识处理命令。
在步骤S605中,设备端填充回复寄存器。具体地,Reply_retval=0,Reply_buffer_addr=0,Reply_data_len=64,Reply_data_addr=0。
在步骤S606中,设备端设置状态寄存器为完成状态,并唤醒主机端。
在步骤S607中,主机端被唤醒,检查状态寄存器读取回复并将使能寄存器置0。
图6中的步骤,通过伪寄存器段即可实现主机端和设备端之间的交互。由于不需要分配内存,从而避免分配内存产生的额外开销,实现快速高效地传递信息。
图7示意性示出本公开示例性实施例中申请内存时通信双方进行交互的流程图。参考图7所示,主要包括以下步骤:
在步骤S701中,主机端填充控制寄存器,具体的填充情况如下:Command_id=1,Command_req_buf_len=128,Command_param(lsb)=10,Command_param(msb)=0。
在步骤S702中,主机端将使能寄存器置1,并唤醒设备端等待设备端响应。
在步骤S703中,设备端被唤醒,检查使能寄存器是否为1,并将状态寄存器设置为正在处理状态。
在步骤S704中,设备端按照命令参数和命令标识处理命令。
在步骤S705中,设备端填充回复寄存器。具体地,Reply_retval=0,Reply_buffer_addr=0x1088,Reply_data_len=64,Reply_data_addr=0x2088。
在步骤S706中,设备端设置状态寄存器为完成状态,并唤醒主机端。
在步骤S707中,主机端被唤醒,检查状态寄存器读取回复并将使能寄存器置0。
在步骤S708中,填充预设命令,即特殊的结尾命令。具体地,Command_id=1000,Command_req_buf_len=0,Command_param(lsb)=0,Command_param(msb)=0。
在步骤S709中,设置使能寄存器,并唤醒设备端等待设备端的响应。
在步骤S710中,设备端被唤醒,检查使能寄存器,并将状态寄存器设置为正在处理状态。
在步骤S711中,释放前期分配的所有内存。
在步骤S712中,设备端填充回复寄存器。具体地,Reply_retval=0,Reply_buffer_addr=0,Reply_data_len=0,Reply_data_addr=0。
在步骤S713中,设备端设置状态寄存器为完成状态,并唤醒主机端。
在步骤S714中,主机端被唤醒,检查状态寄存器读取回复并将使能寄存器置0。
图7中的步骤,通过设备端从数据段中分配内存,由于只需要设备端从共享内存的数据段分配内存,而不需要通信双方进行分配,只有设备端在完成分配并将分配的内存地址返回给主机端后,主机端才能访问重新分配的内存,从而避免了主机端与设备端同时分配内存时导致的同步异常问题,能够实现准确的同步。
本示例性实施例中,还提供一种通信控制装置,参考图8所示,该通信控制装置800可以应用于设备端,且该装置主要包括:内存分配模块801、请求处理模块802以及结果传输模块803,其中:
内存分配模块801,可以用于接收主机端发送的基于共享内存的通信请求,并根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存;其中,所述共享内存被至少划分为伪寄存器段和数据段;
请求处理模块802,可以用于响应所述通信请求,基于判断结果生成与所述通信请求对应的处理结果;
结果传输模块803,可以用于通过所述伪寄存器段将所述处理结果传输至所述主机端,以与所述主机端进行通信。
本示例性实施例中,还提供另一种通信控制装置,参考图9所示,该通信控制装置900可以应用于主机端,且该装置主要包括:内存分配判断模块901、请求发送模块902以及结果接收模块903,其中:
内存分配判断模块901,可以用于确定基于共享内存的通信请求中的待处理数据的长度,并根据所述长度判断是否触发设备端从所述共享内存中分配内存;其中,所述共享内存被至少划分为伪寄存器段和数据段;
请求发送模块902,可以用于将所述通信请求发送至所述设备端,以使所述设备端基于判断结果生成所述通信请求对应的处理结果;
结果接收模块903,可以用于接收通过所述伪寄存器段返回的所述处理结果,并根据所述处理结果与所述设备端进行通信。
需要说明的是,上述通信控制装置中各模块的具体细节已经在对应的通信控制方法中进行了详细描述,因此此处不再赘述。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图10来描述根据本发明的这种实施方式的电子设备1000。图10显示的电子设备1000仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图10所示,电子设备1000以通用计算设备的形式表现。电子设备1000的组件可以包括但不限于:上述至少一个处理单元1010、上述至少一个存储单元1020、连接不同系统组件(包括存储单元1020和处理单元1010)的总线1030。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元1010执行,使得所述处理单元1010执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元1010可以执行如图1或者是如图4中所示的步骤。
存储单元1020可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)10201和/或高速缓存存储单元10202,还可以进一步包括只读存储单元(ROM)10203。
存储单元1020还可以包括具有一组(至少一个)程序模块10205的程序/实用工具10204,这样的程序模块10205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1030可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
显示单元1040可以为具有显示功能的显示器,以通过该显示器展示由处理单元1010执行本示例性实施例中的方法而得到的处理结果。显示器包括但不限于液晶显示器或者是其它显示器。
电子设备1000也可以与一个或多个外部设备1200(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1000交互的设备通信,和/或与使得该电子设备1000能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1050进行。并且,电子设备1000还可以通过网络适配器1060与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1060通过总线1030与电子设备1000的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1000使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
参考图11所示,描述了根据本发明的实施方式的用于实现上述方法的程序产品1100,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。
Claims (15)
1.一种通信控制方法,其特征在于,包括:
接收主机端发送的基于共享内存的通信请求,并根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存;其中,所述共享内存根据线程的情况被至少划分为伪寄存器段和数据段;
若需要分配内存,设备端从共享内存的数据段中分配内存,并将分配的内存的地址通过所述共享内存的伪寄存器段传递给主机端;所述伪寄存器段包括控制寄存器、回复寄存器、使能寄存器以及状态寄存器;
响应所述通信请求,并响应于所述主机端发送的唤醒操作,将所述使能寄存器配置为第一预设值并将所述状态寄存器变更为第一状态;若不分配内存,则在通过所述控制寄存器完成命令后,对所述回复寄存器中的数据地址和数据长度进行填充,以得到与所述通信请求对应的处理结果;
通过所述伪寄存器段将所述处理结果传输至所述主机端,以与所述主机端进行通信;
其中,根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存包括:
若所述待处理数据的长度满足预设条件,则不从所述共享内存中分配内存;
若所述待处理数据的长度不满足所述预设条件,则从所述共享内存的数据段中分配内存。
2.根据权利要求1所述的通信控制方法,其特征在于,所述伪寄存器段包括控制寄存器、回复寄存器、使能寄存器以及状态寄存器,基于判断结果生成与所述通信请求对应的处理结果包括:
响应于所述主机端发送的唤醒操作,将所述使能寄存器配置为第一预设值并将所述状态寄存器变更为第一状态;
若分配内存,则在通过所述控制寄存器完成命令后,对所述回复寄存器中的数据地址、数据长度以及从所述数据段中分配的内存的地址进行填充,以得到所述处理结果。
3.根据权利要求1或2所述的通信控制方法,其特征在于,通过所述伪寄存器段将所述处理结果传输至所述主机端包括:
若填充完成,则将所述状态寄存器变更为第二状态并重新唤醒主机端,以对所述处理结果进行传输。
4.根据权利要求3所述的通信控制方法,其特征在于,所述方法还包括:
若接收到由所述主机端发送的预设命令,则释放分配的内存。
5.根据权利要求1所述的通信控制方法,其特征在于,当存在多个线程时,每个线程对应一个伪寄存器段,且每个线程只访问对应的所述伪寄存器段。
6.一种通信控制方法,其特征在于,包括:
确定基于共享内存的通信请求中的待处理数据的长度,并根据所述长度判断是否触发设备端从所述共享内存中分配内存;其中,所述共享内存根据线程的情况被至少划分为伪寄存器段和数据段;
若需要分配内存,所述设备端从共享内存的数据段中分配内存,并将分配的内存的地址通过所述共享内存的伪寄存器段传递给主机端;所述伪寄存器段包括控制寄存器、回复寄存器、使能寄存器以及状态寄存器;
将所述通信请求发送至所述设备端,以使所述设备端响应于主机端发送的唤醒操作,将所述使能寄存器配置为第一预设值并将所述状态寄存器变更为第一状态;若不分配内存,则在通过所述控制寄存器完成命令后,对所述回复寄存器中的数据地址和数据长度进行填充,以得到所述通信请求对应的处理结果;
接收通过所述伪寄存器段返回的所述处理结果,并根据所述处理结果与所述设备端进行通信;
其中,根据所述长度判断是否触发设备端从所述共享内存中分配内存包括:
若所述待处理数据的长度满足预设条件,则不从所述共享内存中分配内存;
若所述待处理数据的长度不满足所述预设条件,则从所述共享内存的数据段中分配内存。
7.根据权利要求6所述的通信控制方法,其特征在于,所述伪寄存器段包括控制寄存器、回复寄存器、使能寄存器和状态寄存器;将所述通信请求发送至所述设备端,以使所述设备端基于判断结果生成所述通信请求对应的处理结果包括:
填充所述控制寄存器,将所述使能寄存器配置为第二预设值,并唤醒所述设备端,以使所述设备端生成所述处理结果。
8.根据权利要求6所述的通信控制方法,其特征在于,根据所述处理结果与所述设备端进行通信包括:
响应于来自所述设备端的重新唤醒操作,判断所述状态寄存器是否为第二状态,并在为所述第二状态时判断是否需要继续处理;
若需要继续处理,则根据所述回复寄存器中的内容进行处理。
9.根据权利要求8所述的通信控制方法,其特征在于,所述方法还包括:
若分配内存且不需要继续处理,则通过所述控制寄存器将预设命令发送至设备端,以使所述设备端释放分配的内存。
10.根据权利要求9所述的通信控制方法,其特征在于,通过所述控制寄存器将预设命令发送至设备端包括:
将所述预设命令写入所述控制寄存器的命令标识寄存器中,并将所述控制寄存器中的其他寄存器配置为预设值,以将所述预设命令发送至所述设备端。
11.根据权利要求6所述的通信控制方法,其特征在于,当存在多个线程时,所述共享内存还包括全局伪寄存器段,所述方法还包括:
通过所述全局伪寄存器段确定所述共享内存中包括的伪寄存器段的数量,并根据对应于所述数量的信号量对每个伪寄存器段对应的线程进行同步。
12.一种通信控制装置,其特征在于,包括:
内存分配模块,用于接收主机端发送的基于共享内存的通信请求,并根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存;其中,所述共享内存根据线程的情况被至少划分为伪寄存器段和数据段;
若判断结果为需要分配内存,设备端从共享内存的数据段中分配内存,并将分配的内存的地址通过所述共享内存的伪寄存器段传递给主机端;所述伪寄存器段包括控制寄存器、回复寄存器、使能寄存器以及状态寄存器;
请求处理模块,用于响应所述通信请求,并响应于所述主机端发送的唤醒操作,将所述使能寄存器配置为第一预设值并将所述状态寄存器变更为第一状态;若不分配内存,则在通过所述控制寄存器完成命令后,对所述回复寄存器中的数据地址和数据长度进行填充,以得到与所述通信请求对应的处理结果;
结果传输模块,用于通过所述伪寄存器段将所述处理结果传输至所述主机端,以与所述主机端进行通信;
其中,根据所述通信请求中的待处理数据的长度判断是否从所述共享内存中分配内存包括:
若所述待处理数据的长度满足预设条件,则不从所述共享内存中分配内存;
若所述待处理数据的长度不满足所述预设条件,则从所述共享内存的数据段中分配内存。
13.一种通信控制装置,其特征在于,包括:
内存分配判断模块,用于确定基于共享内存的通信请求中的待处理数据的长度,并根据所述长度判断是否触发设备端从所述共享内存中分配内存;其中,所述共享内存根据线程的情况被至少划分为伪寄存器段和数据段;
若判断结果为需要分配内存,所述设备端从共享内存的数据段中分配内存,并将分配的内存的地址通过所述共享内存的伪寄存器段传递给主机端;所述伪寄存器段包括控制寄存器、回复寄存器、使能寄存器以及状态寄存器;
请求发送模块,用于将所述通信请求发送至所述设备端,以使所述设备端响应于主机端发送的唤醒操作,将所述使能寄存器配置为第一预设值并将所述状态寄存器变更为第一状态;若不分配内存,则在通过所述控制寄存器完成命令后,对所述回复寄存器中的数据地址和数据长度进行填充,以得到所述通信请求对应的处理结果;
结果接收模块,用于接收通过所述伪寄存器段返回的所述处理结果,并根据所述处理结果与所述设备端进行通信;
其中,根据所述长度判断是否触发设备端从所述共享内存中分配内存包括:
若所述待处理数据的长度满足预设条件,则不从所述共享内存中分配内存;
若所述待处理数据的长度不满足所述预设条件,则从所述共享内存的数据段中分配内存。
14.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-11任意一项所述的通信控制方法。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-11任意一项所述的通信控制方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910226820.5A CN109947572B (zh) | 2019-03-25 | 2019-03-25 | 通信控制方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910226820.5A CN109947572B (zh) | 2019-03-25 | 2019-03-25 | 通信控制方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947572A CN109947572A (zh) | 2019-06-28 |
CN109947572B true CN109947572B (zh) | 2023-09-05 |
Family
ID=67011516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910226820.5A Active CN109947572B (zh) | 2019-03-25 | 2019-03-25 | 通信控制方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947572B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0706298A2 (en) * | 1994-10-04 | 1996-04-10 | AT&T Corp. | Dynamic queue length thresholds in a shared memory ATM switch |
CN1928825A (zh) * | 2005-09-09 | 2007-03-14 | 腾讯科技(深圳)有限公司 | 一种服务器的实现方法以及服务器系统 |
CN101521960A (zh) * | 2009-02-11 | 2009-09-02 | 北京中星微电子有限公司 | 一种基带和协处理器间的通信方法、装置及系统 |
CN106201742A (zh) * | 2016-07-04 | 2016-12-07 | 沈阳东软医疗系统有限公司 | 一种共享内存管理方法、装置及系统 |
CN106569904A (zh) * | 2015-10-09 | 2017-04-19 | 中兴通讯股份有限公司 | 一种信息存储方法和装置、及服务器 |
CN107122163A (zh) * | 2017-04-26 | 2017-09-01 | 郑州云海信息技术有限公司 | 一种SmartRack‑ARM服务器系统性能优化的方法 |
CN108062252A (zh) * | 2016-11-08 | 2018-05-22 | 阿里巴巴集团控股有限公司 | 一种信息交互方法、对象管理方法及装置和系统 |
-
2019
- 2019-03-25 CN CN201910226820.5A patent/CN109947572B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0706298A2 (en) * | 1994-10-04 | 1996-04-10 | AT&T Corp. | Dynamic queue length thresholds in a shared memory ATM switch |
CN1928825A (zh) * | 2005-09-09 | 2007-03-14 | 腾讯科技(深圳)有限公司 | 一种服务器的实现方法以及服务器系统 |
CN101521960A (zh) * | 2009-02-11 | 2009-09-02 | 北京中星微电子有限公司 | 一种基带和协处理器间的通信方法、装置及系统 |
CN106569904A (zh) * | 2015-10-09 | 2017-04-19 | 中兴通讯股份有限公司 | 一种信息存储方法和装置、及服务器 |
CN106201742A (zh) * | 2016-07-04 | 2016-12-07 | 沈阳东软医疗系统有限公司 | 一种共享内存管理方法、装置及系统 |
CN108062252A (zh) * | 2016-11-08 | 2018-05-22 | 阿里巴巴集团控股有限公司 | 一种信息交互方法、对象管理方法及装置和系统 |
CN107122163A (zh) * | 2017-04-26 | 2017-09-01 | 郑州云海信息技术有限公司 | 一种SmartRack‑ARM服务器系统性能优化的方法 |
Non-Patent Citations (1)
Title |
---|
从TMS320C6000EDMA的结构来理解和优化其应用(连载二);丁刚;《无线电工程》;20021231;第32卷(第08期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109947572A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109451051B (zh) | 服务请求处理方法、装置、电子设备及存储介质 | |
CN108628775B (zh) | 一种资源管理的方法和装置 | |
US10235047B2 (en) | Memory management method, apparatus, and system | |
US9448920B2 (en) | Granting and revoking supplemental memory allocation requests | |
CN113641457A (zh) | 容器创建方法、装置、设备、介质及程序产品 | |
US9092272B2 (en) | Preparing parallel tasks to use a synchronization register | |
US11474853B2 (en) | Storage device operation method and physical server | |
US9389997B2 (en) | Heap management using dynamic memory allocation | |
CN109992566A (zh) | 一种文件访问方法、装置、设备及可读存储介质 | |
US9697047B2 (en) | Cooperation of hoarding memory allocators in a multi-process system | |
CN114155026A (zh) | 一种资源分配方法、装置、服务器及存储介质 | |
CN114936173B (zh) | 一种eMMC器件的读写方法、装置、设备和存储介质 | |
CN112905314A (zh) | 异步处理方法、装置、电子设备、存储介质、及路侧设备 | |
CN115904761A (zh) | 片上系统、车辆及视频处理单元虚拟化方法 | |
CN110209354B (zh) | 用于处理数据的方法、装置、设备和介质 | |
CN113535087A (zh) | 数据迁移过程中的数据处理方法、服务器及存储系统 | |
US9306894B1 (en) | Automatic detection and notification of backlogs and delays | |
CN109947572B (zh) | 通信控制方法、装置、电子设备及存储介质 | |
CN111124291A (zh) | 分布式存储系统的数据存储处理方法、装置、电子设备 | |
CN105512091A (zh) | 一种内存分配方法及装置 | |
CN107870877B (zh) | 用于在存储系统中管理数据访问的方法和系统 | |
US9703601B2 (en) | Assigning levels of pools of resources to a super process having sub-processes | |
CN112463027B (zh) | 一种i/o处理方法、系统、设备及计算机可读存储介质 | |
CN116601616A (zh) | 一种数据处理装置、方法及相关设备 | |
CN111046430B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |