发明内容
本发明所要解决的技术问题是提供一种基带和协处理器间的通信方法、装置及系统,以解决现有的通信机制存在通信效率不高、通信协议较为复杂、占用内存资源的问题。
为了解决上述问题,本发明公开了一种基带和协处理器间的通信方法,包括:
判断传输数据量的大小,如果未超过预置阈值,则根据所述传输数据量的大小,选择协处理器中一个或多个空闲的寄存器,进行基带和协处理器间的通信;
如果超过预置阈值,则动态分配所述协处理器中全部或部分空闲的内存空间,进行基带和协处理器间的通信,并在通信结束后释放该内存空间。
其中,所述动态分配所述协处理器的内存空间,进行基带和协处理器间的通信,具体包括:选择空闲的寄存器;动态分配所述协处理器中全部或部分空闲的内存空间,并将分配的内存地址保存到所选择的寄存器中;当进行基带和协处理器间的通信时,从所述寄存器中读取内存地址并访问内存。
其中,所述选择协处理器中一个或多个空闲的寄存器,进行基带和协处理器间的通信,具体包括:一端构建需要传输的命令字,将所述命令字保存到所选择的寄存器中,并发送中断通知另一端;另一端接到所述中断通知后,根据所述寄存器中的命令字调用相应的中断服务程序执行,并将执行结果返回;所述一端对所述返回进行确认;其中,当所述一端为基带时,所述另一端为协处理器;当所述一端为协处理器时,所述另一端为基带。
其中,所述中断服务程序包括低级中断服务程序和高级中断服务程序;则所述另一端根据所述寄存器中的命令字调用相应的中断服务程序执行,具体包括:所述另一端根据所述寄存器中的命令字调用相应的低级中断服务程序执行,或者调用相应的高级中断服务程序执行;或者,调用相应的低级中断服务程序,该低级中断服务程序再激活相应的高级中断服务程序执行。
其中,所述命令字的格式统一,所述命令字分为两级,分别是主命令字和次命令字。
本发明还提供了一种基带和协处理器间的通信装置,包括:
判断单元,用于判断传输数据量的大小,如果未超过预置阈值,则触发寄存器选择单元;如果超过预置阈值,则触发内存动态分配单元;
寄存器选择单元,用于根据所述传输数据量的大小,选择协处理器中一个或多个空闲的寄存器,并触发通信单元;
内存动态分配单元,用于动态分配所述协处理器中全部或部分空闲的内存空间,并触发通信单元;在通信结束后释放该内存空间;
通信单元,用于进行基带和协处理器间的通信。
其中,所述内存动态分配单元具体包括:调用子单元,用于调用所述寄存器选择单元选择空闲的寄存器;内存分配子单元,用于动态分配所述协处理器中全部或部分空闲的内存空间,并将分配的内存地址保存到所选择的寄存器中;则所述通信单元当进行基带和协处理器间的通信时,从所述寄存器中读取内存地址并访问内存。
其中,所述通信单元具体包括:命令字构建子单元,用于一端构建需要传输的命令字,将所述命令字保存到所选择的寄存器中,并发送中断通知另一端;中断处理子单元,用于另一端接到所述中断通知后,根据所述寄存器中的命令字调用相应的中断服务程序执行,并将执行结果返回;确认子单元,用于所述一端对所述返回进行确认;其中,当所述一端为基带时,所述另一端为协处理器;当所述一端为协处理器时,所述另一端为基带。
其中,所述中断服务程序包括低级中断服务程序和高级中断服务程序;则所述中断处理子单元根据所述寄存器中的命令字调用相应的中断服务程序执行,具体包括:根据所述寄存器中的命令字调用相应的低级中断服务程序执行,或者调用相应的高级中断服务程序执行;或者,调用相应的低级中断服务程序,该低级中断服务程序再激活相应的高级中断服务程序执行。
其中,所述命令字的格式统一,所述命令字分为两级,分别是主命令字和次命令字。
本发明还提供了一种基带和协处理器间的通信系统,包括:基带、协处理器以及基带和协处理器间的通信装置,其中,所述协处理器包括内存存储区域及一个或多个寄存器;
所述通信装置包括:
判断单元,用于判断传输数据量的大小,如果未超过预置阈值,则触发寄存器选择单元;如果超过预置阈值,则触发内存动态分配单元;
寄存器选择单元,用于根据所述传输数据量的大小,选择协处理器中一个或多个空闲的寄存器,并触发通信单元;
内存动态分配单元,用于动态分配所述内存存储区域中全部或部分空闲的区域,并触发通信单元;在通信结束后释放所述分配的内存存储区域;
通信单元,用于进行基带和协处理器间的通信。
其中,所述通信装置中的内存动态分配单元具体包括:调用子单元,用于调用所述寄存器选择单元选择空闲的寄存器;内存分配子单元,用于动态分配所述内存存储区域中全部或部分空闲的区域,并将分配的内存地址保存到所选择的寄存器中;则所述通信单元当进行基带和协处理器间的通信时,从所述寄存器中读取内存地址并访问内存。
其中,所述通信装置中的通信单元具体包括:命令字构建子单元,用于一端构建需要传输的命令字,将所述命令字保存到所选择的寄存器中,并发送中断通知另一端;中断处理子单元,用于另一端接到所述中断通知后,根据所述寄存器中的命令字调用相应的中断服务程序执行,并将执行结果返回;确认子单元,用于所述一端对所述返回进行确认;其中,当所述一端为基带时,所述另一端为协处理器;当所述一端为协处理器时,所述另一端为基带。
与现有技术相比,本发明具有以下优点:
本发明采用共享寄存器的方式来实现基带和协处理器间的通信,该方式选择协处理器中空闲的寄存器作为通信使用,并制定相应的通信协议,完成基带和协处理器间的通信。
第一,通信效率高,因为基带对寄存器的访问速度要比内存快很多;
第二,通信协议简洁高效,因为寄存器的空间比内存小,所以通信协议可以制定的比较简单,易于通信的稳定性;
第三,节省内存空间,如果传输数据量不大,不需要占用内存,使用寄存器就可以完成通信;如果需要传输大量数据,则会动态分配所需要的空闲内存,通信完成后会立刻释放,所以也会节省内存空间。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
基带不仅可以访问协处理器的内存,还可以访问协处理器的寄存器。基于这种思想,本发明通过共享寄存器的方式代替共享内存的方式来实现基带和协处理器间的通信。一般协处理器都有很多寄存器,而这些寄存器在某个模式下并不会都用到,因此配置这些寄存器的值,并不会对协处理器的实际处理产生影响。例如对于多媒体协处理器,在进行MP4播放的时候,使用传感器相关的寄存器,并不会对MP4的播放有影响。所以选取几个在特定模式下不使用的寄存器作为通信使用就可以,具体使用的寄存器可以根据协处理器工作的模式动态改变。基于这个思想,再制定相应的通信协议,就可以高效稳定的完成基带和协处理器间的通信工作。
下面以基带与多媒体协处理器间的通信为例进行详细说明。
参照图1,是实施例所述一种基带和协处理器间的通信方法流程图。
S101,判断基带和协处理器间传输数据量的大小是否超过预置阈值;
如果未超过预置阈值,则转S102;如果超过预置阈值,则转S103;
S102,当未超过预置阈值时,根据所述传输数据量的大小,选择协处理器中一个或多个空闲的寄存器,进行基带和协处理器间的通信;
一般协处理器会有多个寄存器,协处理器在进行不同处理时会使用不同的寄存器,所以会有一些寄存器在进行某些处理时不会用到。当基带和协处理器间需要通信时,可以使用空闲的寄存器进行通信。而且,每次通信过程中使用的寄存器可能不同,需要根据协处理器使用寄存器的状况动态调整。
如果传输数据量未超过预置阈值,还需要根据传输数据量的大小判断当前通信需要使用几个寄存器,因为寄存器的容量有限,当数据量超过一个寄存器的容量时,就需要使用多个寄存器来完成通信。例如,一个寄存器可以存储32位,如果传输的命令字是64位,就需要使用两个32位的寄存器来存储该命令字。
S103,当超过预置阈值时,动态分配所述协处理器中全部或部分空闲的内存空间,并继续S104;
如果需要传输大量数据(如文件传输),而当前所有空闲的寄存器都不能满足需要,则可以使用共享内存来实现通信。但本实施例采用的共享内存是一种动态分配的方式,不同于现有的预先分配内存的方式。现有的共享内存方式是预先分配好内存空间,当通信过程中需要使用内存时,从所述预先分配好的内存空间中选择一块区域用作通信,此时协处理器的其他模块无法使用该区域,因此现有的这种方式会占用内存资源。而本实施例是在需要使用内存时,在已经分配好的内存区域之外,再动态分配一块空闲的内存区域用作通信(每次分配的空闲区域可能不同,可能占用部分空闲内存,也可能占用全部空闲内存),使用完后还会立刻释放该区域,不会影响之前已经分配好的内存的使用,因此这种动态分配的方式更能节省内存空间。
优选的,本实施例动态分配内存的方法如下:
首先,选择空闲的寄存器,具体为:判断所述协处理器是否有空闲的寄存器,如果是,则选择一个空闲的寄存器(由于动态分配内存的过程中使用寄存器是用来存放分配的内存地址,所以通常一个寄存器的容量即能存储该内存地址);然后,动态分配所述协处理器的内存空间,并将分配的内存地址保存到所选择的寄存器中。
上述动态分配内存的方法需要使用寄存器来存放分配的内存地址,当进行基带和协处理器间的通信时,从所述寄存器中读取内存地址并访问内存。当然,也可以使用其他方法来动态分配内存,本实施例在此不作限定。
S104,进行基带和协处理器间的通信,并在通信结束后释放该内存空间。
在上述通信方法中,本实施例还制定了相应的通信协议,该通信协议可以具体实现S102和S104中基带和协处理器间的通信。由于协议制定基带和协处理器的命令处理机制对称,所以基带向协处理器发起的通信过程与协处理器向基带发起的通信过程,都遵循相同的处理流程。其中,当通信一端为基带时,通信另一端为协处理器;当通信一端为协处理器时,通信另一端为基带。
对于S102中进行基带和协处理器间的通信,具体参照图2所示,如下:
S201,一端构建需要传输的命令字,将所述命令字保存到所选择的寄存器中,并发送中断通知另一端;
S202,另一端接到所述中断通知后,根据所述寄存器中的命令字调用相应的中断服务程序执行,并将执行结果返回;
其中,不同操作系统的内部中断处理机制也不同,有一级中断处理,也有多级中断处理。例如,在Nucleus操作系统中是两级中断处理,即所述中断服务程序包括低级中断服务程序(LISR,Low Interrupt Service Routines)和高级中断服务程序(HISR,High Interrupt Service Routines)。使用LISR还是HISR由具体命令决定,通常,如果是获取一个变量的值等简单操作,在LISR中进行就可以;如果需要调用操作系统函数或者耗时比较长的操作,就需要放到HISR中进行。
因此,所述另一端根据所述寄存器中的命令字调用相应的中断服务程序执行,可以是以下三种情况:
一种是所述另一端根据所述寄存器中的命令字调用相应的LISR执行,另一种是调用相应的HISR执行,还有一种是调用相应的LISR,该LISR再激活相应的HISR执行。
S203,所述一端对所述返回进行确认。
下面举例说明,以Malloc命令的实现为例,说明基带向协处理器发起的用于分配内存的命令处理流程:
首先,基带的处理如下:
1)构建传输的命令字
Msg.CMD=MAJ_SYS|MIN_SYS_MALLOC;
Msg.OP1=size;
Msg.OP2=0;
2)将传输的命令字保存到通信使用的寄存器中,并向协处理器发送软中断;
3)等待协处理器返回的结果,没有参数返回的命令处理到此结束。
上述1)至3)即是S201的处理。
其次,协处理器的处理如下,以Nucleus操作系统的两级中断处理为例:
1)协处理器的软中断LISR处理函数根据寄存器中的命令字调用相应的Mode_Sys_Lisr函数,在所述Mode_Sys_Lisr函数里做读取命令字和参数的操作;
2)由于Malloc功能需要调用Nucleus操作系统的系统函数,所以Mode_Sys_Lisr函数会激活HISR处理;
3)协处理器的软中断HISR处理函数根据命令字调用相应的Mode_Sys_Hisr函数;
4)在Mode_Sys_Hisr函数处理里判断子命令字是Malloc,则调用SD_Malloc函数分配内存,执行结束后把分配的内存地址,放到OP1里返回;
5)协处理器命令处理结束,没有参数返回的命令处理到此全部结束。
上述1)至5)即是S202中同时使用LISR和HISR的中断处理情况。
再次,基带的处理如下:
1)收到协处理器传来的ACK命令(Acknowledge的简写,就是收到确认),基带的软中断LISR处理函数根据命令字调用相应的MMD_Mode_Sys_Lisr函数;
2)在MMD_Mode_Sys_Lisr函数里会把ACK命令读到全局变量中g_Ack_MinCmd=min;g_Ack_OP1=Msg.OP1;g_Ack_OP2=Msg.OP2;
3)在MMD_SYS_Malloc函数里判断g_Ack_MinCmd值的变化,如果变化(说明ACK命令返回),则返回Malloc的地址值,此命令处理结束。
上述1)至3)即是S203对协处理器的返回进行确认。
与上述通信流程类似,对于S104中进行基带和协处理器间的通信,具体参照图3所示,如下:
S301,一端构建需要传输的命令字,将所述命令字保存到动态分配的内存区域中,并发送中断通知另一端;其中,所述动态分配的内存地址保存在寄存器中;
S302,另一端接到所述中断通知后,首先读取寄存器中的内存地址,然后根据所述内存地址到相应的内存区域读取命令字,再根据命令字调用相应的中断服务程序执行,并将执行结果返回;
其中,中断处理可以是以下三种情况:
一种是所述另一端根据所述寄存器中的命令字调用相应的LISR执行,另一种是调用相应的HISR执行,还有一种是调用相应的LISR,该LISR再激活相应的HISR执行。
S303,所述一端对所述返回进行确认。
综上所述,图2和图3中构建的命令字具有以下特点:
1)命令为固定格式,例如图2的举例说明中,命令字CMD、OP1、OP2均是32位数据;
2)命令需要有ACK,并且返回ACK的命令字需要和原来的命令字保持相同,以便于验证返回的ACK是对应哪个命令的ACK;例如返回ACK的CMD和原来的CMD保持相同;
3)命令分2级组织,分别为Major Cmd(主命令字)和Min Cmd(次命令字);
例如,命令字的格式如图4所示,其中Reserved字段是可扩展字段,占前16位,Major Cmd占中间的8位,Min Cmd占最后的8位。通常,MajorCmd和Min Cmd即可存下一个命令,但Reserved字段可扩展存放更多信息。
4)命令的处理按照主命令字在中断的LISR和HISR,注册处理函数;
5)基带和协处理器的命令处理机制对称,即基带向协处理器发起的通信过程与协处理器向基带发起的通信过程,都遵循相同的处理流程。
综上所述,上述通信方法具有以下优点:
第一,通信效率高,因为基带对寄存器的访问速度要比内存快很多;
第二,通信协议简洁高效,因为寄存器的空间比内存小,所以通信协议可以制定的比较简单,易于通信的稳定性;
第三,节省内存空间,如果传输数据量不大,不需要占用内存,使用寄存器就可以完成通信;如果需要传输大量数据,则会动态分配所需要的空闲内存,通信完成后会立刻释放,所以也会节省内存空间。
针对上述方法实施例的描述,本发明还提供了相应的装置实施例。
参照图5,是实施例所述一种基带和协处理器间的通信装置结构图。所述装置主要包括:
判断单元U51,用于判断传输数据量的大小,如果未超过预置阈值,则触发寄存器选择单元U52;如果超过预置阈值,则触发内存动态分配单元U53;
寄存器选择单元U52,用于根据所述传输数据量的大小,选择协处理器中一个或多个空闲的寄存器,并触发通信单元U54;
内存动态分配单元U53,用于动态分配所述协处理器中全部或部分空闲的内存空间,并触发通信单元U54;在通信结束后释放该内存空间;
通信单元U54,用于进行基带和协处理器间的通信。
优选的,参照图6,所述内存动态分配单元U53具体包括:
调用子单元U531,用于调用所述寄存器选择单元U52选择空闲的寄存器;
内存分配子单元U532,用于动态分配所述协处理器中全部或部分空闲的内存空间,并将分配的内存地址保存到所选择的寄存器中;
则所述通信单元U54当进行基带和协处理器间的通信时,从所述寄存器中读取内存地址并访问内存。
优选的,参照图7,所述通信单元具体U54包括:
命令字构建子单元U541,用于一端构建需要传输的命令字,将所述命令字保存到所选择的寄存器中,并发送中断通知另一端;
中断处理子单元U542,用于另一端接到所述中断通知后,根据所述寄存器中的命令字调用相应的中断服务程序执行,并将执行结果返回;
确认子单元U543,用于所述一端对所述返回进行确认;
其中,当所述一端为基带时,所述另一端为协处理器;当所述一端为协处理器时,所述另一端为基带。
其中,所述中断服务程序可以为一级中断处理或多级中断处理,如包括低级中断服务程序和高级中断服务程序;
则所述中断处理子单元U542根据所述寄存器中的命令字调用相应的中断处理函数执行,具体包括:
根据所述寄存器中的命令字调用相应的低级中断处理函数执行,或者调用相应的高级中断处理函数执行;或者,调用相应的低级中断处理函数,该低级中断处理函数再激活相应的高级中断处理函数执行。
其中,所述命令字的格式统一,所述命令字分为两级,分别是主命令字和次命令字。
综上所述,所述通信装置具有通信效率高、通信协议简洁高效、节省内存空间的优点。
在上述装置实施例的基础上,本发明实施例还提供了一种基带和协处理器间的通信系统。
参照图8,是实施例所述一种基带和协处理器间的通信系统结构图。所述通信系统包括基带U81、协处理器U82以及通信装置U83,所述通信装置U83用于实现所述基带U81和协处理器U82间的通信。其中,所述协处理器U82包括内存存储区域U84及一个或多个寄存器U85。所述通信装置U83具体包括:
判断单元U831,用于判断传输数据量的大小,如果未超过预置阈值,则触发寄存器选择单元U832;如果超过预置阈值,则触发内存动态分配单元U833;
寄存器选择单元U832,用于根据所述传输数据量的大小,选择协处理器U82中一个或多个空闲的寄存器U85,并触发通信单元U834;
内存动态分配单元U833,用于动态分配所述内存存储区域U84中全部或部分空闲的区域,并触发通信单元U834;在通信结束后释放所述分配的内存存储区域;
通信单元U834,用于进行基带U81和协处理器U82间的通信。
优选的,所述通信装置U83中的内存动态分配单元U833具体包括:
调用子单元,用于调用所述寄存器选择单元U832选择空闲的寄存器U85;
内存分配子单元,用于动态分配所述内存存储区域U84中全部或部分空闲的区域,并将分配的内存地址保存到所选择的寄存器U85中;
则所述通信单元U834当进行基带U81和协处理器U82间的通信时,从所述寄存器U85中读取内存地址并访问内存。
优选的,所述通信装置U83中的通信单元U834具体包括:
命令字构建子单元,用于一端构建需要传输的命令字,将所述命令字保存到所选择的寄存器U85中,并发送中断通知另一端;
中断处理子单元,用于另一端接到所述中断通知后,根据所述寄存器U85中的命令字调用相应的中断服务程序执行,并将执行结果返回;
确认子单元,用于所述一端对所述返回进行确认;
其中,当所述一端为基带U81时,所述另一端为协处理器U82;当所述一端为协处理器U82时,所述另一端为基带U81。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本发明所提供的一种基带和协处理器间的通信方法、装置及系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。