CN117149471B - 通信方法、装置、嵌入式系统、存储介质以及电子设备 - Google Patents
通信方法、装置、嵌入式系统、存储介质以及电子设备 Download PDFInfo
- Publication number
- CN117149471B CN117149471B CN202311427549.4A CN202311427549A CN117149471B CN 117149471 B CN117149471 B CN 117149471B CN 202311427549 A CN202311427549 A CN 202311427549A CN 117149471 B CN117149471 B CN 117149471B
- Authority
- CN
- China
- Prior art keywords
- data
- queue
- operating system
- variable
- data queue
- 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
- 238000000034 method Methods 0.000 title claims abstract description 76
- 230000006854 communication Effects 0.000 title claims abstract description 55
- 238000004891 communication Methods 0.000 title claims abstract description 53
- 238000004590 computer program Methods 0.000 claims description 16
- 230000007717 exclusion Effects 0.000 claims description 16
- 238000004806 packaging method and process Methods 0.000 claims description 7
- 230000005856 abnormality Effects 0.000 claims description 6
- 230000009977 dual effect Effects 0.000 abstract description 7
- 238000012545 processing Methods 0.000 description 31
- 238000010586 diagram Methods 0.000 description 20
- 230000008569 process Effects 0.000 description 14
- 230000004044 response Effects 0.000 description 9
- 230000003993 interaction Effects 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000001960 triggered effect Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 238000013468 resource allocation Methods 0.000 description 4
- 238000005538 encapsulation Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000007613 environmental effect Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本申请实施例提供了一种通信方法、装置、嵌入式系统、存储介质以及电子设备,其中,该方法包括:第一操作系统将第一待发送数据存储至第一数据队列的队尾,并在控制信息区域中更新第一数据队列的队尾变量;第一操作系统向第二操作系统发送第一中断消息;第二操作系统在收到第一中断消息后,从第一数据队列的队头读出数据,并在控制信息区域中更新第一数据队列的队头变量,直至第一数据队列中的数据读出完毕,其中,第一数据队列中的数据是否读出完毕由第一数据队列的队尾变量和队头变量确定。通过本申请,解决了异构双系统之间同时访问共享内存容易导致并发冲突的问题。
Description
技术领域
本申请实施例涉及计算机领域,具体而言,涉及一种通信方法、装置、嵌入式系统、存储介质以及电子设备。
背景技术
近年来,随着半导体行业的发展,处理器性能越来越强,无论是通用处理器还是嵌入式处理器,都进入了多核处理器时代。多核处理器的显著特征是同一个任务可以被分解到多个内核的线程或进程上并行运行,这种并行性带来了性能的显著提升。
为了实现多处理器的并行运行,就需要高效可靠的核间通信,目前异构双系统的核间通信底层多采用中断和共享内存的方式,异构双系统之间存在同时写共享内存的并发冲突问题,影响处理器正常处理业务。
发明内容
本申请实施例提供了一种通信方法、装置、嵌入式系统、存储介质以及电子设备,以至少解决相关技术中异构双系统之间同时访问共享内存容易导致并发冲突的问题。
根据本申请的一个实施例,提供了一种通信方法,应用于处理器,处理器中运行有第一操作系统和第二操作系统,第一操作系统和第二操作系统基于共享内存进行通信,共享内存中包含第一数据队列、第二数据队列以及控制信息区域,第一数据队列用于存储第一操作系统写入的数据,第二数据队列用于存储第二操作系统写入的数据,控制信息区域中的不同存储地址分别用于存储第一数据队列的队头变量和队尾变量、第二数据队列的队头变量和队尾变量,该方法包括:第一操作系统将第一待发送数据存储至第一数据队列的队尾,并在控制信息区域中更新第一数据队列的队尾变量;第一操作系统向第二操作系统发送第一中断消息,其中,第一中断消息用于通知第二操作系统读取数据;第二操作系统在收到第一中断消息后,从第一数据队列的队头读出数据,并在控制信息区域中更新第一数据队列的队头变量,直至第一数据队列中的数据读出完毕,其中,第一数据队列中的数据是否读出完毕由第一数据队列的队尾变量和队头变量确定。
在一个示例性实施例中,将第一待发送数据存储至第一数据队列的队尾包括:第一操作系统调用互斥锁加锁接口申请加锁,并在加锁成功的情况下,从控制信息区域中读取第一数据队列的队尾变量,并根据队尾变量指示的地址将第一待发送数据存储至第一数据队列;在将第一待发送数据存储至第一数据队列的队尾之后,该方法还包括:第一操作系统调用互斥锁解锁接口进行解锁。
在一个示例性实施例中,在将第一待发送数据存储至第一数据队列的队尾之前,该方法还包括:将第一待发送数据封装为数据单元,并判断数据单元是否满足入队条件;将第一待发送数据存储至第一数据队列的队尾包括:在数据单元满足入队条件的情况下,将数据单元存储至第一数据队列的队尾。
在一个示例性实施例中,将第一待发送数据封装为数据单元包括:第一操作系统根据第一待发送数据的大小在第一操作系统的运行内存中申请内存空间;第一操作系统在申请的内存空间中按照预设格式封装第一待发送数据,得到数据单元,其中,数据单元中包括第一待发送数据以及第一待发送数据的长度信息。
在一个示例性实施例中,判断数据单元是否满足入队条件包括:判断数据单元占用空间的大小是否小于等于第一数据队列中的剩余空闲空间的大小;在数据单元占用空间的大小小于等于剩余空闲空间的大小的情况下,确定数据单元满足入队条件;在数据单元占用空间的大小大于剩余空闲空间的大小的情况下,确定数据单元不满足入队条件。
在一个示例性实施例中,第一数据队列为循环存储队列,第一数据队列中的剩余空闲空间的大小通过以下方式确定:在队尾变量的数值大于等于队头变量的数值的情况下,计算队尾变量的数值与队头变量的数值之差,得到第一差值,并计算第一数据队列的总存储空间值与第一差值之差,得到剩余空闲空间的大小;在队尾变量的数值小于队头变量的数值的情况下,计算队头变量的数值与队尾变量的数值之差,得到剩余空闲空间的大小。
在一个示例性实施例中,在判断数据单元是否满足入队条件之后,还包括:在数据单元不满足入队条件的情况下,若数据单元占用空间的大小大于第一数据队列的总存储空间的大小,将第一待发送数据拆分为多个数据块,并通过第一数据队列将多个数据块发送至第二操作系统。
在一个示例性实施例中,通过第一数据队列将多个数据块发送至第二操作系统包括:第一操作系统将多个数据块封装为多个数据单元,并将多个数据单元依次存储至第一数据队列;第一操作系统在每次存储一个数据单元之后,向第二操作系统发送第二中断消息,其中,第二中断消息用于通知第二操作系统读取数据;第二操作系统在收到第二中断消息后的情况下,从第一数据队列读出相应的数据单元,直至多个数据单元读出完毕。
在一个示例性实施例中,在判断数据单元是否满足入队条件之后,还包括:在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,清空第一数据队列,并将数据单元存储至第一数据队列。
在一个示例性实施例中,在判断数据单元是否满足入队条件之后,还包括:在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,将数据单元从队尾开始覆盖存储至第一数据队列。
在一个示例性实施例中,在判断数据单元是否满足入队条件之后,还包括:在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,记录通信异常信息,其中,通信异常信息指示操作系统未将第一数据队列中的数据读出。
在一个示例性实施例中,从第一数据队列的队头读出数据包括:第二操作系统从控制信息区域中读取第一数据队列的队头变量,并根据队头变量指示的地址从第一数据队列读出数据;第二操作系统将读出的数据存储至预先申请的第二操作系统的运行内存中,并将第一数据队列中对应的存储空间清零。
在一个示例性实施例中,第一数据队列为循环存储队列,在第一数据队列的队尾变量等于队头变量的情况下,确定第一数据队列中的数据读出完毕。
在一个示例性实施例中,在控制信息区域中更新第一数据队列的队尾变量包括:获取控制信息区域中存储的当前队尾变量,并确定存储第一待发送数据需要的第一存储空间值;计算当前队尾变量的数值和第一存储空间值之和,并计算得到的数值与第一数据队列的总存储空间值的余数,得到更新后的队尾变量的数值。
在一个示例性实施例中,在控制信息区域中更新第一数据队列的队头变量包括:获取控制信息区域中存储的当前队头变量,并确定读出的数据需要的第二存储空间值;计算当前队头变量的数值和第二存储空间值之和,并计算得到的数值与第一数据队列的总存储空间值的余数,得到更新后的队头变量的数值。
在一个示例性实施例中,该方法还包括:第二操作系统将第二待发送数据存储至第二数据队列的队尾,并在控制信息区域中更新第二数据队列的队尾变量;第二操作系统向第一操作系统发送第三中断消息,其中,第三中断消息用于通知第一操作系统读取数据;第一操作系统在收到第三中断消息后,从第二数据队列的队头读出数据,并在控制信息区域中更新第二数据队列的队头变量,直至第二数据队列中的数据读出完毕,其中,第二数据队列中的数据是否读出完毕由第二数据队列的队尾变量和队头变量确定。
根据本申请的另一个实施例,提供了一种通信装置,应用于处理器,处理器中运行有第一操作系统和第二操作系统,第一操作系统和第二操作系统基于共享内存通信,共享内存中包含第一数据队列、第二数据队列以及控制信息区域,第一数据队列用于存储第一操作系统写入的数据,第二数据队列用于存储第二操作系统写入的数据,控制信息区域中的不同存储地址分别用于存储第一数据队列的队头变量和队尾变量、第二数据队列的队头变量和队尾变量,装置包括:第一存储单元,用于控制第一操作系统将第一待发送数据存储至第一数据队列的队尾,并在控制信息区域中更新第一数据队列的队尾变量;第一发送单元,用于控制第一操作系统向第二操作系统发送第一中断消息,其中,第一中断消息用于通知第二操作系统读取数据;第一读出单元,用于控制第二操作系统在收到第一中断消息后,从第一数据队列的队头读出数据,并在控制信息区域中更新第一数据队列的队头变量,直至第一数据队列中的数据读出完毕,其中,第一数据队列中的数据是否读出完毕由第一数据队列的队尾变量和队头变量确定。
根据本申请的又一个实施例,还提供了一种嵌入式系统,包括:芯片、至少两个操作系统,其中,至少两个操作系统包括第一操作系统和第二操作系统,芯片包括处理器,处理器包含共享内存,共享内存中包含第一数据队列、第二数据队列以及控制信息区域,第一数据队列用于存储第一操作系统写入的数据,第二数据队列用于存储第二操作系统写入的数据,控制信息区域中的不同存储地址分别用于存储第一数据队列的队头变量和队尾变量、第二数据队列的队头变量和队尾变量;第一操作系统和第二操作系统基于处理器运行,并基于共享内存进行通信,第一操作系统和第二操作系统实现上述任一项方法实施例中的步骤。
在一个示例性实施例中,第一数据队列为循环存储队列,在第一数据队列的队尾变量等于队头变量的情况下,确定第一数据队列中的数据读出完毕。
在一个示例性实施例中,第二数据队列为循环存储队列,从第二数据队列的队尾写入数据,从第二数据队列的队头读出数据,在第二数据队列的队尾变量等于队头变量的情况下,确定第二数据队列中的数据读出完毕。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
本申请将处理器中的共享内存划分为第一数据队列、第二数据队列以及控制信息区域。第一操作系统将第一待发送数据存储至第一数据队列的队尾,在控制信息区域中更新第一数据队列的队尾变量,并向第二操作系统发送第一中断消息,第二操作系统从第一数据队列的队头读出数据,并在控制信息区域中更新第一数据队列的队头变量,直至基于队头变量和队尾变量确定第一数据队列中的数据读出完毕。第二操作系统将第二待发送数据存储至第二数据队列,在控制信息区域中更新第二数据队列的队尾变量,并向第一操作系统发送第三中断消息,第一操作系统从第二数据队列读出数据,在控制信息区域中更新第二数据队列的队头变量,直至基于队头变量和队尾变量确定第二数据队列中的数据读出完毕。通过本申请,将第一操作系统和第二操作系统在共享内存中写入数据的存储空间进行隔离,可以解决相关技术中异构双系统之间同时访问共享内存容易导致并发冲突的问题,第一操作系统将数据写入共享内存中的第一数据队列,第二操作系统将数据写入共享内存中的第二数据队列存储,从而达到了避免发生核间通信并发冲突的效果。
附图说明
图1是本申请实施例的一种通信方法的移动终端的硬件结构框图;
图2是本申请实施例的嵌入式系统的示意图;
图3是本申请实施例的可选的嵌入式系统的示意图一;
图4是本申请实施例的可选的嵌入式系统的示意图二;
图5是本申请实施例的可选的嵌入式系统的示意图三;
图6是本申请实施例的共享内存的示意图;
图7是本申请实施例的通信方法的流程图;
图8是本申请实施例的第一数据队列的工作示意图一;
图9是本申请实施例的第一数据队列的工作示意图二;
图10是本申请实施例的第一数据队列的工作示意图三;
图11是本申请实施例的可选的通信方法的流程图;
图12是本申请实施例的通信装置的结构示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本申请实施例的一种通信方法的移动终端的硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102和用于存储数据的存储器104,处理器102可以包括但不限于微处理器(MicrocontrollerUnit,MCU) 或可编程逻辑器件(Field Programmable Gate Array,FPGA)等的处理装置,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的通信方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种嵌入式系统,可以运行于上述移动终端,图2是本申请实施例的嵌入式系统的示意图,如图2所示,该嵌入式系统可以包括:
芯片和至少两个操作系统,其中,芯片包括处理器1102、硬件控制器1104、第一总线1106和第二总线1108,其中,第一总线1106的带宽高于第二总线1108带宽,且第一总线1106被配置为多主多从模式,第二总线1108被配置为一主多从模式;至少两个操作系统基于处理器1102运行;至少两个操作系统通过第一总线1106进行通信;至少两个操作系统通过第二总线1108实现对硬件控制器的控制。
其中,上述芯片可以是BMC芯片;上述处理器可以是多核处理器,上述硬件控制器可以用于控制连接到对应的对外接口的外部设备。
BMC芯片通过第一总线与第二总线实现片内ARM核、存储单元及控制器硬件资源间的互连。ARM核心与各控制器通过第二总线互连,实现核心与各控制器间的交互。同时,ARM核心间连接至第一总线(比如:可以通过AXI(Advanced eXtensible Interface,高级可扩展接口)桥(Bridge)连接),核心间的通信通过第一总线实现。
上述第一总线被配置为多主多从模式,其可以是处理器的多个处理器内核之间进行通信所使用的总线,例如,AHB(Advanced High Performance Bus,高级高性能总线),上述第二总线被配置为一主多从模式,其可以是处理器对硬件控制器之间控制所使用的总线,例如,APB(Advanced Peripheral Bus,外围总线),第一总线的带宽高于第二总线带宽。
在一个示例性实施例中,AHB被配置为多主(master)多从(slave)模式,Master会首先向仲裁发送发文请求,仲裁决定合适让master获取总线访问的权限,master获取权限之后会将数据与控制信号发送到仲裁器,仲裁器通过地址解析判断对应的slave通路,然后将请求发送到对应的目的端。同样响应的数据会通过Decoder解析,然后返回给对应的master。通过这种多路复用的机制实现多对多的访问。
在一个示例性实施例中,APB被配置为一主多从模式,APB挂在AHB总线系统下,通过AHB-APB Bridge将事务在AHB总线系统之间进行转化,此时Bridgre即为APB的master,其他的外围设备均为slave。数据请求只能由Master发向slave,slave收到请求后返回相应的响应数据给master,此过程可以实现一对多的访问,且访问不涉及AHB总线中的仲裁和Decoder解析操作。
嵌入式系统可以包括至少两个操作系统,至少两个操作系统基于处理器运行,而处理器的处理资源被动态分配给至少两个操作系统,处理器的处理资源包括处理器核心,至少两个操作系统通过第一总线进行通信,至少两个操作系统通过第二总线实现对硬件控制器的控制。
第一操作系统可以是具有明确固定的时间约束的操作系统,所有处理过程(任务调度)需要在固定的时间约束内完成,否则系统会出错,其可以是实时操作系统(Real TimeOperating System,简称RTOS),例如,FreeRTOS、RTLinux等,还可以是其他嵌入式系统中的实时操作系统。第二操作系统不具备该特征,第二操作系统一般采用公平任务调度算法,线程/进程数量增加时,就需要分享CPU时间,任务调试具有不确定性,可称为非实时操作系统,例如,contiki、HeliOS、Linux(全称GNU/Linux,是一套可自由传播的类Unix操作系统)等,还可以是其他嵌入式系统中的非实时操作系统,其中,Linux系统是一个基于POSIX(Portable Operating System Interface,可移植操作系统接口)的多用户、多任务、支持多线程和多CPU(Central Processing Unit,中央处理器,作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元)的操作系统。
在一个示例性实施例中,硬件控制器可以包括一种或多种,可以包括但不限于以下至少之一的芯片外设对应的控制器:I2C,USB(Universal Serial Bus,通用串行总线),UART,ADC(Analog to Digital Converter,模拟数字转换器),JTAG(Joint Test ActionGroup,联合测试工作组),RTC(Real_Time Clock,实时时钟),GPIO(General PurposeInput/Output,通用输入输出),WDT(Watch Dog Timer,看门狗),虚拟UART(VirtualUART),超级I/O(Super I/O),SGPIO(Serial General Purpose Input/Output,串行通用输入输出),PWM(Pulse Width Modulation,脉冲宽度调制),FanTach(风扇调速),Timer(时钟),PECI(Platform Environment Control Interface,平台环境式控制接口),邮箱(MailB0x),还可以包括其他类型的控制器。对外接口可以包括一种或多种,可以包括但不限于与上述任一控制器对应的对外接口。
通过上述嵌入式系统,第一操作系统和第二操作系统基于处理器运行,并通过不同功能的总线实现操作系统间的通信和硬件控制器的控制。由于第一操作系统和第二操作系统均是基于同一个处理器运行,避免了硬件器件的增加和部署,降低了系统成本,并且合理利用处理器资源支持系统之间的运行,因此,可以解决操作系统的运行效率较低的技术问题,达到了提高操作系统的运行效率的技术效果。
根据本申请实施例的另一个方面,还提供了一种嵌入式系统,上述嵌入式系统可以运行于上述BMC芯片上,图3是本申请实施例的可选的嵌入式系统的示意图一,如图3所示,上述嵌入式系统可以包括:
第一操作系统和第二操作系统,第一操作系统和第二操作系统运行于处理器上,第一操作系统的响应速度高于第二操作系统;
业务管理模块,用于根据资源动态分配规则将一组待分配业务分配给对应的操作系统,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率;
资源动态分配模块,用于确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;
资源自适应调度模块,用于根据与每个待分配业务对应的操作系统以及资源分配结果,将处理器的处理资源分配给第一操作系统和第二操作系统。
在本实施例中,第一操作系统和第二操作系统可以与前述实施例中类似,在此不做赘述,业务管理模块、资源动态分配模块和资源自适应调度模块可以是运行在第一操作系统或者第二操作系统下的软件模组,通过进行上述模块划分,可以方便进行不同功能模块的开发与维护,同时,对于资源动态分配规则,通过对资源动态分配规则进行灵活设置,提高资源分配的灵活性。
通过上述嵌入式系统,该嵌入式系统包括:第一操作系统和第二操作系统,第一操作系统和第二操作系统运行于处理器上,第一操作系统的响应速度高于第二操作系统;业务管理模块,用于根据资源动态分配规则将一组待分配业务分配给对应的操作系统,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率;资源动态分配模块,用于确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;资源自适应调度模块,用于根据与每个待分配业务对应的操作系统以及资源分配结果,将处理器的处理资源分配给第一操作系统和第二操作系统,解决了相关技术中存在由于多核处理器多数的处理资源处于空闲状态导致的核心资源的整体利用率较低的问题,提高了处理资源的利用率。
需要说明的是,嵌入式系统运行的过程中,可以先启动操作系统,然后不同的操作系统进行业务数据的交互。
在一个示例性实施例中,在操作系统包括第一操作系统和第二操作系统的情况下,可以但不限于采用以下方式启动第一操作系统和第二操作系统:引导所述第一操作系统启动;引导所述第二操作系统启动。
可选地,在本实施例中,第一操作系统和第二操作系统可以但不限于先后启动,第一操作系统可以但不限于比第二操作系统启动更快,第一操作系统也可以但不限于比第二操作系统启动所需的条件更简单,在第一操作系统先启动后可以运行能够满足第二操作系统启动所需的条件,或者能够加快第二操作系统启动的业务,从而使得多系统能够更加高效快速地启动并运行业务。
比如:引导第一操作系统启动后可以由第一操作系统运行能够控制芯片环境参数达到第二操作系统启动要求的业务(比如:风扇运行,参数控制等业务),使得芯片环境参数迅速达成第二操作系统启动运行的环境,提高操作系统的启动效率和运行效率。
可选地,在本实施例中,第一操作系统可以但不限于由第一操作系统的引导程序引导启动,第二操作系统可以但不限于由第二操作系统的引导程序引导启动。或者,二者可以由同一个引导程序先后引导启动。
在一个示例性实施例中,可以但不限于采用以下方式引导所述第一操作系统启动:所述芯片启动上电,通过所述处理器唤醒所述处理器中为所述第一操作系统分配的第一处理器核心;通过所述第一处理器核心执行所述第一操作系统的引导程序引导所述第一操作系统启动。
在一个示例性实施例中,交互的过程可以但不限于采用存储空间和中断请求配合传输的方式来实现,操作系统之间通过存储空间来传递数据,通过中断请求来进行相互之间指令的通知。比如:获取第一操作系统基于处理器运行的过程中产生的业务数据;将业务数据存储至处理器上的存储空间;向第二操作系统发送中断请求,其中,中断请求用于请求第二操作系统从存储空间读取业务数据,第二操作系统用于响应中断请求从存储空间读取业务数据。
可选地,在本实施例中,第一操作系统基于处理器运行的过程中产生的业务数据被存储在处理器上的存储空间中,通过中断请求通知第二操作系统,由第二操作系统从存储空间中读取出业务数据,从而实现业务数据的交互。
可选地,在本实施例中,操作系统之间交互的业务数据可以但不限于是操作系统运行操作业务过程中任何需要在系统间进行传输的数据。比如:业务的过程数据,业务的结果数据等等。
可选地,在本实施例中,处理器上的存储空间中可以但不限于为操作系统之间的交互过程配置专用的存储位置,可以称为共享内存。第一操作系统所对应的共享内存的信息(比如:存储地址)可以携带在用于请求第二操作系统从存储空间读取业务数据的中断请求中,第二操作系统响应中断请求到其指示的共享内存上读取业务数据。
在本实施例中,各个中断请求可以但不限于通过软件协议的方式在系统间进行传输,或者也可以通过硬件模块进行传递。以硬件模块mailb0x的形式传输中断请求为例,第一操作系统和第二操作系统之间可以建立mailb0x通道,业务数据通过存储空间读写,中断请求通过mailb0x通道传输。
第一操作系统在运行过程中产生业务数据并判定该业务数据是第二操作系统需要的或者是需要发送给第二操作系统的。此时,第一操作系统将业务数据存储至存储空间中,并向第二操作系统发送中断请求,第二操作系统响应该中断请求从存储空间中读取业务数据,并进行后续的处理。
图4是本申请实施例的可选的嵌入式系统的示意图二,如图4所示,该系统包括:
芯片和至少两个操作系统,其中,芯片包括处理器,至少两个操作系统基于处理器运行,至少两个操作系统采用本实施例的通信方法进行通信。至少两个操作系统可以包括第一操作系统和第二操作系统,第一操作系统可以包含应用层和/或驱动层,第二操作系统也可以包含应用层和/或驱动层,应用层给用户提供人机交互接口,灵活实现用户需要的具体功能;驱动层和硬件通信,可以读写硬件的寄存器,同时,驱动层会给应用层提供统一的接口,从而接收应用层传输的数据,程序应用层和驱动层进行分层设计和管理,方便程序的维护和移植。
第一操作系统使用处理器核心CPU0执行任务,第二操作系统使用处理器核心CPU1执行任务,第一操作系统和第二操作系统通过共享内存在物理层交换数据。当第一操作系统的CPU核(CPU0)把需要发送的数据按照约定协议格式放在共享内存后,触发一个中断通知第二操作系统的CPU核(CPU1)去读取数据,CPU1读取到数据之后,按照约定的协议格式解析数据,在解析数据之后,可以根据业务需求选择给CPU0回复应答消息或者不回复应答消息。
需要说明的是,当第一操作系统和第二操作系统需要向对方发送数据的时候,会去共享内存中寻找空闲的区域写数据,第一操作系统可以采用系统自身提供的互斥锁来解决自身不同任务的并发冲突问题,第二操作系统可以采用系统自身提供的互斥锁来解决自身不同任务的并发冲突问题,但是,当第一操作系统和第二操作系统同时向同一地址的共享内存写数据的时候,会出现并发冲突的问题,写入的数据会互相影响。在ARM平台中,为了解决上述问题,提供了独占访问指令LDREX和STREX实现对共享资源的独占访问,可以解决异构双系统同时写共享内存同一位置引起的并发问题,但是LDREX和STREX是ARM下的独占指令,要求处理器的多核都是ARM架构的,不能实现跨芯片平台,不够灵活。
为了解决上述问题,本实施例提供了一种可选的嵌入式系统,图5是本申请实施例的可选的嵌入式系统的示意图三,如图5所示,系统包括:
芯片、至少两个操作系统,其中,至少两个操作系统包括第一操作系统和第二操作系统,芯片包括处理器,处理器包含共享内存,共享内存中包含第一数据队列、第二数据队列以及控制信息区域,第一数据队列用于存储第一操作系统写入的数据,第二数据队列用于存储第二操作系统写入的数据,控制信息区域中的不同存储地址分别用于存储第一数据队列的队头变量和队尾变量、第二数据队列的队头变量和队尾变量;第一操作系统和第二操作系统基于处理器运行,并基于共享内存进行通信,第一操作系统和第二操作系统实现上述任一项方法实施例中的步骤。
需要说明的是,对于双核CPU的处理器,CUP分别是CPU0和CPU1,操作系统分别是第一操作系统和第二操作系统,CPU0上运行第一操作系统,CPU1上运行第二操作系统,第一操作系统和第二操作系统基于共享内存实现核间通信。
图6是本申请实施例的共享内存的示意图,如图6所示,本申请实施例将共享内存分成3个区域,分别是控制信息区域、第一数据队列、第二数据队列。其中,第一数据队列和第二数据队列统称数据队列,数据队列可以存放多个数据单元,数据单元包括了数据长度和具体的数据,数据单元的大小可以不固定,数据队列具体可以存放多少个数据单元由数据队列的大小以及数据单元的大小确定,所有数据单元的大小总和不能超过数据队列的大小,数据单元中的uint32_t Len是指数据长度信息,uint8_Data[Len]是指数据。
其中,控制信息区域存放了第一数据队列的队头变量和队尾变量,还存放了第二数据队列的队头变量和队尾变量,第一数据队列的队头变量和队尾变量、第二数据队列的队头变量和队尾变量使用无符号的32位数据(uint32_t)表示,如图6所示,控制信息区域中的变量uint32_tQueue1_Front是指第一数据队列的队头变量,变量uint32_tQueue1_Rear是指第一数据队列的队尾变量,变量uint32_tQueue2_Front是指第二数据队列的队头变量,变量uint32_tQueue2_Rear是指第二数据队列的队尾变量。
第一数据队列的队头变量和队尾变量可以指示第一数据队列中的数据存储情况,在一个示例性实施例中,第一数据队列为循环存储队列,从第一数据队列的队尾写入数据,从第一数据队列的队头读出数据,在第一数据队列的队尾变量等于队头变量的情况下,确定第一数据队列中的数据读出完毕。
在核间通信的过程中,若第一操作系统需要向第二操作系统发送数据,首先准备好需要发送的数据,放入第一数据队列的队尾,然后更新控制信息中第一数据队列的队尾变量,同时触发中断消息通知第二操作系统去读取数据,例如,触发软中断9通知第二操作系统去读取数据,第二操作系统收到软中断9后去第一数据队列中从队头开始读取数据,同时更新控制信息中第一数据队列的队头变量,直到第一数据队列的队尾变量等于队头变量,说明第一数据队列中的数据读出完毕,即第一数据队列为空。
第二数据队列的队头变量和队尾变量可以指示第二数据队列中的数据存储情况,在一个示例性实施例中,第二数据队列为循环存储队列,从第二数据队列的队尾写入数据,从第二数据队列的队头读出数据,在第二数据队列的队尾变量等于队头变量的情况下,确定第二数据队列中的数据读出完毕。
在核间通信的过程中,若第二操作系统需要向第一操作系统发送数据,首先准备好需要发送的数据,放入第二数据队列的队尾,然后更新控制信息中第二数据队列的队尾变量,同时触发中断消息通知第一操作系统去读取数据,例如,触发软中断8通知第一操作系统去读取数据,第一操作系统收到软中断8后,去第二数据队列中从队头开始读取数据,同时更新控制信息中第二数据队列的队头变量,直到第二数据队列的队尾变量等于队头变量,说明第二数据队列中的数据读出完毕,即第二数据队列为空。
本实施例的嵌入式系统,把共享内存分成了第一数据队列、第二数据队列和控制信息区域,三个区域在物理地址上不重叠,在第一操作系统和第二操作系统进行核间通信的过程中,第一操作系统和第二操作系统向共享内存中写数据的物理地址是不一样的,保证了同一个区域的同一个物理地址只能有一个系统的一个任务去写,避免了因为多系统或多任务同时写共享内存的同一物理地址,导致的核间通信的并发问题,从而达到了基于物理内存隔离避免核间通信并发冲突的目的。
图7是本申请实施例的通信方法的流程图,应用于处理器,处理器中运行有第一操作系统和第二操作系统,第一操作系统和第二操作系统基于共享内存进行通信,共享内存中包含第一数据队列、第二数据队列以及控制信息区域,第一数据队列用于存储第一操作系统写入的数据,第二数据队列用于存储第二操作系统写入的数据,控制信息区域中的不同存储地址分别用于存储第一数据队列的队头变量和队尾变量、第二数据队列的队头变量和队尾变量,如图7所示,该流程包括如下步骤:
步骤S702,第一操作系统将第一待发送数据存储至第一数据队列的队尾,并在控制信息区域中更新第一数据队列的队尾变量。
第一操作系统需要与第二操作系统进行数据交互的时候,首先准备好需要发送的数据,也即第一待发送数据,然后将第一待发送数据存储至共享内存中的第一数据队列的队尾,此时第一数据队列中的数据情况发生了变化,更新控制信息区域中第一数据队列的队尾变量,使得控制信息区域中的队尾变量可以准确表征第一数据队列中的数据情况。
步骤S704,第一操作系统向第二操作系统发送第一中断消息,其中,第一中断消息用于通知第二操作系统读取数据。
第一操作系统将第一待发送数据存储至第一数据队列中后,向第二操作系统发送第一中断消息,以通知第二操作系统从共享内存的第一数据队列读取数据,第一中断消息可以为软中断消息,例如,通过软中断9向第二操作系统发送中断消息。
步骤S706,第二操作系统在收到第一中断消息后,从第一数据队列的队头读出数据,并在控制信息区域中更新第一数据队列的队头变量,直至第一数据队列中的数据读出完毕,其中,第一数据队列中的数据是否读出完毕由第一数据队列的队尾变量和队头变量确定。
第二操作系统系统基于第一中断消息唤醒休眠的数据处理任务,数据处理任务从第一数据队列的队头开始读取数据,此时第一数据队列中的数据情况发生了变化,更新控制信息区域中第一数据队列的队头变量,使得控制信息区域中的队头变量可以准确表征第一数据队列中的数据情况,直到基于队头变量和队尾变量确定第一数据队列中的数据读出完毕,即第一数据队列为空。
在一个示例性实施例中,从第一数据队列的队头读出数据包括:第二操作系统从控制信息区域中读取第一数据队列的队头变量,并根据队头变量指示的地址从第一数据队列读出数据;第二操作系统将读出的数据存储至预先申请的第二操作系统的运行内存中,并将第一数据队列中对应的存储空间清零。
第二操作系统中的数据处理任务从第一数据队列中读取数据,把数据单元拷贝到提前申请好的运行内存中,然后把第一数据队列中对应的数据单元空间清零,实现数据单元的出队,数据单元出队后更新第一数据队列的队头变量,当第一数据队列的队头变量等于队尾变量时,表示数据读取完成,否则继续从第一数据队列中读取数据,直至第一数据队列的队头变量等于队尾变量。
在一个示例性实施例中,第一数据队列为循环存储队列,在第一数据队列的队尾变量等于队头变量的情况下,确定第一数据队列中的数据读出完毕。
需要说明的是,循环数据队列是一种只允许在一端进行数据插入操作、在另一端进行数据删除操作的线性结构,进行数据插入操作的一端叫队尾(记为Rear),该过程称作入队,进行数据删除操作一端称为队头(记为Front),该过程称作出队。由于循环数据队列具有先进先出的特点,将存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用,因而,在队尾变量等于队头变量的情况下,确定循环队列中的数据读出完毕。
通过本申请,将第一操作系统和第二操作系统在共享内存中写入数据的存储空间进行隔离,可以解决相关技术中异构双系统之间同时访问共享内存容易导致并发冲突的问题,第一操作系统将第一待发送数据存储至第一数据队列的队尾,在控制信息区域中更新第一数据队列的队尾变量,并向第二操作系统发送第一中断消息,第二操作系统从第一数据队列的队头读出数据,并在控制信息区域中更新第一数据队列的队头变量,直至基于队头变量和队尾变量确定第一数据队列中的数据读出完毕,从而达到了避免发生核间通信并发冲突的效果。
为了避免第一操作系统内部不同任务同时写第一数据队列导致并发冲突,在一个示例性实施例中,将第一待发送数据存储至第一数据队列的队尾包括:第一操作系统调用互斥锁加锁接口申请加锁,并在加锁成功的情况下,从控制信息区域中读取第一数据队列的队尾变量,并根据队尾变量指示的地址将第一待发送数据存储至第一数据队列;在将第一待发送数据存储至第一数据队列的队尾之后,该方法还包括:第一操作系统调用互斥锁解锁接口进行解锁。
第一操作系统在需要向第二操作系统发送数据的时候,在准备好第一待发送数据之后,为了实现对共享内存中的第一数据队列的独占访问,调用互斥锁加锁接口申请加锁,在加锁成功的情况下,说明此时第一操作系统没有其他任务写第一数据队列,将第一待发送数据存储至第一数据队列的队尾,在存储完成之后,为了不影响其他任务写第一数据队列,调用互斥锁解锁接口进行解锁。
例如,第一操作系统为Linux系统,第二操作系统为RTOS系统,Linux系统在需要向RTOS系统发送数据的时候,Linux系统调用自身的互斥锁加锁接口rt_mutex_lock添加互斥锁,防止Linux系统中不同的任务同时读写第一数据队列和控制信息区域,在Linux系统将第一待发送数据写入第一数据队列之后,调用Linux系统的互斥锁解锁接口rt_mutex_unlock解锁,解锁后Linux系统的其他任务可以对第一数据队列执行写操作。
在一个示例性实施例中,在将第一待发送数据存储至第一数据队列的队尾之前,该方法还包括:将第一待发送数据封装为数据单元,并判断数据单元是否满足入队条件;将第一待发送数据存储至第一数据队列的队尾包括:在数据单元满足入队条件的情况下,将数据单元存储至第一数据队列的队尾。
存入第一数据队列的数据需要满足队列存储的格式要求,第一操作系统将第一待发送数据封装为数据单元,数据单元中包括数据内容以及数据长度信息,在将第一待发送数据封装为数据单元之后,需要判断数据单元是否满足入队条件,满足入队条件是指第一队列的剩余空间可以满足数据单元的存储需求,在满足入队条件的情况下,将数据单元存储至第一数据队列的队尾。
数据的封装需要在第一操作系统的运行内存中执行,在一个示例性实施例中,将第一待发送数据封装为数据单元包括:第一操作系统根据第一待发送数据的大小在第一操作系统的运行内存中申请内存空间;第一操作系统在申请的内存空间中按照预设格式封装第一待发送数据,得到数据单元,其中,数据单元中包括第一待发送数据以及第一待发送数据的长度信息。
第一操作系统需要发送数据时,首先调用自身的接口动态申请自身运行内存中的内存空间,申请的内存空间的大小等于第一待发送数据的大小加上预设字节,预设字节用于存储数据长度信息,例如,预设字节为4字节,则申请的内存空间的大小等于第一待发送数据的大小加。在申请内存空间后,按照队列中数据单元的格式封装好第一待发送数据,得到相应的数据单元。
通过本实施例,将第一数据队列中存放数据的空间抽象成数据单元,数据单元的大小可以根据发送数据的大小动态确定,数据队列里的数据区域可以具体的业务抽象为大小不固定的数据单元,使用更灵活、扩展性更强。
在将数据单元存储至第一数据队列后,需要在控制信息区域及时更新第一数据队列的队尾变量,在一个示例性实施例中,在控制信息区域中更新第一数据队列的队尾变量包括:获取控制信息区域中存储的当前队尾变量,并确定存储第一待发送数据需要的第一存储空间值;计算当前队尾变量的数值和第一存储空间值之和,并计算得到的数值与第一数据队列的总存储空间值的余数,得到更新后的队尾变量的数值。
图8是本申请实施例的第一数据队列的工作示意图一,如图8所示,第一数据队列为循环队列,在循环队列的初始化状态,队尾和队头都指向队列开始的位置,表示队列为空,将第一待发送数据封装为1个数据单元,向队列中插入了1个数据单元,数据单元的大小为Size,也即存储第一待发送数据需要的第一存储空间值为Size,插入数据单元后队尾变量Rear更新的公式为:Rear = (Rear + Size) % MaxSize,其中,MaxSize表示整个队列的大小,也即第一数据队列的总存储空间值,%表示取余运算。
在一个示例性实施例中,判断数据单元是否满足入队条件包括:判断数据单元占用空间的大小是否小于等于第一数据队列中的剩余空闲空间的大小;在数据单元占用空间的大小小于等于剩余空闲空间的大小的情况下,确定数据单元满足入队条件;在数据单元占用空间的大小大于剩余空闲空间的大小的情况下,确定数据单元不满足入队条件。
图9是本申请实施例的第一数据队列的工作示意图二,如图9所示,第一数据队列为循环队列,数据单元从队尾插入,当需要插入的数据单元的大小大于剩余的空闲空间时,表示队列满了,添加完该数据单元后,数据会发生溢出,不能满足本次入队操作,也即,队列满的条件是:RemainSize <= Size,其中RemainSize表示剩余空闲空间的大小,Size表示要插入的数据单元的大小。
如果满足数据入队的条件,则把封装好的数据单元拷贝到队尾位置,同时更新队尾变量,在一个示例性实施例中,在控制信息区域中更新第一数据队列的队头变量包括:获取控制信息区域中存储的当前队头变量,并确定读出的数据需要的第二存储空间值;计算当前队头变量的数值和第二存储空间值之和,并计算得到的数值与第一数据队列的总存储空间值的余数,得到更新后的队头变量的数值。
图10是本申请实施例的第一数据队列的工作示意图三,如图10所示,第一数据队列为循环队列,从队列中读取数据为出队的过程,若读出的数据为第一数据单元,读取完后更新队头变量,同时第一数据单元所占的空间变成空闲空间,读取第一数据单元后更新队头变量Front:Front = (Front + Size) % MaxSize,其中,MaxSize表示整个队列的大小,也即第一数据队列的总存储空间值,Size表示读取的第一数据单元的大小。需要说明的是,当Front等于Rear时表示队列为空,即第一数据队列中数据单元已读取完成。
在一个示例性实施例中,第一数据队列为循环存储队列,第一数据队列中的剩余空闲空间的大小通过以下方式确定:在队尾变量的数值大于等于队头变量的数值的情况下,计算队尾变量的数值与队头变量的数值之差,得到第一差值,并计算第一数据队列的总存储空间值与第一差值之差,得到剩余空闲空间的大小;在队尾变量的数值小于队头变量的数值的情况下,计算队头变量的数值与队尾变量的数值之差,得到剩余空闲空间的大小。
也即,第一数据队列中的剩余空闲空间的大小RemainSize的计算方法如下:
Rear >= Front时,RemainSize = MaxSize -(Rear - Front);
Rear < Front时,RemainSize = Front - Rear;
在计算得到剩余空闲空间的大小RemainSize之后,判断是否满足数据入队的条件,在待入队的数据大小Size小于剩余空闲空间的大小RemainSize,说明添加完该数据单元后,数据不会发送溢出,满足入队的条件。
在一个示例性实施例中,在判断数据单元是否满足入队条件之后,还包括:在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,清空第一数据队列,并将数据单元存储至第一数据队列。
在一个示例性实施例中,在判断数据单元是否满足入队条件之后,还包括:在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,将数据单元从队尾开始覆盖存储至第一数据队列。
需要说明的是,在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,说明第二操作系统未将第一数据队列中的数据单元读走,为了避免影响第一操作系统和第二操作系统之间的通信,可以清空第一数据队列后再存储数据单元,也可以从队尾执行覆盖存储操作。
在一个示例性实施例中,在判断数据单元是否满足入队条件之后,还包括:在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,记录通信异常信息,其中,通信异常信息指示操作系统未将第一数据队列中的数据读出。
在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,说明第二操作系统未将第一数据队列中的数据单元读走,也即第一操作系统和第二操作系统出现通信异常,可以进行日志预警,并通知运维人员进行异常恢复处理,从而使得第一操作系统和第二操作系统可以正常通行。
在一个示例性实施例中,在判断数据单元是否满足入队条件之后,还包括:在数据单元不满足入队条件的情况下,若数据单元占用空间的大小大于第一数据队列的总存储空间的大小,将第一待发送数据拆分为多个数据块,并通过第一数据队列将多个数据块发送至第二操作系统。
若数据单元占用空间的大小大于第一数据队列的总存储空间的大小,说明第一待发送数据太大,无法存储至第一数据队列,需要把第一待发送数据拆成多个更小的数据块逐一存储至第一数据队列。
在一个示例性实施例中,通过第一数据队列将多个数据块发送至第二操作系统包括:第一操作系统将多个数据块封装为多个数据单元,并将多个数据单元依次存储至第一数据队列;第一操作系统在每次存储一个数据单元之后,向第二操作系统发送第二中断消息,其中,第二中断消息用于通知第二操作系统读取数据;第二操作系统在收到第二中断消息后的情况下,从第一数据队列读出相应的数据单元,直至多个数据单元读出完毕。
第一操作系统每次需要发送一个数据块时,首先调用自身的接口动态申请自身运行内存中的内存空间,申请的内存空间的大小等于数据块的大小加上预设字节,预设字节用于存储数据长度信息,在申请内存空间后,按照队列中数据单元的格式封装好数据块,得到相应的数据单元,并将数据单元发送至第一数据队列,在每发送一个数据块对应的数据单元时,向第二操作系统发送一次第二中断消息,第二操作系统基于第二中断消息从第一数据队列读走相应的数据单元,直至第一操作系统将所有数据块对应的数据单元都发送完毕,第二操作系统将所有数据块对应的数据单元都读走。
在一个示例性实施例中,该方法还包括:第二操作系统将第二待发送数据存储至第二数据队列的队尾,并在控制信息区域中更新第二数据队列的队尾变量;第二操作系统向第一操作系统发送第三中断消息,其中,第三中断消息用于通知第一操作系统读取数据;第一操作系统在收到第三中断消息后,从第二数据队列的队头读出数据,并在控制信息区域中更新第二数据队列的队头变量,直至第二数据队列中的数据读出完毕,其中,第二数据队列中的数据是否读出完毕由第二数据队列的队尾变量和队头变量确定。
第二操作系统需要与第一操作系统进行数据交互的时候,首先准备好需要发送的数据,也即第二待发送数据,然后将第二待发送数据存储至共享内存中的第二数据队列的队尾,此时第二数据队列中的数据情况发生了变化,更新控制信息区域中第二数据队列的队尾变量,使得控制信息区域中的队尾变量可以准确表征第二数据队列中的数据情况。
第二操作系统将第二待发送数据存储至第二数据队列中后,向第一操作系统发送第三中断消息,以通知第一操作系统从共享内存的第二数据队列读取数据,第三中断消息可以为软中断消息。第一操作系统系统收到第三中断消息后,唤醒休眠的数据处理任务,数据处理任务从第二数据队列的队头开始读取数据,此时第二数据队列中的数据情况发生了变化,更新控制信息区域中第二数据队列的队头变量,使得控制信息区域中的队头变量可以准确表征第二数据队列中的数据情况,直到基于队头变量和队尾变量确定第二数据队列中的数据读出完毕,即第二数据队列为空。
通过本申请,将第二操作系统和第一操作系统在共享内存中写入数据的存储空间进行隔离,可以解决相关技术中异构双系统之间同时访问共享内存容易导致并发冲突的问题,第二操作系统将第二待发送数据存储至第二数据队列,在控制信息区域中更新第二数据队列的队尾变量,并向第一操作系统发送第三中断消息,第一操作系统从第二数据队列读出数据,并在控制信息区域中更新第二数据队列的队头变量,直至基于队头变量和队尾变量确定第二数据队列中的数据读出完毕从而达到了避免发生核间通信并发冲突的效果。
图11是本申请实施例的可选的通信方法的流程图,第一操作系统可以为Linux系统,第二操作系统可以为RTOS系统,如图11所示,该以Linux系统向RTOS系统发送数据为例介绍本实施例的通信方法:
当Linux需要向RTOS系统发送数据时,首先根据需要发送的数据的大小调用操作系统内的接口malloc动态申请运行内存的内存空间,申请的内存空间大小为可以为待发送数据的大小加4字节,4字节用于存储数据长度,然后按照队列中数据单元的格式封装好需要发送的数据。
进一步的,添加Linux系统中提供的互斥锁rt_mutex_lock,防止Linux系统中不同的任务同时读写第一数据队列和控制信息。
然后,判断数据单元是否满足数据入队的条件,即待入队的数据单元的大小Size要小于第一数据队列的剩余空闲空间的大小RemainSize,也即,添加完该数据单元后,第一数据队列不会发生溢出。RemainSize的计算方法如下:
Rear >= Front时,RemainSize = MaxSize -(Rear - Front);
Rear < Front时,RemainSize = Front - Rear。
如果数据单元满足数据入队的条件,则把封装好的数据单元拷贝到第一数据单元的队尾位置,同时更新控制信息区域的队尾变量,更新公式Rear = (Rear + Size) %MaxSize。
如果数据单元不满足数据入队的条件,则进入异常分支。首先判断Size是否大于MaxSize,如果Size大于MaxSize,说明需要发送的数据大小大于整个队列的大小,无法将数据发送至第一数据队列,需要把发送数据拆成多个更小的数据块进行重新发送。如果Size小于MaxSize,则是因为插入数据单元后队列会发生数据溢出,可以清空队列后再把数据单元入队,或者将数据单元覆盖存储至队尾。
数据单元入队后,Linux系统触发中断9通知RTOS去读取数据,同时调用Linux系统的互斥锁解锁接口rt_mutex_unlock解锁,解锁后Linux系统的其他任务可以进行数据的入队操作。
RTOS系统收到软中断9之后,唤醒休眠的数据处理任务,数据处理任务从第一数据队列中读取数据,即从队头开始把数据单元出队,具体地,RTOS系统把数据单元拷贝到提前申请好的运行内存的内存空间,然后把第一数据队列中对应的数据单元空间清零,实现数据单元的出队,数据单元出队后更新队头,当队头变量等于队尾变量时,表示数据读取完成,否则继续从队列中读取数据,直至队头变量等于队尾变量。
通过本实施例队头等于队尾,把Linux系统和RTOS系统读写的物理地址隔开,分成了第一数据队列,第二数据队列和控制信息区域,可以有效的避免核间通信过程中Linux和RTOS系统同时写共享内存引发的并发冲突问题。同时,共享内存中存放具体数据的数据队列为循环数据队列,循环队列可以保证先发送的数据先被读取,还可以克服顺序队列的 "假上溢 " 现象,能够使存储队列的空间得到充分利用。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在本实施例中还提供了一种通信装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图12是本申请实施例的通信装置的结构示意图,应用于处理器,处理器中运行有第一操作系统和第二操作系统,第一操作系统和第二操作系统基于共享内存通信,共享内存中包含第一数据队列、第二数据队列以及控制信息区域,第一数据队列用于存储第一操作系统写入的数据,第二数据队列用于存储第二操作系统写入的数据,控制信息区域中的不同存储地址分别用于存储第一数据队列的队头变量和队尾变量、第二数据队列的队头变量和队尾变量,如图12所示,该装置包括
第一存储单元1202,用于控制第一操作系统将第一待发送数据存储至第一数据队列的队尾,并在控制信息区域中更新第一数据队列的队尾变量;
第一发送单元1204,用于控制第一操作系统向第二操作系统发送第一中断消息,其中,第一中断消息用于通知第二操作系统读取数据;
第一读出单元1206,用于控制第二操作系统在收到第一中断消息后,从第一数据队列的队头读出数据,并在控制信息区域中更新第一数据队列的队头变量,直至第一数据队列中的数据读出完毕,其中,第一数据队列中的数据是否读出完毕由第一数据队列的队尾变量和队头变量确定。
通过本申请,将第一操作系统和第二操作系统在共享内存中写入数据的存储空间进行隔离,可以解决相关技术中异构双系统之间同时访问共享内存容易导致并发冲突的问题,第一操作系统将第一待发送数据存储至第一数据队列的队尾,在控制信息区域中更新第一数据队列的队尾变量,并向第二操作系统发送第一中断消息,第二操作系统从第一数据队列的队头读出数据,并在控制信息区域中更新第一数据队列的队头变量,直至基于队头变量和队尾变量确定第一数据队列中的数据读出完毕,从而达到了避免发生核间通信并发冲突的效果。
在一个示例性实施例中,第一存储单元1202包括:加锁模块,用于控制第一操作系统调用互斥锁加锁接口申请加锁,并在加锁成功的情况下,从控制信息区域中读取第一数据队列的队尾变量,并根据队尾变量指示的地址将第一待发送数据存储至第一数据队列;解锁模块,用于在将第一待发送数据存储至第一数据队列的队尾之后,控制第一操作系统调用互斥锁解锁接口进行解锁。
在一个示例性实施例中,该装置还包括:封装单元,用于在将第一待发送数据存储至第一数据队列的队尾之前,将第一待发送数据封装为数据单元,并判断数据单元是否满足入队条件;第一存储单元1202还用于在数据单元满足入队条件的情况下,将数据单元存储至第一数据队列的队尾。
在一个示例性实施例中,封装单元包括:申请模块,用于控制第一操作系统根据第一待发送数据的大小在第一操作系统的运行内存中申请内存空间;封装模块,用于控制第一操作系统在申请的内存空间中按照预设格式封装第一待发送数据,得到数据单元,其中,数据单元中包括第一待发送数据以及第一待发送数据的长度信息。
在一个示例性实施例中,封装单元包括:判断模块,用于判断数据单元占用空间的大小是否小于等于第一数据队列中的剩余空闲空间的大小;第一确定模块,用于在数据单元占用空间的大小小于等于剩余空闲空间的大小的情况下,确定数据单元满足入队条件;第二确定模块,用于在数据单元占用空间的大小大于剩余空闲空间的大小的情况下,确定数据单元不满足入队条件。
在一个示例性实施例中,第一数据队列为循环存储队列,第一数据队列中的剩余空闲空间的大小通过以下方式确定:在队尾变量的数值大于等于队头变量的数值的情况下,计算队尾变量的数值与队头变量的数值之差,得到第一差值,并计算第一数据队列的总存储空间值与第一差值之差,得到剩余空闲空间的大小;在队尾变量的数值小于队头变量的数值的情况下,计算队头变量的数值与队尾变量的数值之差,得到剩余空闲空间的大小。
在一个示例性实施例中,该装置还包括:拆分单元,用于在判断数据单元是否满足入队条件之后,在数据单元不满足入队条件的情况下,若数据单元占用空间的大小大于第一数据队列的总存储空间的大小,将第一待发送数据拆分为多个数据块,并通过第一数据队列将多个数据块发送至第二操作系统。
在一个示例性实施例中,拆分单元用于控制第一操作系统将多个数据块封装为多个数据单元,并将多个数据单元依次存储至第一数据队列;控制第一操作系统在每次存储一个数据单元之后,向第二操作系统发送第二中断消息,其中,第二中断消息用于通知第二操作系统读取数据;控制第二操作系统在收到第二中断消息后的情况下,从第一数据队列读出相应的数据单元,直至多个数据单元读出完毕。
在一个示例性实施例中,该装置还包括:清空单元,用于在判断数据单元是否满足入队条件之后,在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,清空第一数据队列,并将数据单元存储至第一数据队列。
在一个示例性实施例中,该装置还包括:覆盖存储单元,用于在判断数据单元是否满足入队条件之后,在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,将数据单元从队尾开始覆盖存储至第一数据队列。
在一个示例性实施例中,该装置还包括:异常信息记录单元,用于在判断数据单元是否满足入队条件之后,在数据单元不满足入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,记录通信异常信息,其中,通信异常信息指示操作系统未将第一数据队列中的数据读出。
在一个示例性实施例中,第一读出单元1206包括:读取模块,用于控制第二操作系统从控制信息区域中读取第一数据队列的队头变量,并根据队头变量指示的地址从第一数据队列读出数据;清零模块,用于控制第二操作系统将读出的数据存储至预先申请的第二操作系统的运行内存中,并将第一数据队列中对应的存储空间清零。
在一个示例性实施例中,第一数据队列为循环存储队列,在第一数据队列的队尾变量等于队头变量的情况下,确定第一数据队列中的数据读出完毕。
在一个示例性实施例中,第一存储单元1202还包括第一更新模块,用于在控制信息区域中更新第一数据队列的队尾变量,第一更新模块用于获取控制信息区域中存储的当前队尾变量,并确定存储第一待发送数据需要的第一存储空间值;计算当前队尾变量的数值和第一存储空间值之和,并计算得到的数值与第一数据队列的总存储空间值的余数,得到更新后的队尾变量的数值。
在一个示例性实施例中,第一读出单元1206还包括第二更新模块,用于在控制信息区域中更新第一数据队列的队头变量,第二更新模块用于获取控制信息区域中存储的当前队头变量,并确定读出的数据需要的第二存储空间值;计算当前队头变量的数值和第二存储空间值之和,并计算得到的数值与第一数据队列的总存储空间值的余数,得到更新后的队头变量的数值。
在一个示例性实施例中,该装置还包括:第二存储单元,用于控制第二操作系统将第二待发送数据存储至第二数据队列的队尾,并在控制信息区域中更新第二数据队列的队尾变量;第二发送单元,用于控制第二操作系统向第一操作系统发送第三中断消息,其中,第三中断消息用于通知第一操作系统读取数据;第二读出单元,用于控制第一操作系统在收到第三中断消息后,从第二数据队列的队头读出数据,并在控制信息区域中更新第二数据队列的队头变量,直至第二数据队列中的数据读出完毕,其中,第二数据队列中的数据是否读出完毕由第二数据队列的队尾变量和队头变量确定。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (21)
1.一种通信方法,其特征在于,应用于处理器,所述处理器中运行有第一操作系统和第二操作系统,所述第一操作系统和所述第二操作系统基于共享内存进行通信,所述共享内存中包含第一数据队列、第二数据队列以及控制信息区域,所述第一数据队列用于存储所述第一操作系统写入的数据,所述第二数据队列用于存储所述第二操作系统写入的数据,所述控制信息区域中的不同存储地址分别用于存储所述第一数据队列的队头变量和队尾变量、所述第二数据队列的队头变量和队尾变量,所述方法包括:
所述第一操作系统将第一待发送数据存储至所述第一数据队列的队尾,并在所述控制信息区域中更新所述第一数据队列的队尾变量;
所述第一操作系统向所述第二操作系统发送第一中断消息,其中,所述第一中断消息用于通知所述第二操作系统读取数据;
所述第二操作系统在收到所述第一中断消息后,从所述第一数据队列的队头读出数据,并在所述控制信息区域中更新所述第一数据队列的队头变量,直至所述第一数据队列中的数据读出完毕,其中,所述第一数据队列中的数据是否读出完毕由所述第一数据队列的队尾变量和队头变量确定;
在将第一待发送数据存储至所述第一数据队列的队尾之前,所述方法还包括:所述第一操作系统根据所述第一待发送数据的大小在所述第一操作系统的运行内存中申请内存空间;所述第一操作系统在申请的内存空间中按照预设格式封装所述第一待发送数据,得到数据单元;判断所述数据单元是否满足入队条件;将第一待发送数据存储至所述第一数据队列的队尾包括:在所述数据单元满足所述入队条件的情况下,将所述数据单元存储至所述第一数据队列的队尾。
2.根据权利要求1所述的方法,其特征在于,将第一待发送数据存储至所述第一数据队列的队尾包括:
所述第一操作系统调用互斥锁加锁接口申请加锁,并在加锁成功的情况下,从所述控制信息区域中读取所述第一数据队列的队尾变量,并根据所述队尾变量指示的地址将所述第一待发送数据存储至所述第一数据队列;
在将第一待发送数据存储至所述第一数据队列的队尾之后,所述方法还包括:所述第一操作系统调用互斥锁解锁接口进行解锁。
3.根据权利要求1所述的方法,其特征在于,所述数据单元中包括所述第一待发送数据以及所述第一待发送数据的长度信息。
4.根据权利要求1所述的方法,其特征在于,判断所述数据单元是否满足入队条件包括:
判断所述数据单元占用空间的大小是否小于等于所述第一数据队列中的剩余空闲空间的大小;
在所述数据单元占用空间的大小小于等于所述剩余空闲空间的大小的情况下,确定所述数据单元满足所述入队条件;
在所述数据单元占用空间的大小大于所述剩余空闲空间的大小的情况下,确定所述数据单元不满足所述入队条件。
5.根据权利要求4所述的方法,其特征在于,所述第一数据队列为循环存储队列,所述第一数据队列中的剩余空闲空间的大小通过以下方式确定:
在所述队尾变量的数值大于等于所述队头变量的数值的情况下,计算所述队尾变量的数值与所述队头变量的数值之差,得到第一差值,并计算所述第一数据队列的总存储空间值与所述第一差值之差,得到所述剩余空闲空间的大小;
在所述队尾变量的数值小于所述队头变量的数值的情况下,计算所述队头变量的数值与所述队尾变量的数值之差,得到所述剩余空闲空间的大小。
6.根据权利要求1所述的方法,其特征在于,在判断所述数据单元是否满足入队条件之后,还包括:
在所述数据单元不满足所述入队条件的情况下,若所述数据单元占用空间的大小大于所述第一数据队列的总存储空间的大小,将所述第一待发送数据拆分为多个数据块,并通过所述第一数据队列将所述多个数据块发送至所述第二操作系统。
7.根据权利要求6所述的方法,其特征在于,通过所述第一数据队列将所述多个数据块发送至所述第二操作系统包括:
所述第一操作系统将所述多个数据块封装为多个数据单元,并将所述多个数据单元依次存储至所述第一数据队列;
所述第一操作系统在每次存储一个数据单元之后,向所述第二操作系统发送第二中断消息,其中,所述第二中断消息用于通知所述第二操作系统读取数据;
所述第二操作系统在收到所述第二中断消息后的情况下,从所述第一数据队列读出相应的数据单元,直至所述多个数据单元读出完毕。
8.根据权利要求1所述的方法,其特征在于,在判断所述数据单元是否满足入队条件之后,还包括:
在所述数据单元不满足所述入队条件的情况下,若所述数据单元占用空间的大小小于等于所述第一数据队列的总存储空间的大小,清空所述第一数据队列,并将所述数据单元存储至所述第一数据队列。
9.根据权利要求1所述的方法,其特征在于,在判断所述数据单元是否满足入队条件之后,还包括:
在所述数据单元不满足所述入队条件的情况下,若所述数据单元占用空间的大小小于等于所述第一数据队列的总存储空间的大小,将所述数据单元从队尾开始覆盖存储至所述第一数据队列。
10.根据权利要求1所述的方法,其特征在于,在判断所述数据单元是否满足入队条件之后,还包括:
在所述数据单元不满足所述入队条件的情况下,若数据单元占用空间的大小小于等于第一数据队列的总存储空间的大小,记录通信异常信息,其中,所述通信异常信息指示所述操作系统未将所述第一数据队列中的数据读出。
11.根据权利要求1所述的方法,其特征在于,从所述第一数据队列的队头读出数据包括:
所述第二操作系统从所述控制信息区域中读取所述第一数据队列的队头变量,并根据所述队头变量指示的地址从所述第一数据队列读出数据;
所述第二操作系统将读出的数据存储至预先申请的所述第二操作系统的运行内存中,并将所述第一数据队列中对应的存储空间清零。
12.根据权利要求1所述的方法,其特征在于,所述第一数据队列为循环存储队列,在所述第一数据队列的队尾变量等于队头变量的情况下,确定所述第一数据队列中的数据读出完毕。
13.根据权利要求12所述的方法,其特征在于,在所述控制信息区域中更新所述第一数据队列的队尾变量包括:
获取所述控制信息区域中存储的当前队尾变量,并确定存储所述第一待发送数据需要的第一存储空间值;
计算所述当前队尾变量的数值和所述第一存储空间值之和,并计算得到的数值与所述第一数据队列的总存储空间值的余数,得到更新后的队尾变量的数值。
14.根据权利要求12所述的方法,其特征在于,在所述控制信息区域中更新所述第一数据队列的队头变量包括:
获取所述控制信息区域中存储的当前队头变量,并确定读出的数据需要的第二存储空间值;
计算所述当前队头变量的数值和所述第二存储空间值之和,并计算得到的数值与所述第一数据队列的总存储空间值的余数,得到更新后的队头变量的数值。
15.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述第二操作系统将第二待发送数据存储至所述第二数据队列的队尾,并在所述控制信息区域中更新所述第二数据队列的队尾变量;
所述第二操作系统向所述第一操作系统发送第三中断消息,其中,所述第三中断消息用于通知所述第一操作系统读取数据;
所述第一操作系统在收到所述第三中断消息后,从所述第二数据队列的队头读出数据,并在所述控制信息区域中更新所述第二数据队列的队头变量,直至所述第二数据队列中的数据读出完毕,其中,所述第二数据队列中的数据是否读出完毕由所述第二数据队列的队尾变量和队头变量确定。
16.一种通信装置,其特征在于,应用于处理器,所述处理器中运行有第一操作系统和第二操作系统,所述第一操作系统和所述第二操作系统基于共享内存通信,所述共享内存中包含第一数据队列、第二数据队列以及控制信息区域,所述第一数据队列用于存储所述第一操作系统写入的数据,所述第二数据队列用于存储所述第二操作系统写入的数据,所述控制信息区域中的不同存储地址分别用于存储所述第一数据队列的队头变量和队尾变量、所述第二数据队列的队头变量和队尾变量,所述装置包括:
第一存储单元,用于控制所述第一操作系统将第一待发送数据存储至所述第一数据队列的队尾,并在所述控制信息区域中更新所述第一数据队列的队尾变量;
第一发送单元,用于控制所述第一操作系统向所述第二操作系统发送第一中断消息,其中,所述第一中断消息用于通知所述第二操作系统读取数据;
第一读出单元,用于控制所述第二操作系统在收到所述第一中断消息后,从所述第一数据队列的队头读出数据,并在所述控制信息区域中更新所述第一数据队列的队头变量,直至所述第一数据队列中的数据读出完毕,其中,所述第一数据队列中的数据是否读出完毕由所述第一数据队列的队尾变量和队头变量确定;
封装单元,用于在将第一待发送数据存储至所述第一数据队列的队尾之前,通过所述第一操作系统根据所述第一待发送数据的大小在所述第一操作系统的运行内存中申请内存空间;所述第一操作系统在申请的内存空间中按照预设格式封装所述第一待发送数据,得到数据单元;判断所述数据单元是否满足入队条件;所述第一存储单元还用于在所述数据单元满足所述入队条件的情况下,将所述数据单元存储至所述第一数据队列的队尾。
17.一种嵌入式系统,其特征在于,包括:芯片、至少两个操作系统,其中,所述至少两个操作系统包括第一操作系统和第二操作系统,所述芯片包括处理器,所述处理器包含共享内存,所述共享内存中包含第一数据队列、第二数据队列以及控制信息区域,所述第一数据队列用于存储所述第一操作系统写入的数据,所述第二数据队列用于存储所述第二操作系统写入的数据,所述控制信息区域中的不同存储地址分别用于存储所述第一数据队列的队头变量和队尾变量、所述第二数据队列的队头变量和队尾变量;
所述第一操作系统和所述第二操作系统基于所述处理器运行,并基于所述共享内存进行通信,所述第一操作系统和所述第二操作系统实现权利要求1至15中任意一项所述的通信方法。
18.根据权利要求17所述的嵌入式系统,其特征在于,所述第一数据队列为循环存储队列,从所述第一数据队列的队尾写入数据,从所述第一数据队列的队头读出数据,在所述第一数据队列的队尾变量等于队头变量的情况下,确定所述第一数据队列中的数据读出完毕。
19.根据权利要求17所述的嵌入式系统,其特征在于,所述第二数据队列为循环存储队列,从所述第二数据队列的队尾写入数据,从所述第二数据队列的队头读出数据,在所述第二数据队列的队尾变量等于队头变量的情况下,确定所述第二数据队列中的数据读出完毕。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至15任一项中所述的通信方法。
21.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至15任一项中所述的通信方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311427549.4A CN117149471B (zh) | 2023-10-31 | 2023-10-31 | 通信方法、装置、嵌入式系统、存储介质以及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311427549.4A CN117149471B (zh) | 2023-10-31 | 2023-10-31 | 通信方法、装置、嵌入式系统、存储介质以及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117149471A CN117149471A (zh) | 2023-12-01 |
CN117149471B true CN117149471B (zh) | 2024-02-09 |
Family
ID=88897248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311427549.4A Active CN117149471B (zh) | 2023-10-31 | 2023-10-31 | 通信方法、装置、嵌入式系统、存储介质以及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117149471B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101667144A (zh) * | 2009-09-29 | 2010-03-10 | 北京航空航天大学 | 一种基于共享内存的虚拟机通信方法 |
CN101739301A (zh) * | 2009-12-09 | 2010-06-16 | 南京联创科技集团股份有限公司 | Unix环境下进程间大量数据传输的方法 |
CN106445702A (zh) * | 2016-09-21 | 2017-02-22 | 乐视控股(北京)有限公司 | 多系统通信方法及终端 |
CN116185650A (zh) * | 2022-11-28 | 2023-05-30 | 麒麟软件有限公司 | 多系统间共享内存通信的方法 |
WO2023193441A1 (zh) * | 2022-04-06 | 2023-10-12 | 北京百度网讯科技有限公司 | 多核电路、数据交换方法、电子设备及存储介质 |
-
2023
- 2023-10-31 CN CN202311427549.4A patent/CN117149471B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101667144A (zh) * | 2009-09-29 | 2010-03-10 | 北京航空航天大学 | 一种基于共享内存的虚拟机通信方法 |
CN101739301A (zh) * | 2009-12-09 | 2010-06-16 | 南京联创科技集团股份有限公司 | Unix环境下进程间大量数据传输的方法 |
CN106445702A (zh) * | 2016-09-21 | 2017-02-22 | 乐视控股(北京)有限公司 | 多系统通信方法及终端 |
WO2023193441A1 (zh) * | 2022-04-06 | 2023-10-12 | 北京百度网讯科技有限公司 | 多核电路、数据交换方法、电子设备及存储介质 |
CN116185650A (zh) * | 2022-11-28 | 2023-05-30 | 麒麟软件有限公司 | 多系统间共享内存通信的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117149471A (zh) | 2023-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105045658B (zh) | 一种利用多核嵌入式dsp实现动态任务调度分发的方法 | |
US20090271796A1 (en) | Information processing system and task execution control method | |
CN116302617B (zh) | 共享内存的方法、通信方法、嵌入式系统以及电子设备 | |
CN116243995B (zh) | 通信方法、装置、计算机可读存储介质以及电子设备 | |
CN110489213A (zh) | 一种任务处理方法及处理装置、计算机系统 | |
CN116244229B (zh) | 硬件控制器的访问方法、装置、存储介质和电子设备 | |
CN116541227B (zh) | 故障诊断方法、装置、存储介质、电子装置及bmc芯片 | |
WO2024221469A1 (zh) | 嵌入式系统的启动控制方法和装置、存储介质和电子设备 | |
US20180137082A1 (en) | Single-chip multi-processor communication | |
CN108064377A (zh) | 一种多系统共享内存的管理方法及装置 | |
CN118885307B (zh) | 共享资源的访问控制方法及装置、存储介质及电子设备 | |
CN112491426A (zh) | 面向多核dsp的服务组件通信架构及任务调度、数据交互方法 | |
CN107797848A (zh) | 进程调度方法、装置和主机设备 | |
WO2024221465A1 (zh) | 操作系统的运行控制方法和装置,以及嵌入式系统和芯片 | |
CN116521324B (zh) | 中断虚拟化处理方法、装置及电子设备 | |
CN111459622B (zh) | 调度虚拟cpu的方法、装置、计算机设备和存储介质 | |
CN116302141A (zh) | 串口切换方法、芯片及串口切换系统 | |
CN108958903B (zh) | 嵌入式多核中央处理器任务调度方法与装置 | |
CN117149471B (zh) | 通信方法、装置、嵌入式系统、存储介质以及电子设备 | |
US20240362083A1 (en) | Embedded system running method and apparatus, and embedded system and chip | |
West et al. | Real-Time USB Networking and Device I/O | |
CN108958905B (zh) | 嵌入式多核中央处理器的轻量级操作系统 | |
CN114281529B (zh) | 分布式虚拟化的客户操作系统调度优化方法、系统及终端 | |
CN117149472B (zh) | 通信方法、装置、计算机可读存储介质以及电子设备 | |
CN117008984A (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 |