一种函数调用方法及处理器

文档序号:532533 发布日期:2021-06-01 浏览:11次 >En<

阅读说明:本技术 一种函数调用方法及处理器 (Function calling method and processor ) 是由 牟晓涛 陈剑 于 2019-11-29 设计创作,主要内容包括:本申请提供了一种函数调用方法及处理器。在该方法中,首先,第一处理器确定所述待运行函数所属的第二处理器,第一处理器获取多级指针参数的各项信息,通过第一网络消息发送给第二处理器;然后,第二处理器接收到第一处理器发送的第一网络消息,解析第一网络消息获取多级指针参数的各项信息;其次,根据解析后的多级指针参数的各项信息和待运行函数的信息重构所述多级指针参数;最后,第二处理器将调用结果以及运行待运行函数的结果通过第二网络消息返回给第一处理。该方法可有效的解决了传统函数调用方法无法实现跨处理器的、包含多级指针参数的函数调用的问题。(The application provides a function calling method and a processor. In the method, first, a first processor determines a second processor to which a function to be operated belongs, and the first processor acquires various pieces of information of multi-level pointer parameters and sends the information to the second processor through a first network message; then, the second processor receives the first network message sent by the first processor, and analyzes the first network message to obtain various information of the multi-level pointer parameter; secondly, reconstructing the multi-level pointer parameters according to the analyzed various information of the multi-level pointer parameters and the information of the function to be operated; and finally, the second processor returns the calling result and the result of the function to be run to the first processor through a second network message. The method can effectively solve the problem that the traditional function calling method can not realize cross-processor function calling containing multi-level pointer parameters.)

一种函数调用方法及处理器

技术领域

本申请实施例涉及计算机技术领域,尤其涉及一种函数调用方法及处理器。

背景技术

在计算设备中,可以存在多个处理器。所述多个处理器协同工作,以实现所述计算设备的计算功能。通常,在某个处理器运行程序过程中,会出现调用其他处理器中的函数的需求。

在传统的函数调用方法中,处理器仅支持包含整形参数、字符串参数和单级指针参数的函数的调用。其中,单级指针参数中所有指针变量均指向地址。

由于这些参数的数据长度已知,处理器A在确定需要调用这些函数时,可以直接将函数中包含的参数的数据长度通知给处理器B,处理器B可以根据获得的数据长度为参数分配内存地址,从而运行函数。在处理器B运行函数得到运行结果后,再将运行结果通知给处理器A,这样,处理器A可以完成函数调用。

然而,目前有些函数中可能涉及多级指针参数,多级指针参数为其中的至少一个指针变量指向其他指针变量,而两个处理器的地址是独立的。显然,即使处理器A采用上述方法,将多级指针参数发送给处理器B,处理器B也无法确定所述多级指针参数中指针变量的指向关系,进而无法运行包含多级指针参数的函数。因此,采用上述传统的函数调用方法实现跨处理器的、包含多级指针参数的函数调用。

因此,本领域亟待提出一种能够实现跨处理器的、包含多级指针参数的函数调用方法。

发明内容

本发明实施例提供一种函数调用方法,以实现跨处理器的、包含多层指针参数的函数调用。

本发明实施例提供的具体技术方案如下:

第一方面,本申请实施例提供了一种函数调用方法,该方法可以应用于具有多个处理器的计算设备中,该方法具体包括以下步骤:

第一处理器确定待运行函数的所属的第二处理器;

所述第一处理器确定所述待运行函数中包含多级指针参数,其中,多级指针参数包含多个指针变量,且所述多个指针变量中包含至少一个指针变量指向其他指针变量;

所述第一处理器获取所述多级指针参数的结构信息,并将所述结构信息保存到地址连续的缓存中;其中,所述结构信息用于表征:所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及指针变量之间的指向关系;任一个指针变量的变量信息包含该指针变量的长度和首地址;

所述第一处理器从所述结构信息中获取所述多级指针参数包含的指针变量的数量和每个指针变量的变量信息;

所述第一处理器向所述第二处理器发送第一网络消息,所述第一网络消息中包含:所述多级指针参数的结构信息、所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及所述待运行函数的信息;

所述第一处理器接收所述第二处理器发送的第二网络消息,所述第二网络消息中包含所述第二处理器对所述待运行函数的运行结果。

通过上述方法,两个处理器之间进行包含多级指针参数的函数调用时,第一个处理器通过将调用的多级指针参数相关内容按照相应格式存放在第一网络消息中,第一处理器将第一网络消息发送给第二处理器,第二处理器解析第一网络消息从而执行函数调用并将调用执行结果通过第二网络消息返回给第一处理器,从而有效实现了跨处理器的、包含多层指针参数的函数调用。

在一个可能的实现方式中,所述第一处理器确定所述待运行函数中包含多级指针参数,所述方法包括:

所述第一处理器确定所述待运行函数中包含指定参数时,当所述第一处理器确定所述指定参数的长度大于或等于设定长度时,确定所述待运行函数中包含所述多级指针参数。

通过该方法,第一处理器可以确定待运行函数中包含的指针参数为多级指针参数。

在一个可能的实现方式中,指针变量之间的指向关系包括:

指针变量之间的指向关系的数量;

每个指针变量之间的指向关系包含的源指针变量的标识和地址偏移,以及目的指针变量的标识和地址偏移。

第二方面,本申请实施例还提供了一种函数调用方法,该方法应用于具有多个处理器的计算设备,所述方法包括:

第二处理器接收第一处理器发送的第一网络消息,所述第一网络消息中包含:多级指针参数的结构信息、所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及所述待运行函数的信息;其中,所述结构信息用于表征:所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及指针变量之间的指向关系;任一个指针变量的变量信息包含该指针变量的长度和首地址;所述第二处理器将所述多级指针参数的结构信息保存到地址连续的缓存中;

所述第二处理器根据所述第一网络消息中包含的所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,确定所述多级指针参数中每个指针变量的绝对地址偏移;

所述第二处理器根据所述多级指针参数的结构信息中的指针变量之间的指向关系、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址;

所述第二处理器将每个指针变量之间的指向关系中目的指针变量的地址赋值给源指针,并根据所述多级指针参数的结构信息,重构所述多级指针参数;

所述第二处理器根据所述待运行函数的信息,以及重构的所述多级指针参数,运行所述待运行函数,得到运行结果;

所述第二处理器向所述第一处理器发送第二网络消息,所述第二网络消息中包含所述运行结果。

在一个可能的实现方式中,所述指针变量之间的指向关系包括:

指针变量之间的指向关系的数量;

每个指针变量之间的指向关系包含的源指针变量的标识和地址偏移,以及目的指针变量的标识和地址偏移。

在一个可能的实现方式中,所述第二处理器根据所述多级指针参数的结构信息中的指针变量之间的指向关系、每个指针变量的绝对地址偏移,计算每个指针参数之间的指向关系中源指针变量的地址和目的指针变量的地址,包括:

所述第二处理器将所述缓存中所述多级指针参数的结构信息的首地址作为所述多级指针参数的首地址;

所述第二处理器根据所述多级指针参数的首地址、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址。

第三方面,本申请提供一种第一处理器,所述第一处理器应用于具有多个处理器的计算设备,包括:

存储单元,用于缓存数据;

处理单元,用于确定待运行函数的所属的第二处理器;确定所述待运行函数中包含多级指针参数,其中,多级指针参数包含多个指针变量,且所述多个指针变量中包含至少一个指针变量指向其他指针变量;获取所述多级指针参数的结构信息,并将所述结构信息保存到所述存储单元中的地址连续的缓存中;其中,所述结构信息用于表征:所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及指针变量之间的指向关系;任一个指针变量的变量信息包含该指针变量的长度和首地址;从所述结构信息中获取所述多级指针参数包含的指针变量的数量和每个指针变量的变量信息;

通信单元,用于向所述第二处理器发送第一网络消息,所述第一网络消息中包含:所述多级指针参数的结构信息、所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及所述待运行函数的信息;以及接收所述第二处理器发送的第二网络消息,所述第二网络消息中包含所述第二处理器对所述待运行函数的运行结果。

在一个可能的实现方式中,所述处理单元,在确定所述待运行函数中包含多级指针参数时,具体用于:所述第一处理器确定所述待运行函数中包含指定参数时,当所述第一处理器确定所述指定参数的长度大于或等于设定长度时,确定所述待运行函数中包含所述多级指针参数。

在一个可能的实现方式中,指针变量之间的指向关系包括:指针变量之间的指向关系的数量;每个指针变量之间的指向关系包含的源指针变量的标识和地址偏移,以及目的指针变量的标识和地址偏移。

第四方面,本申请提供一种第二处理器,所述第二处理器应用于具有多个处理器的计算设备,包括:

存储单元,用于缓存数据;

通信单元,用于接收第一处理器发送的第一网络消息,所述第一网络消息中包含:多级指针参数的结构信息、所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及所述待运行函数的信息;其中,所述结构信息用于表征:所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及指针变量之间的指向关系;任一个指针变量的变量信息包含该指针变量的长度和首地址;

处理单元,用于将所述多级指针参数的结构信息保存到所述存储单元中的地址连续的缓存中,根据所述第一网络消息中包含的所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,确定所述多级指针参数中每个指针变量的绝对地址偏移;根据所述多级指针参数的结构信息中的指针变量之间的指向关系、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址;将每个指针变量之间的指向关系中目的指针变量的地址赋值给源指针,并根据所述多级指针参数的结构信息,重构所述多级指针参数;根据所述待运行函数的信息,以及重构的所述多级指针参数,运行所述待运行函数,得到运行结果;

所述通信单元,还用于向所述第一处理器发送第二网络消息,所述第二网络消息中包含所述运行结果。

在一个可能实现方式中,所述指针变量之间的指向关系包括:指针变量之间的指向关系的数量;每个指针变量之间的指向关系包含的源指针变量的标识和地址偏移,以及目的指针变量的标识和地址偏移。

在一个可能实现方式中,所述处理单元,根据所述多级指针参数的结构信息中的指针变量之间的指向关系、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址时,具体用于:

将所述缓存中所述多级指针参数的结构信息的首地址作为所述多级指针参数的首地址;根据所述多级指针参数的首地址、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址。

第五方面,本申请实施例中提供一种计算设备,用于执行上述各个方面各个步骤的单元。

第六方面,本申请实施例中提供一种计算机可读存储介质,用于存储有计算机程序,当计算机程序在电子设备上运行时,使得所述电子设备执行上述各个方面或其中任一个可能实现方式中提供的方法。

第七方面,本申请实施例中提供了一种计算机程序,当其在计算机上运行时,使得计算机执行上述各个方面或其中任一个可能实现方式中提供的方法。

第八方面,本申请实施例提供了一种芯片,所述芯片用于读取存储器中存储的计算机程序,执行上述各个方面中所涉及的方法。

附图说明

图1为本申请实施例提供的一种计算设备的结构图;

图2为本申请实施例提供的一种函数调用方法的流程图;

图3为本申请实施例提供的一种处理器A的结构图;

图4为本申请实施例提供的一种处理器B的结构图。

具体实施方式

为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

本申请实施例提供一种函数调用方法及装置,用以解决跨处理器、包含多级指针参数的函数调用。其中,本申请所述方法和装置基于同一发明构思,由于方法及装置解决问题的原理相似,因此装置与方法的实施可以相互参见,重复之处不再赘述。

本申请实施例的技术方案中,计算设备中的第一处理器在运行程序过程中,当确定程序中待运行函数属于计算设备中的第二处理器,且所述待运行函数中包含多级指针参数,那么第一处理器可以将所述多级指针参数的结构信息、所述多级指针参数中包含的指针变量的数量和信息,以及待运行函数信息通过第一网络消息发送给第二处理器;这样,第二处理器在接收到第一网络消息后,可以根据其中的各项信息重构所述多级指针参数并运行所述待运行函数,从而得到运行结果;最后,第二处理器将运行结果通过第二网络消息返回给第一处理器。这种方法可以实现跨处理器的、包含多级指针参数的函数调用。

以下先对本申请实施例中的部分用语进行解释说明,以便于本领域技术人员理解。

1、计算设备,为具有计算功能的设备。在本申请实施例中,计算设备为通过多个处理器协同作用,实现计算功能的设备。目前,计算设备的一些举例为:计算机、电脑、笔记本、智能手机、基站等。

其中,所述计算设备中的多个处理器可以位于同一个板卡中,也可以位于不同的板卡中,本申请对此不作限定。

可选的,所述多个处理器中存在一个处理器A,该处理器A运行的程序中可以包含属于其他处理器(以处理器B为例)的函数。当处理器A在运行该程序时,需要在处理器A调用该函数,以保证程序的运行。

示例性的,所述处理器A可以为主处理器,所述主处理器A执行计算机的主要计算功能,包括执行应用程序代码,所述处理器B可以称为从处理器,所述从处理器用于协助主处理器。

2、函数,是指一段组成在一起共同实现某一计算并生成结果的程序代码。其中,函数中可包含至少一种参数。参数的类型可以但不限于为:整形参数、字符串参数、单级指针参数,多级指针参数等。

其中,单级指针参数中所有的指针变量均指向地址。

3、多级指针参数,包含多个指针变量,且所述多个指针变量中包含至少一个指针变量指向其他指针变量。

例如:**p,其中p是一个指针变量,和*结合表示这个指针变量指向的是一处指针变量的地址。

又例如,多级指针参数的指针结构为多级嵌套式。例如:定义一个T*类型的指针变量q,T*q;≡(int*)*q;≡int**q,变量q被称为基类型为int的二级指针变量。

4、多个,为至少两个。

另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。

下面结合附图对本申请实施例进行具体说明。

本申请提供了一种函数调用方法可以适用的一种计算设备的结构图。参阅图1所示,所述计算设备100包括:通信单元101、多个处理器102(例如图中所示的处理器A和处理器B)、存储器103、显示单元105、输入单元106。下面结合图1对所述计算设备100的各个构成部件进行具体的介绍。

通信单元101用于实现计算设备100与其他设备的通信交互。可选的,所述通信单元101可以包括:无线通信模块,移动通信模块,通信接口。其中,无线通信模块和移动通信模块中包含天线,用于实现计算设备100的无线通信功能;通信接口能够插入电缆,用于实现计算设备的有线通信功能。

移动通信模块可以提供应用在计算设备上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块可以由天线接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块还可以对经调制解调处理器调制后的信号放大,经天线转为电磁波辐射出去。在一些实施例中,移动通信模块的至少部分功能模块可以被设置于处理器102中。在一些实施例中,移动通信模块的至少部分功能模块可以与处理器102的至少部分模块被设置在同一个器件中。

无线通信模块可以提供应用在电子设备上的包括无线局域网(wireless localarea networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequencymodulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器102。无线通信模块还可以从处理器102接收待发送的信号,对其进行调频、放大,经天线2转为电磁波辐射出去。

通信接口,用于与其他设备实现物理连接。可选的,所述通信接口与所述其他设备的通信接口通过电缆连接,实现所述计算设备100和其他设备之间的数据传输。

多个处理器102是所述计算设备100的控制中心,可以利用各类接口或线路连接各部件,运行操作系统,执行所述存储器103内存储的软件程序和/或模块,以及调用存储的数据,并执行所述计算设备100内各种功能或处理的处理,实现基于所述计算设备100的多种业务。

在本实施例中,所述多个处理器102个数不仅限于两个,还可以为两个以上。其中,任一个处理器可以调用另一个处理器中的函数。可选的,所述多个处理器102中存在一个主处理器,其他处理器为从处理器。主处理器在运行程序过程中,可以调用属于从处理器的函数。所述多个处理器102中的任意两个处理器之间可以进行通信交互,传输网络消息,以实现跨处理器的函数调用。

所述多个处理器102中每个处理器中还设置有缓存器1021,用于缓存该处理器的指令和数据。在一些实施例中,处理器中的缓存器1021为高速缓冲存储器。该缓存器1021可以保存处理器刚用过或循环使用的指令或数据。如果处理器需要再次使用该指令或数据,可从所述缓存器1021中直接调用。避免了重复存取,减少了处理器的等待时间,因而提高了系统的效率。

在本申请实施例中,任一个处理器在执行程序过程中,可以将函数、函数中的参数,以及参数的相关信息保存到其内部的存储器中。

存储器103可以用于存储计算设备可执行程序代码,所述可执行程序代码包括指令。处理器102通过运行存储在内部存储器103的指令,从而执行电子设备的各种功能应用以及数据处理。存储器103可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,以及其他程序,例如应用的程序代码、指令等。存储数据区可存储电子设备使用过程中所产生的数据等。此外,内部存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flashstorage,UFS)等。

所述显示单元105用于用户界面。所述显示单元105又可以称为显示面板或显示屏。显示单元可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode,AMOLED),柔性发光二极管(flexlight-emitting diode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot light emitting diodes,QLED)等。

所述输入单元106可用于接收用户输入的字符信息以及指令。可选的,输入单元106可包括触摸屏1061及其他输入设备(例如功能键)。

所述触摸屏1061用于收集用户的触摸操作产生对应的信息,所述处理器102接收该信息后执行相应的命令。可选的,所述触摸屏1061可以采用电阻式、电容式、红外线以及表面声波等多种类型实现。例如,用户可以通过所述触摸屏1061启动环境活动感知的功能。所述触摸屏可以与所述显示面板耦合成为触摸显示屏。

本领域技术人员可以理解,图1中示出的计算设备的结构并不构成对计算设备的限定,本申请实施例提供的计算设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本申请实施例提供了一种函数调用的方法,该方法适用于如图1所示的计算设备100中。以下方法中涉及的第一处理器和第二处理器可以为计算设备100中所述多个处理器102中的任意两个处理器,例如处理器A和处理器B。参阅图2所示,该方法的流程包括:

S201:第一处理器在运行程序过程中,确定程序中待运行函数所属的第二处理器。

示例性的,所述第一处理器中的远程调用函数原型如下所示:

其中,DstSfuld为待运行函数所属的处理器,即第二处理器,u32Cmd为跨处理器调用函数命令字,OSP_ADDR_VAL表示不同的处理器位宽,32位时定义为u32,64位时定义为u64,Arg表示用户指定参数,u32Arglen为不同类型参数的长度。

S202:第一处理器确定待运行函数中包含多级指针参数。其中,多级指针参数包含多个指针变量,且所述多个指针变量中包含至少一个指针变量指向其他指针变量。

在一种实施方式中,所述第一处理器可以通过以下步骤,执行S202:

首先,确定所述待运行函数中包含指定参数。

然后,根据所述待运行函数中所述指定参数的长度,确定所述待运行函数中是否包含多级指针参数。

可选的,当所述第一处理器确定所述待运行函数中的所述指定参数的长度大于或等于设定长度时,确定所述待运行函数中包含所述多级指针参数。其中,所述设定长度可以取值为2048。

继续以上述远程调用函数原型为例进行说明。

所述第一处理器可以通过对u32Arglen值大小进行判断,以确定待运行的函数中设置参数是否包含多级指针参数:

第一种情况:当该参数的长度u32Arglen为0时,则所述第一处理器确定该参数类型为整型数据。

第二种情况:当该参数的长度大于0,且小于2047时,则所述第一处理器确定该参数类型为单级指针数据。

第三种情况:当该参数的长度等于2048时,则所述第一处理器确定该参数类型为多级指针数据。

S203:第一处理器获取待运行函数中所述多级指针参数的结构信息,并将所述结构信息保存到地址连续的缓存中;其中,所述结构信息用于表征:所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及指针变量之间的指向关系;任一个指针变量的变量信息包含该指针变量的长度和首地址。

在一种实施方式中,所述第一处理器可以通过预设的函数,得到所述待运行函数中多级指针参数的结构信息。所述结构信息可以通过全局变量g_struOspIoctlArgPatch来表示。具体结构如下:

具体地,指针变量的信息OSP_STRU_RIOCTL_ARG_INFO具体结构可以包括:

(1)、64bit数据的格式

(2)、32bit数据的格式

通过以上两个格式可以看出,任一个指针变量的变量信息中包含该指针变量的长度和首地址,并且可以兼容32bit和64bit的数据。

具体地,指针变量的指向关系可以通过OSP_STRU_RIOCTL_PTR_INFO体现:

其中,OSP_STRU_RIOCTL_PTR_INFO结构记录了每个指针变量之间的指向关系,具体包括源指针变量的标识和地址偏移,以及目的指针变量的标识和地址偏移。

通过以上描述,所述多级指针参数的结构信息可用于表征:所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及指针变量之间的指向关系;任一个指针变量的变量信息包含该指针变量的长度和首地址。

可选的,所述多级指针参数的结构信息可保存到地址连续的缓存器1021中。

S204:所述第一处理器从所述结构信息中获取所述多级指针参数包含的指针变量的数量和每个指针变量的变量信息。所述第一处理器可以获取的信息也保存到与所述结构信息地址连续的缓存中。

通过S203和S204,所述第一处理器可以将所述多级指针参数的指向关系展开,并平铺到一段地址连续的缓存中。

S205:第一处理器通过第一网络消息向第二处理器发送第一网络消息,所述第一网络消息中包含:所述多级指针参数的结构信息、所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及所述待运行函数的信息。所述第二处理器接收所述第一处理器发送的所述第一网络消息。

在一种实施方式中,所述第一处理器可以通过通信接口向第二处理器发送所述第一网络消息。可选的,所述通信接口可定义为:

OSP_STATUS Osp_Register_Rioct1_Hook(u32 u32Cmd,

void *pArg,

OSP_STRU_RIOCTL_ARG_PAT CH*pstruArgPatch)

S206:所述第二处理器根据所述第一网络消息中包含的所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,确定所述多级指针参数中每个指针变量的绝对地址偏移。

其中,所述第二处理器在接收到所述第一网络消息后,将所述多级指针参数的结构信息保存到地址连续的缓存存储中。然后,根据所述第一网络消息中包含的所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,确定所述多级指针参数中每个指针变量的绝对地址偏移。可选的,所述第二处理器可以通过以下步骤确定:

所述第二处理器可以根据每个指针变量信息中的指针变量的首地址,按照地址从小到大的顺序,对所有指针变量进行排序;确定第一个指针变量的绝对地址偏移为0;然后所述第二处理器确定第二个指针变量的绝对地址偏移为第一个指针变量的长度;第三个指针变量的绝对偏移地址为第一个指针变量的长度和第二个指针变量的长度之和,依次类推,从而确定所述多级指针参数中每个指针变量的绝对偏移地址。

通过S206,所述第二处理器可以确定所述多级指针参数中每个指针变量的绝对偏移地址,便于后续计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址。

S207:所述第二处理器根据所述多级指针参数的结构信息中的指针变量之间的指向关系、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址。

所述第二处理器执行S207的具体步骤如下:

a1:所述第二处理器将所述缓存中所述多级指针参数的结构信息的首地址作为所述多级指针参数的首地址。

a2:所述第二处理器根据所述多级指针参数的首地址、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址。

可选的,所述第二处理器可以通过以下算法,执行步骤a2:

b1:所述第二处理器根据所述多级指针参数的结构信息,确定第一个指针变量之间的指向关系中的源指针变量和目的指针变量;

b2:所述第二处理器确定该源指针变量的绝对地址偏移,和该目的指针变量的地址偏移;

b3:所述第二处理器将a1中确定的首地址和该源指针变量的绝对地址偏移之和,作为该源指针变量的地址;所述第二处理器将a1中确定的首地址和该目的指针变量的绝对地址偏移之和,作为该目的指针变量的地址;

b4:所述第二处理器重复上述步骤,以确定下一个指针变量之间的指向关系中的源指针变量的地址和目的指针变量的地址,直至确定每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址。

通过S207,所述第二处理器根据确定的所述多级指针参数中每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址,以便实现所述多级指针参数的重组。

S208:所述第二处理器将每个指针变量之间的指向关系中目的指针变量的地址赋值给源指针,并根据所述多级指针参数的结构信息,重构所述多级指针参数。

通过S208,所述第二处理器根据所述多级指针参数的结构信息,在所述第二处理器中将平铺在一段地址连续的缓存中的指针参数进行重组,实现了所述多级指针参数的重构。

S209:所述第二处理器根据所述待运行函数的信息,以及重构的所述多级指针参数,运行所述待运行函数,得到运行结果。

S210:所述第二处理器向所述第一处理器发送第二网络消息,所述第二网络消息中包含所述运行结果。

S211:所述第一处理器从所述第二处理器接收所述第二网络消息,得到所述待运行函数的运行结果,然后,再根据所述运行结果继续运行所述程序。

本申请实施例提供了一种函数调用方法,在该方法中,计算设备中的第一处理器在运行程序过程中,当确定程序中待运行函数属于计算设备中的第二处理器,且所述待运行函数中包含多级指针参数,那么第一处理器可以将所述多级指针参数的结构信息、所述多级指针参数中包含的指针变量的数量和信息,以及待运行函数信息通过第一网络消息发送给第二处理器;这样,第二处理器在接收到第一网络消息后,可以根据其中的各项信息重构所述多级指针参数并运行所述待运行函数,从而得到运行结果;最后,第二处理器将运行结果通过第二网络消息返回给第一处理器。这种方法可以实现跨处理器的、包含多级指针参数的函数调用。

基于以上实施例,本申请实施例提供了一种第一处理器300,所述第一处理器300应用于具有多个处理器的计算设备,参阅图3所示,所示第一处理器300包括:存储单元301、处理单元302、通信单元303,其中:

存储单元301,用于缓存数据。

处理单元302,用于确定待运行函数的所属的第二处理器;确定所述待运行函数中包含多级指针参数,其中,多级指针参数包含多个指针变量,且所述多个指针变量中包含至少一个指针变量指向其他指针变量;获取所述多级指针参数的结构信息,并将所述结构信息保存到所述存储单元中的地址连续的缓存中;其中,所述结构信息用于表征:所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及指针变量之间的指向关系;任一个指针变量的变量信息包含该指针变量的长度和首地址;从所述结构信息中获取所述多级指针参数包含的指针变量的数量和每个指针变量的变量信息。

通信单元303,用于向所述第二处理器发送第一网络消息,所述第一网络消息中包含:所述多级指针参数的结构信息、所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及所述待运行函数的信息;以及接收所述第二处理器发送的第二网络消息,所述第二网络消息中包含所述第二处理器对所述待运行函数的运行结果。

可选的,所述处理单元302,在确定所述待运行函数中包含多级指针参数时,具体用于:所述第一处理器确定所述待运行函数中包含指定参数时,当所述第一处理器确定所述指定参数的长度大于或等于设定长度时,确定所述待运行函数中包含所述多级指针参数。

具体的,指针变量之间的指向关系包括:指针变量之间的指向关系的数量;每个指针变量之间的指向关系包含的源指针变量的标识和地址偏移,以及目的指针变量的标识和地址偏移。

基于以上实施例,本申请实施例还提供了一种第二处理器400,所述第二处理器400应用于具有多个处理器的计算设备,参阅图4所示,所示第一处理器400包括:存储单元401、处理单元402、通信单元403,其中:

存储单元401,用于缓存数据。

通信单元403,用于接收第一处理器发送的第一网络消息,所述第一网络消息中包含:多级指针参数的结构信息、所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及所述待运行函数的信息;其中,所述结构信息用于表征:所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,以及指针变量之间的指向关系;任一个指针变量的变量信息包含该指针变量的长度和首地址。

处理单元402,用于将所述多级指针参数的结构信息保存到所述存储单元中的地址连续的缓存中,根据所述第一网络消息中包含的所述多级指针参数包含的指针变量的数量、每个指针变量的变量信息,确定所述多级指针参数中每个指针变量的绝对地址偏移;根据所述多级指针参数的结构信息中的指针变量之间的指向关系、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址;将每个指针变量之间的指向关系中目的指针变量的地址赋值给源指针,并根据所述多级指针参数的结构信息,重构所述多级指针参数;根据所述待运行函数的信息,以及重构的所述多级指针参数,运行所述待运行函数,得到运行结果。

所述通信单元403,还用于向所述第一处理器发送第二网络消息,所述第二网络消息中包含所述运行结果。

具体的,所述指针变量之间的指向关系包括:指针变量之间的指向关系的数量;每个指针变量之间的指向关系包含的源指针变量的标识和地址偏移,以及目的指针变量的标识和地址偏移。

可选的,所述处理单元402,在根据所述多级指针参数的结构信息中的指针变量之间的指向关系、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址时,具体用于:

将所述缓存中所述多级指针参数的结构信息的首地址作为所述多级指针参数的首地址;根据所述多级指针参数的首地址、每个指针变量的绝对地址偏移,计算每个指针变量之间的指向关系中源指针变量的地址和目的指针变量的地址。

基于以上实施例,本申请提供一种计算设备,用于执行以上实施例中的各个步骤的单元。

基于以上实施例,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机指令,所述计算机指令被计算机执行时,使得所述计算机执行以上实施例提供的一种函数调用方法。

基于以上实施例,本申请还提供一种芯片,所述芯片用于读取并执行所述存储器中存储的计算机程序,以实现以上实施例中提供的一种函数调用方法。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

21页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:智能硬件安全启动方法、系统、存储介质及智能硬件

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!