多核通信方法、装置、电子设备及存储介质
文献发布时间:2023-06-19 11:11:32
技术领域
本公开涉及通信领域,尤其涉及一种多核通信方法、装置、电子设备及存储介质。
背景技术
嵌入式系统广泛应用于手机、物联网(IOT)设备等电子设备中。随着技术进步,嵌入式系统由单核发展到多核,以提升电子设备的性能。随着多核嵌入式系统的发展,多核间需要进行通信和交互。尤其对于单芯片多核的系统,芯片多核通信成为了多核系统面临的问题。通信机制的优劣直接影响多核系统的性能,高效的通信机制也是发挥多核相同高性能的重要保障。
相关技术中,多核间通信比如可以采用:QMI(Qualcomm Messaging Interface)架构。QMI架构中每一个应用可以通过使用对应的Client API与外部的Service进行通信交互,QMI架构中的中间组件提供了数据封装、转发、解封装等的能力。
相关技术中的方式存在如下技术问题:QMI为相关平台的私有技术,并未完全开放,不能推广应用。因此,相关技术中缺乏多核间有效通信、共享数据的方法。
发明内容
为克服相关技术中存在的问题,本公开提供一种多核通信方法、装置、电子设备及存储介质。
根据本公开实施例的第一方面,提出了一种多核通信方法,应用于多核通信系统,所述多核通信系统包括多个核、发布订阅层及通信层,所述方法包括:
控制多核运行;
基于所述通信层建立多核中发布核与接收核的通信连接;
所述多核中的发布核通过所述发布订阅层调用通信层的预设接口,发布主题消息或广播主题消息的主题名称;
响应于所述接收核调用发布订阅层的设定接口,订阅或获取所述主题消息。
可选地,所述通信层为openAMP框架模式,所述发布订阅层为uORB模式。
可选地,所述控制多核运行包括:
控制多核中的主核启动运行,基于所述通信层控制多核中的远程核启动;
所述远程核获取资源表;其中,所述资源表由所述主核定义,所述资源表包括:核间的缓存区的区域划分原则;
所述主核和所述远程核根据所述资源表执行相同配置条目。
可选地,所述基于所述通信层建立多核中发布核与接收核的通信连接,包括:
基于所述通信层在所述发布核和所述接收核分别创建端口;
响应于所述发布核的端口名称与所述接收核的端口名称相同,所述发布核与所述接收核建立通信连接。
可选地,所述多核中的发布核通过所述发布订阅层调用通信层的预设接口,发布主题消息或广播主题消息的主题名称,包括:
所述发布核调用所述发布订阅层的第一设定接口,第一设定接口调用通信层的预设接口,将主题消息发送至缓存区;
以中断方式向所述接收核通知广播主题消息的主题名称。
可选地,当发布核调用所述发布订阅层的第一设定接口时,所述方法还包括:
所述发布核和所述接收核分别建立缓存空间,所述缓存空间均与所述主题名称相对应。
可选地,所述多核中的发布核通过所述发布订阅层调用通信层的预设接口,发布主题消息或广播主题消息的主题名称,包括:
所述发布核调用所述发布订阅层的第二设定接口,第二设定接口调用通信层的预设接口,在所述缓存区发布所述主题消息。
可选地,所述响应于所述接收核调用发布订阅层的设定接口,订阅或获取所述主题消息,包括:
响应于所述接收核调用发布订阅层的第三设定接口,从所述缓存区获取所述主题消息;所述第三设定接口包括orb_subscribe和orb_copy;
将所述主题消息存储于预设核的缓存空间。
可选地,所述第一设定接口为orb_advertise,所述第二设定接口为orb_publish;所述预设接口为rpmsg_send_message。
根据本公开实施例的第二方面,提出了一种多核通信装置,应用于多核通信系统,所述多核通信系统包括多个核、发布订阅层及通信层,所述装置包括:
控制模块,用于控制多核运行;
连接模块,用于基于所述通信层建立多核中发布核与接收核的通信连接;
发布模块,用于所述多核中的发布核通过所述发布订阅层调用通信层的预设接口,发布主题消息或广播主题消息的主题名称;
订阅模块,用于响应于所述接收核调用发布订阅层的设定接口,订阅或获取所述主题消息。
可选地,所述控制模块具体用于:
控制多核中的主核启动运行,基于所述通信层控制多核中的远程核启动;
所述远程核获取资源表;其中,所述资源表由所述主核定义,所述资源表包括:核间的缓存区的区域划分原则;
所述主核和所述远程核根据所述资源表执行相同配置条目。
可选地,所述连接模块具体用于:
基于所述通信层在所述发布核和所述接收核分别创建端口;
响应于所述发布核的端口名称与所述接收核的端口名称相同,所述发布核与所述接收核建立通信连接。
可选地,所述发布模块具体用于:
所述发布核调用所述发布订阅层的第一设定接口,第一设定接口调用通信层的预设接口,将主题消息发送至缓存区;
以中断方式向所述接收核通知广播主题消息的主题名称。
可选地,当发布核调用所述发布订阅层的第一设定接口时,所述发布模块还用于:
所述发布核和所述接收核分别建立缓存空间,所述缓存空间均与所述主题名称相对应。
可选地,所述发布模块还用于:
所述发布核调用所述发布订阅层的第二设定接口,第二设定接口调用通信层的预设接口,在所述缓存区发布所述主题消息。
可选地,所述订阅模块具体用于:
响应于所述接收核调用发布订阅层的第三设定接口,从所述缓存区获取所述主题消息;所述第三设定接口包括orb_subscribe和orb_copy;
将所述主题消息存储于预设核的缓存空间。
根据本公开实施例的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器的可执行指令的存储器;
其中,所述处理器被配置为执行如上任一项所述的多核通信方法。
根据本公开实施例的第四方面,提出了一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如上任一项所述的多核通信方法。
本公开的实施例提供的技术方案可以包括以下有益效果:使用本公开的方法,可基于相配合的发布订阅层和通信层,实现多核间的通信连接,以及主题消息在多核间的传递。建立了有效的多核间消息的订阅和发布机制,使得多核间的共享数据更方便快捷。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的方法的流程图。
图2是根据一示例性实施例示出的方法的流程图。
图3是根据一示例性实施例示出的方法的流程图。
图4是根据一示例性实施例示出的方法的流程图。
图5是根据一示例性实施例示出的方法的流程图。
图6是根据一示例性实施例示出的系统框架示意图。
图7是根据一示例性实施例示出的多核架构示意图。
图8是根据一示例性实施例示出的订阅机制原理示意图。
图9是根据一示例性实施例示出的装置的框图。
图10是根据一示例性实施例示出的电子设备的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
嵌入式系统广泛应用于手机、物联网(IOT)设备等电子设备中。随着技术进步,嵌入式系统由单核发展到多核,以提升电子设备的性能。其中,在多核嵌入式系统中,可以是多个核(core)封装在同一个芯片(chip)中。比如,AP、Modem DSP、Audio DSP和Sensor DSP等。也可以是多个包含单核的芯片被设计到同一个板级board上。或者是上述两种方式的结合。
多核嵌入式系统有两种形式,非对称多核处理(Asymmetric Multi-Processing,AMP)和对称多核处理(Symmetric Multi-Processing,SMP)。
AMP架构通常包含多个CPU,且各CPU为不同的系统架构。各CPU有独立的地址空间,每一个CPU都可运行自己的操作系统(OS)。并且AMP架构为多个CPU提供了互相通信的硬件资源。比如手机SOC(System on chip,系统级芯片)即为AMP架构,SOC内部存在多个DSP和应用处理器AP,可分别运行各自的OS。
SMP架构通常包含多个CPU,且各CPU为相同系统架构,互相共享内存(memory)空间。SMP存在一个OS,并分发任务给多个CPU,CPU之间通过共享内存互相通信。比如桌面计算机即为SMP架构,各CPU并行的执行任务以提高性能。
随着多核嵌入式系统的发展,多核间需要进行通信和交互。尤其对于单芯片多核的系统,芯片多核通信成为了多核系统面临的问题。通信机制的优劣直接影响多核系统的性能,高效的通信机制也是发挥多核相同高性能的重要保障。
相关技术中,多核间通信比如可以采用:QMI(Qualcomm Messaging Interface)架构。QMI架构中每一个应用可以通过使用对应的Client API与外部的Service进行通信交互,QMI架构中的中间组件提供了数据封装、转发、解封装等的能力。
相关技术中的方式存在如下技术问题:QMI为相关平台的私有技术,并未完全开放,不能推广应用。因此,相关技术中缺乏多核间有效通信、共享数据的方法。
为了解决相关技术中的技术问题,本公开提出了一种多核通信方法,应用于多核通信系统,多核通信系统包括多个核、发布订阅层及通信层。方法包括:控制多核运行。基于通信层建立多核中发布核与接收核的通信连接。多核中的发布核通过发布订阅层调用通信层的预设接口,发布主题消息或广播主题消息的主题名称。响应于接收核调用发布订阅层的设定接口,订阅或获取主题消息。使用本公开的方法,可基于相配合的发布订阅层和通信层,实现多核间的通信连接,以及主题消息在多核间的传递。建立了有效的多核间消息的订阅和发布机制,使得多核间的共享数据更方便快捷。
在一个示例性的实施例中,本实施例的多核通信方法,应用于多核通信系统。多核通信系统包括多个核、发布订阅层及通信层。其中,多核通信系统既可以是基于AMP架构,也可以是基于SMP架构,本实施例中以基于AMP架构进行说明。
多个核中可以包括主核(Mater Core)和远程核(remote core),多个核比如可以是集成在同一芯片上。
发布订阅层比如可以是uORB(Micro Object Request Broker,微对象代理器)模式。uORB采用异步通信机制,可以实现多核间消息的发布及订阅,从而实现核间的数据共享。
通信层比如可以采用TCP/IP模型或者蓝牙模式,用于实现IPC(Inter ProcessorCommunication,处理器间通信)功能。本实施例中,通信层采用OpenAMP(开源AMP)架构模式。OpenAMP架构模式的通信层可包括三个子层:Remoteproc,Virtio,Rpmsg。
如图1所示,本实施例的方法包括如下步骤:
S110、控制多核运行。
S120、基于通信层建立多核中发布核与接收核的通信连接。
S130、多核中的发布核通过发布订阅层调用通信层的预设接口,发布主题消息或广播主题消息的主题名称。
S140、响应于接收核调用发布订阅层的设定接口,订阅或获取主题消息。
其中,在步骤S110中,OpenAMP架构模式的通信层中的Remoteproc子层,可以实现启动远程进程(boot remote proc)的功能。比如可以先启动多核中的主核,再启动远程核。
在步骤S120中,OpenAMP架构模式的通信层中的Rpmsg子层,可以实现多核间的通信连接,即实现IPC功能。发布核比如可以是多核中的任一个核,是指发布主题消息的核。接收核比如可以是多核中除发布核外的至少一个核。
在步骤S130中,预设接口比如可以是Rpmsg接口。主题消息比如可以包括:主题名称、消息内容以及发布类型等。主题信息比如可以是:加速度计数据、音频数据、蓝牙wifi状态以及系统所产生的任何中间量。每一种主题消息具有唯一的名字和对应的结构体,结构体包含了主题状态的描述,例如加速度数据,包含x、y、z三轴加速度矢量和时间戳消息。
发布核可对主题消息执行两种操作:主题消息的广播,即广播主题名称,以及主题消息的发布。
当发布核广播或发布主题消息时,其可以首先调用发布订阅层uORB的设定接口(API),通过uORB的设定接口内部调用通信层(openAMP)的预设接口,实现主题消息的广播或发布。uORB的设定接口内部比如可以包含基于Rpmsg的注册信息或调用指令。设定接口可以包括:第一设定接口、第二设定接口及第三设定接口。
本步骤中,Rpmsg子层是位于Virtio子层之上的设备类型和总线。通过调用Rpmsg接口可以实现访问Virtio子层,从而实现消息收发。其中,通信层中还具有共享内存模块,每两个核间可共用一共享内存模块。
结合图6所示,Virtio子层中包括集成于共享内存模块上的消息收发的buffer实体(缓存区),buffer实体包括TX buffer和RX buffer,消息的发送可通过TX buffer,消息接收可通过RX buffer。
本实施例中,多核使用与本核接口一致的uORB的API,OpenAMP架构模式的通信层作为发布订阅层(uORB)的后端,提供多核IPC功能。API接口较少,利于开发利用。
在步骤S140中,设定接口比如可以是指uORB的第三设定接口。第三设定接口包括orb_subscribe和orb_copy,可用于订阅或获取发布的主题消息。实现多核间的消息传输或共享。
在一个示例性的实施例中,如图2所示,本实施例的方法具体可以包括如下步骤:
S111、控制多核中的主核启动运行,基于通信层控制多核中的远程核启动。
S112、远程核获取资源表。
S113、主核和远程核根据资源表执行相同配置条目。
其中,在步骤S111中,通信层中的Remoteproc子层,可提供对remote system的生命周期和资源管理。比如可以加载remote system image到固定位置启动remote proc(远程程序);创建并管理remote system(远程系统)资源,对remote system进行suspend(暂停)、resume(重新开始)以及shutdown(关闭)等控制。
本步骤中,主核(Master core)先上电启动,启动之后,可加载并解析remotesystem image。跳转启动远程核(remote core)。
在步骤S112中,主核启动和初始化完毕之后,可加载ELF文件格式的资源表(resource table)到对应地址空间。远程核从该地址空间获取资源表,使得远程核与主核中的资源表一致。其中,资源表是由主核定义,包括:核间的缓存区(缓存区集成在共享内存模块)的区域划分原则等多项配置条目。
在一个示例中,多核通信系统以音响芯片为例。芯片拥有3核,分别是2个CortexM4核,1个Cortex A53核。其中,Cortex M4 DSP负责传感器数据采集和算法处理,Cortex M4DSP负责音频数据采集和算法处理,Cortex A53负责AI算法加速和用户UI交互。两个CorteM4分别采集sensor和音频的数据,进行融合滤波和编解码的操作,Cortex A53芯片,使用其他两个核的某些数据进行AI算法学习和推演,并负责在UI进行显示。
本示例中,Cortex A53为AP处理器,最先上电启动。启动后,跳转到其他的两个核,进行启动。Cortex A53运行Linux OS,Cortex M4运行RTOS(实时多任务操作系统)。
在步骤S113中,主核和远程核的资源表一致,在主核和远程核中,可分别根据资源表中的配置条目,进行相应的加载。
比如,资源表中包括核间的缓存区的区域划分原则。缓存区即位于共享内存模块上的buffer实体,则主核和远程核依据资源表对缓存区进行相同形式的划分。
再比如,资源表中还包括缓存区的存储字节单位。则主核和远程核依据资源表对缓存区进行单位对齐,即对缓存区设置相同的存储字节单位。
可以理解的,通信层可以根据资源表创建vring,vring包括如下参数:buffer实体的数量、大小以及对齐方式。
本实施例中,openAMP及uORB的平台相关性小,容易移植,比如由其各自的原平台移植至手机的操作系统平台。多核之间配置协商好的资源表,进行缓存区的划分和对齐单位即可,其余机制可依赖openAMP统一实现。
在一个示例性的实施例中,如图3所示,本实施例的步骤S120具体可以包括如下步骤:
S121、基于通信层在发布核和接收核分别创建端口。
S122、响应于发布核的端口名称与接收核的端口名称相同,发布核与接收核通信连接。
其中,在步骤S121中,通信层中的Rpmsg子层中,设置有一套前缀为rpmsg的API。发布核和接收核可分别通过发布订阅层(uORB)调用rpmsg的API,创建端口。本实施例中,在发布订阅层调用rpmsg的API,rpmsg的API内可包含“创建端口”的函数或指令时,以使发布核和接收核分别创建端口。
在步骤S122中,端口名称是指端口允许进程的名称。在一个示例中,当发布核和接收核通信连接用以实现uORB的进程时,发布核上创建的端口比如可以是orb_transmit,接收核上创建的端口比如可以是orb_receive。而两个端口的名称即前缀的“orb”,当此名称相同,两个核则可以实现绑定,即通过名称来进行多核间的识别及通信连接。
可以理解的,发布核与接收核的端口间形成的是虚拟channel,不同进程消息的发布与接收实质仍然通过buffer实体中的TX buffer及RX buffer。发布者的发布和订阅者的接收使用完全分离的buffer,使得发布和订阅不会互相影响和等待。其中,Rpmsg子层内部还包含Name Service,可将端口的名称(name)转换为port number(端口号),name也为Rpmsg上层虚拟channel的名字。
对于发布核与接收核间通信而言,通信层中有一份缓存区,即一份TX buffer及RXbuffer。但是根据通信的进程的不同,核上可以有多种端口,核间可以包括多个虚拟channel,以进行除ORB进程外的多种进程。
当多核中,主核是发布核,其余全部核均是接收核时,主核与任意接收核之间都需创建独立的虚拟channel。以使主核与任意接收核都可以实现消息的发布及订阅。
在一个示例性的实施例中,本实施例的方法适用于发布核广播消息的场景,即广播主题消息的主题名称。
如图4所示,步骤S130具体包括如下步骤:
S131、发布核调用发布订阅层的第一设定接口,第一设定接口调用通信层的预设接口,将主题消息发送至缓存区。
S132、以中断方式向接收核通知广播主题消息的主题名称。
S133、发布核和接收核分别建立缓存空间,缓存空间均与主题名称相对应。
其中,在步骤S131中,第一设定接口比如可以是uORB(发布订阅层)上的API:orb_advertise。预设接口比如可以是openAMP(通信层)中Rpmsg子层上的API:rpmsg_send_message。
本步骤中,当发布核调用orb_advertise,orb_advertise内部会调用rpmsg_send_message,将主题信息发送至缓冲区。
在步骤S132中,采用openAMP本身具有的中断方式(IRQ)通知接收核广播主题消息的主题名称。告知接收核:在缓存区,存在主题消息。
在步骤S133中,发布核建立核内的缓存空间(buffer)可以是在调用orb_advertise时或之前。本步骤中旨在示意发布核存在缓存空间,而非限定建立缓存空间的时机。接收核可以是在收到广播消息后建立核内的缓存空间。
本步骤中,发布核或接收核中的缓存空间,均与涉及的主题名称相对应。体现在两个方面:
第一方面,发布核或接收核中缓存空间的数量与主题名称的数量(发布和订阅总数量)相同。即每存在一个主题名称,在发布核或接收核中就对应存在该主题名称的缓存空间。
第二方面,发布核或接收核中缓存空间的名称与主题名称相同。即发布核或接收核中,对应名称的缓存空间缓存主题名称相对应的主题消息。
在一个示例中,如图7所示,本示例中包括三个核(CPU),分别为:CPU1、CPU2和CPU3。每两个核间都设置有共享内存模块(share memory),即每两个核间都具有缓存区。每一个核都可以发布主题消息(topic),并以利用中断方式(IRQ line)为其他核进行广播。
CPU1可发布topic A和topic B,订阅了CPU2上的topic 1和CPU3上的topic a。CPU1上对应包括topic A、topic B、topic 1以及topic a四个缓存空间。
CPU2可发布topic 1和topic 2,订阅了CPU1上的topic A和CPU3上的topic a。CPU2上对应包括topic 1、topic 2、topic A以及topic a四个缓存空间。
CPU3可发布topic a和topic b,暂无订阅。CPU3对应包括topic a和topic b两个缓存空间。
在一个示例性的实施例中,本实施例的方法适用于发布核发布主题消息的场景。
本实施例可以是在如图4所示的实施例的基础上进行的。步骤S130具体还包括如下步骤:
S134、发布核调用发布订阅层的第二设定接口,第二设定接口调用通信层的预设接口,在缓存区发布主题消息。
其中,第二设定接口比如可以是uORB(发布订阅层)上的API接口:orb_publish。预设接口比如可以是openAMP(通信层)中Rpmsg子层上的API:rpmsg_send_message。
本步骤中,当发布核调用orb_publish,orb_publish内部调用rpmsg_send_message,以实现在缓存区上发布主题消息。
可以理解的,发布核可同时调用第一设定接口(orb_advertise)和第二设定接口(orb_publish),进行消息的广播与发布。
在一个示例性的实施例中,在发布核发布主题消息的场景中,如图5所示,步骤S140具体包括如下步骤:
S141、响应于接收核调用发布订阅层的第三设定接口,从缓存区获取主题消息。
S142、将主题消息存储于预设核的缓存空间。
其中,在步骤S141中,第三设定接口包括uORB(发布订阅层)的orb_subscribe和orb_copy。
接收核可根据主题名称确定是否订阅消息。若接收核调用第三设定接口(orb_subscribe、orb_copy),表征接收核为订阅者。通过调用:orb_subscribe可对主题消息进行订阅并监控缓存区中主题消息的刷新状态。当主题消息存在更新时,接收核可进一步调用orb_copy,以从缓存区中获取主题消息的具体内容。
可以理解的,主题消息的主题名称是唯一的,存在订阅需求的任一接收核只有通过约定的主题名称,才能获取相应的主题消息。
在步骤S142中,接收核在获取主题消息后,可在自身核内的缓存空间存储主题消息。
Rpmsg的通信方式为异步通信方式。结合上述的实施例,发布核与接收核之间的通信中:在发布核通过uORB调用通信层预设接口rpmsg_send_message后,基于openAMP架构的通信层会调用接收方(接收核)的接收回调来响应本次通信,也即openAMP通信中的中断方式(IRQ)。在发布核和接收核之间的每次传输中可通过中断方式,实现发布核告知接收核主题消息的存在、以及接收核可告知发布核主题消息获取完毕。
在一个示例性的实施例中,以发布核为主核(Master Core)、接收核为远程核(Remote core)为例进行说明。
(1)主核调用orb_advertise和orb_publish,可对主题消息进行发布及广播。
主题信息的发布:Master Core发布主题消息,可将主题消息存放至主核内该主题的缓存空间中。同时,通过主核调用uORB接口的方式、uORB接口内部调用rpmsg接口的方式,将主题消息封装发送至共享内存模块的virtio层buffer实体(核间的缓存区)。
主题信息的广播:使用中断的方式通知Remote core存在有效信息可读。
(2)主题信息的订阅:Remote core收到中断之后,读取广播信息(主题消息的主题名称)。Remote core调用orb_subscribe对主题消息订阅,并监控主题消息。当主题消息存在更新,调用orb_copy从缓存区中获取最新主题消息,并对消息解封装。释放清空缓存区的对应消息,使用中断通知Master core进行回应,传输结束。
在发布者调用orb_advertise时,会在发布者内部创建缓存空间(buffer)。发布者每一次的orb_publish都是对缓存空间进行填充和增加索引值的过程。如图8所示,每一个订阅者在获取主题数据(orb_copy)时,都会比较自身缓存空间的索引值与发布者缓存空间的索引值。如果订阅者缓存空间的索引值小于发布者缓存空间的索引值,表明有更新的主题信息,如订阅者1和2。否则,没有更新,如订阅者3。
以下列举几个示例进行说明,然而本发明实施例不限于此:
在一个示例性的实施例中:多核包括两个核,一个核作为发布核、另一个核作为接收核。
本示例以多核间发布或获取加速度主题消息为例说明:Sensor DSP采集加速度数据,作为发布核;Cortex A53需求加速度数据,为接收核。
当一个Sensor DSP采集到加速度数据时,可以发布主题消息:“sensor_accel”,即包括加速度的x,y,z轴数据和时间戳。发布时调用uORB的API:orb_advertise和orb_publish,uORB的API会内部调用openAMP的rpmsg接口,以发布加速度主题消息。在发布的同时采用中断方式广播主题消息。
当Cortex A53想得到加速度数据时,可通过调用orb_subscribe进行订阅并监控返回的fd是否可读,如果可读(表明存在更新数据),调用orb_copy进行主题最新数据的获取。
在一个示例性的实施例中:多核包括A核、B核和C核三个核,A核可以作为发布核、B核和C核可以作为接收核。
当A核采集到数据,可调用uORB的API:orb_advertise和orb_publish,uORB的API会内部调用openAMP的rpmsg接口,以发布主题消息至缓存区。在发布的同时会采用中断的方式广播主题消息。
B核、C核收到广播消息。通过分别查看广播消息的主题名称,如果B核对此主题消息不感兴趣、则不订阅。如果C核需求获取此主题消息,并调用orb_subscribe,对此主题消息订阅。C核实时监控:A核与C核之间缓存区的消息更新状态,当存在主题消息更新,则调用orb_copy进行主题最新数据的获取。
在一个示例性的实施例中:多核包括A核、B核和C核三个核,A核和B核作为发布核、C核作为接收核。
当A核和B核分别采集到数据,需求发布时。可分别在各自的核上调用uORB的API:orb_advertise和orb_publish,uORB的API会内部调用openAMP的rpmsg接口,以分别发布主题消息。在发布的同时会采用中断的方式广播主题消息。
C核收到A核和B核的广播消息。通过分别查看广播消息的主题名称,如果C核需求对其余两核的消息都订阅。C核分别调用orb_subscribe,对A核和B核的主题消息订阅。C核实时监控:A核与C核之间缓存区的消息更新状态,以及B核与C核之间缓存区的消息更新状态。当存在主题消息更新,则C核调用orb_copy分别对主题最新数据进行获取。可以理解的,C核内,针对订阅的A核和B核的主题消息,均存在对应的缓存空间。
在一个示例性的实施例中:多核包括A核、B核、C核和D核四个核,A核和B核作为发布核、C核和D核作为接收核。
当A核和B核分别采集到数据,需求发布时。可分别在各自的核上调用uORB的API:orb_advertise和orb_publish,uORB的API会内部调用openAMP的rpmsg接口,以发布主题消息。在发布的同时会采用中断的方式广播主题消息。
C核和D核均可收到:A核和B核的广播消息。通过分别查看广播消息的主题名称,如果C核和D核均需对:A核和B核的消息订阅。每个订阅核调用orb_subscribe,分别对每个发布核的主题消息订阅。C核实时监控:A核与C核之间缓存区的消息更新状态,以及B核与C核之间缓存区的消息更新状态。D核实时监控:A核与D核之间缓存区的消息更新状态,以及B核与D核之间缓存区的消息更新状态。当存在主题消息更新,订阅核调用orb_copy对主题最新数据进行获取。
可以理解的,上述实施例中主要阐述了主题消息的订阅与发布,而基于相同的框架及原理,本公开中的多核通信方法还可以实现消息的取消订阅、远程广告/取消广告主题消息等通信进程。
在一个示例性的实施例中,本公开还提出了一种多核通信装置,应用于多核通信系统,多核通信系统包括多个核、发布订阅层及通信层。如图9所示,本实施例的装置包括:控制模块110、连接模块120、发布模块130和订阅模块140。本实施例的装置用于实现如图1所示的方法。其中,控制模块110用于控制多核运行。连接模块120用于基于通信层建立多核中发布核与接收核的通信连接。发布模块130用于多核中的发布核通过发布订阅层调用通信层的预设接口,发布主题消息或广播主题消息的主题名称。订阅模块140用于响应于接收核调用发布订阅层的设定接口,订阅或获取主题消息。
在一个示例性的实施例中,依旧参照图9,控制模块110具体用于:控制多核中的主核启动运行,基于通信层控制多核中的远程核启动;远程核获取资源表;其中,资源表由主核定义,资源表包括:核间的缓存区的区域划分原则;主核和远程核根据资源表执行相同配置条目。连接模块120具体用于:基于通信层在发布核和接收核分别创建端口;响应于发布核的端口名称与接收核的端口名称相同,发布核与接收核建立通信连接。
在一个示例性的实施例中,依旧参照图9,发布模块130具体用于:发布核调用发布订阅层的第一设定接口,第一设定接口调用通信层的预设接口,将主题消息发送至缓存区;以中断方式向接收核通知广播主题消息的主题名称。当发布核调用发布订阅层的第一设定接口时,发布模块130还用于:发布核和接收核分别建立缓存空间,缓存空间均与主题名称相对应。
在一个示例性的实施例中,依旧参照图9,发布模块130还用于:发布核调用发布订阅层的第二设定接口,第二设定接口调用通信层的预设接口,在缓存区发布主题消息。订阅模块140具体用于:响应于接收核调用发布订阅层的第三设定接口,从缓存区获取主题消息;第三设定接口包括orb_subscribe和orb_copy;将主题消息存储于预设核的缓存空间。
如图10所示是一种电子设备的框图。本公开还提供了一种电子设备,例如,设备500可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
设备500可以包括以下一个或多个组件:处理组件502,存储器504,电力组件506,多媒体组件508,音频组件510,输入/输出(I/O)的接口512,传感器组件514,以及通信组件516。
处理组件502通常控制设备500的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件502可以包括一个或多个处理器520来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件502可以包括一个或多个模块,便于处理组件502和其他组件之间的交互。例如,处理组件502可以包括多媒体模块,以方便多媒体组件508和处理组件502之间的交互。
存储器504被配置为存储各种类型的数据以支持在设备500的操作。这些数据的示例包括用于在设备500上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器504可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电力组件506为设备500的各种组件提供电力。电力组件506可以包括电源管理系统,一个或多个电源,及其他与为装置500生成、管理和分配电力相关联的组件。
多媒体组件508包括在设备500和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件508包括一个前置摄像头和/或后置摄像头。当设备500处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件510被配置为输出和/或输入音频信号。例如,音频组件510包括一个麦克风(MIC),当设备500处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器504或经由通信组件516发送。在一些实施例中,音频组件510还包括一个扬声器,用于输出音频信号。
I/O接口512为处理组件502和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件514包括一个或多个传感器,用于为设备500提供各个方面的状态评估。例如,传感器组件514可以检测到设备500的打开/关闭状态,组件的相对定位,例如组件为设备500的显示器和小键盘,传感器组件514还可以检测设备500或设备500一个组件的位置改变,用户与设备500接触的存在或不存在,设备500方位或加速/减速和装置500的温度变化。传感器组件514可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件514还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件514还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件516被配置为便于设备500和其他设备之间有线或无线方式的通信。设备500可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件516经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件516还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,设备500可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的方法。
本公开另一个示例性实施例中提供的一种非临时性计算机可读存储介质,例如包括指令的存储器504,上述指令可由设备500的处理器520执行以完成上述方法。例如,计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。当存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
- 多核通信方法、装置、电子设备及存储介质
- 多核处理器的初始化方法、装置、电子设备及存储介质