一种多处理器间通信的方法及系统的制作方法

文档序号:6614955阅读:204来源:国知局
专利名称:一种多处理器间通信的方法及系统的制作方法
技术领域
本发明涉及计算机网络和通信领域,特别是涉及一种多处理器间通信的方
法及系统。
背景技术
在现代移动通信系统中,嵌入式系统与其他类型的系统相比具备以下优

(1) 对实时多任务有很强的支持能力,能完成多任务并且有较短的中断 响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。
(2) 具有功能很强的存储区保护功能。由于嵌入式系统的软件结构已模 块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储 区保护功能,同时也有利于软件诊断。
(3) 体积小、集成度高、功耗低等。嵌入式系统使用闪存(FlashMemory) 作为存储介质,因此结构紧凑,体积微小;面向特定应用,为特定用户群设计, 能够把通用CPU中许多由板卡完成的任务集成在芯片内部,因此集成度高; 设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密,功耗也低。
(4) 执行速度高、可靠性强。嵌入式系统中的软件一般都固化在存储器 芯片或单片机本身中,而不是存贮于磁盘等载体中,因此提高了执行速度、也 增强了系统的可靠性。
(5) 性能高、竟争力强。嵌入式系统以应用为中心,以计算机技术为基 础,并且软硬件可裁剪,具有软件代码小、高度自动化、响应速度快等特点。 嵌入式系统的硬件和软件都经过高效率的设计,量体裁衣、去除冗余,这样在 同样的硅片面积上实现的性能更高,在具体应用中对处理器的选择更具有竟争
力。嵌入式系统一般用于实现对其他设备的控制、监视或管理等功能,尤其适 用于要求实时和多任务的系统。
鉴于上述优点,嵌入式系统在目前的应用中用得越来越广泛,适用于对功 能、可靠性、成本、体积、功耗有严格要求的专用计算机系统,尤其在功能复 杂、系统庞大的应用中显得愈来愈重要。
发明人在发明过程中发现, 一个大型复杂的嵌入式系统中有多个处理器, 以提高系统的实时运算能力,来完成算法复杂的基带处理。但是,嵌入式系统 的多个处理器要协同并行工作,就必须实现系统中多个处理器间的通信。

发明内容
本发明实施例提供一种多处理器间通信的方法及系统,以实现嵌入式系统 中多处理器间的通信。
本发明实施例的方法包括
源处理器通过写操作将待发送到目的处理器的消息存入消息池; 目的处理器通过读操作从消息池中读取消息。 本发明实施例的系统包括
其中的源处理器,用于通过写操作将待发送到目的处理器的消息存入消息
池;
其中的目的处理器,用于通过读操作从所述消息池中读取消息。 本发明实施例中,嵌入式系统中的源处理器通过写操作将待发送到目的处
理器的消息存入消息池,目的处理器通过读操作从消息池中读取消息,因此本
发明实施例能够实现嵌入式系统中多处理器间的通信。


图1为本发明实施例的方法步骤流程图; 图2为本发明实施例的系统结构示意图3为本发明实施例1的步骤流程图; 图4为本发明实施例2的步骤流程图; 图5为本发明实施例3的步骤流程图; 图6为本发明实施例4的步骤流程图; 图7为本发明实施例5的步骤流程图; 图8为本发明实施例6的步骤流程图; 图9为本发明实施例7的步骤流程图; 图10为本发明实施例8的步骤流程图。
具体实施例方式
为了实现嵌入式系统中多处理器间的通信,本发明实施例提供一种多处理 器间通信的方法及系统,以下分别简要概述。
本发明实施例提供一种多处理器间通信的方法,参见图l所示,包括下列 主要步骤
51、 源处理器通过写操作将待发送到目的处理器的消息存入消息池;
52、 目的处理器通过读操作从消息池中读取消息。 本发明实施例还提供一种多处理器间通信的系统,参见图2所示,包括 其中的源处理器,用于通过写操作将待发送到目的处理器的消息存入消息
池;
其中的目的处理器,用于通过读操作从所述消息池中读取消息。 本实施例中每个消息包括消息体和消息头,消息体为通信双方处理器之间 实际要传输的数据;消息头包括消息标志位、消息类型、消息长度和消息序列 号。其中,消息标志位,用于标记消息的当前状态,可以分为两种有效和空 闲;相互通信的处理器可以预先设定允许通信的消息类型;消息长度表示消息 实体的长度,与消息类型有关,特定类型的消息长度一定;消息序列号用于表 示消息池中写入的消息的序号,每往消息池中写入一条消息时,消息序列号增
加1。
本发明实施例的消息池中还包括消息池管理区,用于管理消息池。消息池 管理区中还包括消息池状态标志、写指针和读指针。其中,消息池状态标志用 于表示当前消息池是否处于可用的状态,可以预先定义消息池状态标志的取值 所表示的意义,例如,消息池状态标志为O,则表示当前消息池处于不可用的
状态;消息池状态标志为1,则表示当前消息池处于可用的状态;也可以如此 定义消息池状态标志为1,则表示当前消息池处于不可用的状态;消息池状 态标志为0,则表示当前消息池处于可用的状态;写指针用于记录将要写入消 息的起始地址,每次往消息池中写完一条消息后,写指针就要更新一次;读指 针用于记录将要读取消息的起始地址,每从消息池中读完一条消息,读指针就 要更新一次。
本发明实施例中的消息池是一个循环緩冲器(buffer),假设消息池中的第 一空白内存块Blockl靠近消息池的底部,第二空白内存块Block2靠近消息池 的顶部;本发明实施例预先定义消息池状态标志为0,则表示当前消息池处 于不可用的状态;消息池状态标志为1,则表示当前消息池处于可用的状态。
下面以8个实施例来详细描述本发明实施例。
实施例l、消息池在源处理器中,消息写入Blockl,先写消息头,再写消 息体,定时读取,读取后不设置标志位。
参见图3所示,本实施例的步骤流程如下。 步骤101:在源处理器的内存中分配消息池。
在源处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存 区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消
息池,并将分配信息通知到源处理器和目的处理器。 步骤102:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处
于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息。
本实施例假设消息池中的第一空白内存块Blockl有足够的空间存储待写 入的消息,则从Blockl的起始地址开始写入该消息的消息头(此时当前写指 针指向Blockl的起始地址),先将该消息的消息头中的标志位设置为有效,再 写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1, 作为该消息的序列号。
步骤103:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
判定消息池中的第一空白内存块Blockl有足够的空间存储待写入的消息 时,在Blockl的起始地址上偏移消息头的长度(消息头的长度为固定值),从 偏移后的地址开始写入该消息的消息体(此时当前写指针指向Blockl的起始 地址)。
步骤104:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息 池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写 入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是, 则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤105:目的处理器定时从消息池中读取消息。
目的处理器根据预先设置的阈值,定时对消息池进行读操:作,例如,当源 处理器与目的处理器之间通信比较频繁时,可将阈值预先设置为5ms,即目的处理器每隔5ms,就读一次消息池中的消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否
(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息 池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如 果否,则从消息池管理区中的当前读指针所指的地址开始读取。读取时先读取 消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读 取该消息的消息体。
读取条件是指同时满足以下四个条件
条件一、该消息头中的标志位为有效;
条件二 、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异 常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址; 如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度, 读取该消息的消息体。
步骤106:读完消息后,更新读指针。
该消息读取完毕后,更新消息池的消息池管理区中的当前读指针,即将当 前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作 处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息
池的起始纟也址。
预先设置的条件是指同时满足以下三个条件
(1) 当原读指针小于写指针时,新读指针小于等于写指针;
(2) 当原读指针大于写指针时,新读指针指向的地址在消息池的地址范
围内;
(3) 当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起 始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信 息通知到源处理器和目的处理器。源处理器通过写^喿作将待发送到目的处理器 的消息存入消息池,目的处理器通过读操作,定时从消息池中读取消息,因此 能够实现嵌入式系统中多处理器间的通信。
实施例2、消息池在源处理器中,消息写入Block2,先写消息头,再写消 息体,定时读取,读取后设置标志位。
参见图4所示,本实施例的步骤流程如下。
步骤201:在源处理器的内存中分配消息池。
在源处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存 区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消 息池,并将分配信息通知到源处理器和目的处理器。
步骤202:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Blockl 没有足够的空间存储待写入的消息,则放弃Blockl 。由于消息池是一个循环緩沖器(buffer),继续判断Block2是否有足够的空 间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则从Block2 的起始地址(即消息池的起始地址)开始,写入该消息的消息头,先将该消息 的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消 息池的消息的序列号的最大值加1,作为该消息的序列号,并在Blockl的起始 地址写入逸^t标志。
步骤203:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Blockl 没有足够的空间存储待写入的消息,则放弃Blockl 。
由于消息池是一个循环緩冲器(buffer),继续判断Block2是否有足够的空 间存储该消息,如果否,则丟弃该消息,并反馈异常指令;如果是,则在Block2 的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址 开始写入该消息的消息体。
步骤204:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息 池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写 入消息的内存空间,指向下 一 个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是, 则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤205:目的处理器定时从消息池中读取消息。
目的处理器根据预先设置的阈值,定时对消息池进行读操作,例如,当源
处理器与目的处理器之间通信比较频繁时,可将阈值预先设置为5ms,即目的 处理器每隔5ms,就读一次消息池中的消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否 (即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息 池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如 果否,则从消息池管理区中的当前读指针所指的地址开始读取,当读到跳转标 志时,将当前读指针指向消息池的起始地址,再从消息池的起始地址开始读取。
读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息 头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件
条件一、该消息头中的标志位为有效;
条件二 、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异 常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址; 如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度, 读取该消息的消息体。
步骤206:读完消息后设置标志位,并更新读指针。
该消息读取完毕后,将该消息的消息头中的标志位设置为空闲,即存储该 消息的内存空间被释^:,并更新消息池的消息池管理区中的当前读指针,即将 当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的
地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作
处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息 池的起始地址。
预先设置的条件是指同时满足以下三个条件
(1) 当原读指针小于写指针时,新读指针小于等于写指针;
(2) 当原读指针大于写指针时,新读指针指向的地址在消息池的地址范
围内;
(3) 当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起 始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信 息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器 的消息存入消息池,目的处理器通过读操作,定时从消息池中读取消息,因此 能够实现嵌入式系统中多处理器间的通信。
实施例3、消息池在源处理器中,消息写入Blockl,先写消息体,再写消 息头,空闲时读取,读取后设置标志位。
参见图5所示,本实施例的步骤流程如下。
步骤301:在源处理器的内存中分配消息池。
在源处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存 区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消 息池,并将分配信息通知到源处理器和目的处理器。
步骤302:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
判定消息池中的第一空白内存块Blockl有足够的空间存储待写入的消息
时,在Bl0Ckl的起始地址上偏移消息头的长度(消息头的长度为固定值),从
偏移后的地址开始写入该消息的消息体(此时当前写指针指向Blockl的起始 地址)。
步骤303:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息。
本实施例假设消息池中的第一空白内存块Blockl有足够的空间存储待写 入的消息,则从Blockl的起始地址开始写入该消息的消息头(此时当前写指 针指向Blockl的起始地址),先将该消息的消息头中的标志位设置为有效,再 写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1, 作为该消息的序列号。
步骤304:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息 池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写 入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是, 则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤305:目的处理器空闲时从消息池中读取消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否 (即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息 池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如 果否,则从消息池管理区中的当前读指针所指的地址开始读:f又。读取时先读取
消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读 取该消息的消息体。
读取条件是指同时满足以下四个条件 条件一、该消息头中的标志位为有效; 条件二 、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度; 条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异 常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址; 如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度, 读取该消息的消息体。
步骤306:读完消息后设置标志位,并更新读指针。
该消息读取完毕后,将该消息的消息头中的标志位设置为空闲,即存储该 消息的内存空间被释放,并更新消息池的消息池管理区中的当前读指针,即将 当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的 地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作 处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息 池的起始地址。
预先设置的条件是指同时满足以下三个条件
(1) 当原读指针小于写指针时,新读指针小于等于写指针;
(2) 当原读指针大于写指针时,新读指针指向的地址在消息池的地址范围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起
始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信
息通知到源处理器和目的处理器。源处理器通过写揭:作将待发送到目的处理器 的消息存入消息池,目的处理器通过读操作,空闲时从消息池中读取消息,因 此能够实现嵌入式系统中多处理器间的通信。
实施例4、消息池在源处理器中,消息写入Block2,先写消息体,再写消
息头,空闲时读取,读取后不设置标志位。
参见图6所示,本实施例的步骤流程如下。 步骤401:在源处理器的内存中分配消息池。
在源处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存 区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消 息池,并将分配信息通知到源处理器和目的处理器。
步骤402:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Blockl 没有足够的空间存储待写入的消息,则放弃Blockl。
由于消息池是一个循环緩冲器(buffer),继续判断Block2是否有足够的空 间存储该消息,如果否,则丟弃该消息,并反馈异常指令;如果是,则在Block2 的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址 开始写入该消息的消息体。 步骤403:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Blockl 没有足够的空间存储待写入的消息,则放弃Blockl。
由于消息池是一个循环緩沖器(buffer),继续判断Block2是否有足够的空 间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则从Block2 的起始地址(即消息池的起始地址)开始,写入该消息的消息头,先将该消息 的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消 息池的消息的序列号的最大值加1,作为该消息的序列号,并在Blockl的起始 地址写入3兆转标志。
步骤404:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息 池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写 入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是, 则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤405:目的处理器空闲时从消息池中读取消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否 (即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息 池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如 果否,则从消息池管理区中的当前读指针所指的地址开始读取,当读到跳转标 志时,将当前读指针指向消息池的起始地址,再从消息池的起始地址开始读取。
读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息 头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异 常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址; 如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度, 读取该消息的消息体。
步骤406:读完消息后,更新读指针。
该消息读取完毕后,更新消息池的消息池管理区中的当前读指针,即将当 前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地 址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作 处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息 池的起始i也址。
预先设置的条件是指同时满足以下三个条件
(1) 当原读指针小于写指针时,新读指针小于等于写指针;
(2) 当原读指针大于写指针时,新读指针指向的地址在消息池的地址范
围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起
始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信 息通知到源处理器和目的处理器。源处理器通过写纟喿作将待发送到目的处理器 的消息存入消息池,目的处理器通过读操作,空闲时从消息池中读取消息,因 此能够实现嵌入式系统中多处理器间的通信。
实施例5、消息池在目的处理器中,消息写入Blockl,先写消息头,再写 消息体,定时读取,读取后设置标志位。
参见图7所示,本实施例的步骤流程如下。 步骤501:在目的处理器的内存中分配消息池。
在目的处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内
消息池,并将分配信息通知到源处理器和目的处理器。 步骤502:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息。
本实施例假设消息池中的第一空白内存块Blockl有足够的空间存储待写 入的消息,则从Blockl的起始地址开始写入该消息的消息头(此时当前写指 针指向Blockl的起始地址),先将该消息的消息头中的标志位设置为有效,再 写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1, 作为该消息的序列号。
步骤503:将待写入消息的消息体写入消息池。首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即
当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处
于可用的状态),则继续后续流程。
判定消息池中的第一空白内存块Blockl有足够的空间存储待写入的消息 时,在Blockl的起始地址上偏移消息头的长度(消息头的长度为固定值),从 偏移后的地址开始写入该消息的消息体(此时当前写指针指向Blockl的起始 地址)。
步骤504:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息 池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写 入消息的内存空间,指向下 一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,
则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。 步骤505:目的处理器定时从消息池中读取消息。
目的处理器根据预先设置的阈值,定时对消息池进行读搡作,例如,当源 处理器与目的处理器之间通信比较频繁时,可将阈值预先设置为5ms,即目的 处理器每隔5ms,就读一次消息池中的消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否 (即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息 池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如 果否,则从消息池管理区中的当前读指针所指的地址开始读取。读取时先读取 消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读 取该消息的消息体。
读取条件是指同时满足以下四个条件
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异
常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址; 如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度, 读取该消息的消息体。
步骤506:读完消息后设置标志位,并更新读指针。
该消息读取完毕后,将该消息的消息头中的标志位设置为空闲,即存储该 消息的内存空间被释方欠,并更新消息池的消息池管理区中的当前读指针,即将 当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作 处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息 池的起始地址。
预先设置的条件是指同时满足以下三个条件
(1) 当原读指针小于写指针时,新读指针小于等于写指针;
(2) 当原读指针大于写指针时,新读指针指向的地址在消息池的地址范
围内;
(3) 当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起 始地址。
本实施例中,在嵌入式系统中目的处理器的内存中分配消息池,并将分配 信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理
器的消息存入消息池,目的处理器通过读操作,定时从消息池中读取消息,因 此能够实现嵌入式系统中多处理器间的通信。
实施例6、消息池在目的处理器中,消息写入Block2,先写消息头,再写 消息体,定时读取,读取后设置标志位。
参见图8所示,本实施例的步骤流程如下。 步骤601:在目的处理器的内存中分配消息池。
在目的处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内 存区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的 消息池,并将分配信息通知到源处理器和目的处理器。
步骤602:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Blockl 没有足够的空间存储待写入的消息,则放弃Blockl 。
由于消息池是一个循环緩沖器(buffer ),继续判断Block2是否有足够的空 间存储该消息,如果否,则丟弃该消息,并反馈异常指令;如果是,则从Block2 的起始地址(即消息池的起始地址)开始,写入该消息的消息头,先将该消息 的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消 息池的消息的序列号的最大值加1,作为该消息的序列号,并在Blockl的起始 地址写入跳转标志。
步骤603:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处
于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,^f根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Blockl 没有足够的空间存储待写入的消息,则放弃Blockl 。
由于消息池是一个循环緩沖器(buffer),继续判断Block2是否有足够的空 间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则在Block2 的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址 开始写入该消息的消息体。
步骤604:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息 池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写 入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,
则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。 步骤605:目的处理器定时从消息池中读取消息。
目的处理器根据预先设置的阈值,定时对消息池进行读操作,例如,当源 处理器与目的处理器之间通信比较频繁时,可将阈值预先设置为5ms,即目的 处理器每隔5ms,就读一次消息池中的消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否 (即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息 池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如 果否,则从消息池管理区中的当前读指针所指的地址开始读:f又,当读到跳转标 志时,将当前读指针指向消息池的起始地址,再从消息池的起始地址开始读取。
读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息 头中的消息长度读取该消息的消息体。读取条件是指同时满足以下四个条件
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异 常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址; 如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度, 读取该消息的消息体。
步骤606:读完消息后设置标志位,并更新读指针。
该消息读取完毕后,将该消息的消息头中的标志位设置为空闲,即存储该 消息的内存空间被释放,并更新消息池的消息池管理区中的当前读指针,即将 当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的 地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作 处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息 池的起始地址。
预先设置的条件是指同时满足以下三个条件
(1) 当原读指针小于写指针时,新读指针小于等于写指针;
(2) 当原读指针大于写指针时,新读指针指向的地址在消息池的地址范
围内;
(3) 当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起
始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信 息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器 的消息存入消息池,目的处理器通过读操作,定时从消息池中读取消息,因此 能够实现嵌入式系统中多处理器间的通信。
实施例7、消息池在目的处理器中,消息写入Blockl,先写消息体,再写
消息头,空闲时读取,读取后不设置标志位。
参见图9所示,本实施例的步骤流程如下。 步骤701:在目的处理器的内存中分配消息池。
在目的处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内
消息池,并将分配信息通知到源处理器和目的处理器。 步骤702:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
判定消息池中的第一空白内存块Blockl有足够的空间存储待写入的消息 时,在Blockl的起始地址上偏移消息头的长度(消息头的长度为固定值),从 偏移后的地址开始写入该消息的消息体(此时当前写指针指向Blockl的起始 地址)。
步骤703:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是
否有足够的空间存储该消息。
本实施例假设消息池中的第一空白内存块Blockl有足够的空间存储待写 入的消息,则从Blockl的起始地址开始写入该消息的消息头(此时当前写指 针指向Blockl的起始地址),先将该消息的消息头中的标志位设置为有效,再 写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1, 作为该消息的序列号。
步骤704:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息 池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写 入消息的内存空间,指向下 一 个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是, 则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤705:目的处理器空闲时从消息池中读^^消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否 (即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息 池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如 果否,则从消息池管理区中的当前读指针所指的地址开始读取。读取时先读取 消息的消息头,判定该消息头满足读取条件,则才艮据该消息头中的消息长度读 取该消息的消息体。
读取条件是指同时满足以下四个条件
条件一、该消息头中的标志位为有效;
条件二 、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异 常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;
如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起
始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度,
读取该消息的消息体。
步骤706:读完消息后,更新读指针。
该消息读:f又完毕后,更新消息池的消息池管理区中的当前读指针,即将当 前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作 处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息 池的起始地址。
预先设置的条件是指同时满足以下三个条件
(1) 当原读指针小于写指针时,新读指针小于等于写指针;
(2) 当原读指针大于写指针时,新读指针指向的地址在消息池的地址范
围内;
(3) 当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起 始地址。
本实施例中,在嵌入式系统中目的处理器的内存中分配消息池,并将分配 信息通知到源处理器和目的处理器。源处理器通过写操:作将待发送到目的处理 器的消息存入消息池,目的处理器通过读操作,空闲时从消息池中读取消息, 因此能够实现嵌入式系统中多处理器间的通信。
实施例8、消息池在目的处理器中,消息写入Block2,先写消息体,再写 消息头,空闲时读取,读取后设置标志位。
参见图IO所示,本实施例的步骤流程如下。
步骤801:在目的处理器的内存中分配消息池。
在目的处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内
消息池,并将分配信息通知到源处理器和目的处理器。 步骤802:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Blockl 没有足够的空间存储待写入的消息,则放弃Blockl。
由于消息池是一个循环緩沖器(buffer),继续判断Block2是否有足够的空 间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则在Block2 的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址 开始写入该消息的消息体。
步骤803:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即 当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处 于可用的状态),则继续后续流程。
当Blockl存在(此时消息池的消息池管理区中的写指针指向Blockl的起 始地址)时,计算Blockl的长度,并根据待写入消息的长度,判断Blockl是 否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Blockl 没有足够的空间存储待写入的消息,则放弃Blockl 。
由于消息池是一个循环緩沖器(buffer),继续判断Block2是否有足够的空 间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则从Block2的起始地址(即消息池的起始地址)开始,写入该消息的消息头,先将该消息 的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消 息池的消息的序列号的最大值加1,作为该消息的序列号,并在Blockl的起始
地址写入3兆转标 志o
步骤804:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息 池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写 入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,
则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤805:目的处理器空闲时从消息池中读取消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否 (即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息 池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如 果否,则从消息池管理区中的当前读指针所指的地址开始读取,当读到跳转标 志时,将当前读指针指向消息池的起始地址,再从消息池的起始地址开始读取。
读取时先读取消息的消息头,判定该消息头满足读取条件,贝'J根据该消息 头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件
条件一、该消息头中的标志位为有效;
条件二 、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异 常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址; 如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起 始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是, 则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起
始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度, 读取该消息的消息体。
步骤806:读完消息后设置标志位,并更新读指针。
该消息读耳又完毕后,将该消息的消息头中的标志位设置为空闲,即存储该 消息的内存空间被释放,并更新消息池的消息池管理区中的当前读指针,即将 当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的 地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作 处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息 池的起始;也址。
预先设置的条件是指同时满足以下三个条件
(1) 当原读指针小于写指针时,新读指针小于等于写指针;
(2) 当原读指针大于写指针时,新读指针指向的地址在消息池的地址范
围内;
(3) 当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起 始地址。
本实施例中,在嵌入式系统中目的处理器的内存中分配消息池,并将分配 信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理 器的消息存入消息池,目的处理器通过读操作,空闲时从消息池中读取消息, 因此能够实现嵌入式系统中多处理器间的通信。
综上所述,本发明实施例可应用于嵌入式系统中任意两个处理器之间的通 信,在嵌入式系统中的源处理器的内存中分配消息池,并将分配信息通知到源 处理器和目的处理器,源处理器通过写操作将待发送到目的处理器的消息存入
消息池,目的处理器通过读搡作,定时或空闲时从消息池中读取消息;或
在嵌入式系统中的目的处理器的内存中分配消息池,并将分配信息通知到 源处理器和目的处理器,源处理器通过写操作将待发送到目的处理器的消息存 入消息池,目的处理器通过读操作,定时或空闲时从消息池中读取消息,因此 本发明实施例能够实现嵌入式系统中多处理器间的通信。
明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及 其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1、一种多处理器间通信的方法,其特征在于,包括下列步骤源处理器通过写操作将待发送到目的处理器的消息存入消息池;目的处理器通过读操作从消息池中读取消息。
2、 如权利要求1所述的方法,其特征在于,所述消息池是从内存中分配 的关联源处理器和目的处理器的消息池。
3、 如权利要求2所述的方法,其特征在于,从源处理器的内存中分配所 述消息池,并将分配信息通知到所述源处理器和目的处理器;或从目的处理器的内存中分配所述消息池,并将分配信息通知到所述源处理 器和目的处理器。
4、 如权利要求1所述的方法,其特征在于,所述消息包括消息头,将消 息头存入消息池,包括下列步骤所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用 时,则在判定所述消息池中的第一空白内存块Blockl有足够的空间存储待写 入的消息时,从Blockl的起始地址开始写入该消息的消息头。
5、 如权利要求1所述的方法,其特征在于,所述消息包括消息头,将消 息头存入消息池,包括下列步骤所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用 时,则在判定所述消息池的第一空白内存块Blockl不足以存储待写入的消息 时,进一步判定所述消息池的第二空白内存块Block2有足够的空间存储该消 息时,从Block2的起始地址开始写入该消息的消息头,并在Blockl的起始地 址写入跳转标志。
6、 如权利要求4或5所述的方法,其特征在于,所述从起始地址开始写 入所述消息的消息头,包括下列步骤将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度, 并将所述消息池中已写入消息的序列号最大值加1作为该消息的序列号。
7、 如权利要求1所述的方法,其特征在于,将所述消息的消息体存入消 息池,包括下列步骤所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用 时,则在判定所述消息池的第一空白内存块Blockl有足够的空间存储待写入 的消息时,在Blockl的起始地址上偏移消息头的长度,从偏移后的地址开始 写入该消息的消息体。
8、 如权利要求1所述的方法,其特征在于,将所述消息的消息体存入消 息池,包括下列步骤所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用 时,则在判定所述消息池的第一空白内存块Blockl不足以存储待写入的消息 时,进一步判定所述消息池的第二空白内存块Block2有足够的空间存储该消 息时,在Block2的起始地址上偏移消息头的长度,从偏移后的地址开始写入 该消息的消息体。
9、 如权利要求1所述的方法,其特征在于,所述目的处理器根据预先设 置的阈值,定时对所述消息池进行读操作;或所述目的处理器空闲时对所述消息池进行读操作。
10、 如权利要求9所述的方法,其特征在于,所述读才喿作包括以下步骤 所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用且所述消息池中存储有消息时,从所述消息池管理区中的当前读指针所指的地址 开始读取,若读到跳转标志,则从所述消息池的起始地址开始读取;读取时先读取所述消息的消息头,判定该消息头满足读取条件,则根据该 消息头中的消息长度读取该消息的消息体。
11、 如权利要求10所述的方法,其特征在于,所述读取条件是指同时满 足以下四个条件所述消息头中的标志位为有效;该消息的类型与预先设置的消息类型相符; 该消息的长度小于预先设置的长度;该消息的长度与其类型相符。
12、 如权利要求10所述的方法,其特征在于,所述消息的消息体读取完 毕后,将所述读指针指向下一个读取地址,以更新所述读指针;或所述消息的消息体读取完毕后,将该消息的消息头中的标志位设置为空 闲,并将所述读指针指向下一个读取地址,以更新所述读指针。
13、 一种多处理器间通信的系统,包括源处理器和目的处理器,其特征在于,所述源处理器,用于通过写操作将待发送到所述目的处理器的消息存入消 息池;所述目的处理器,用于通过读操作从所述消息池中读取消息。
14、 如权利要求13所述的系统,其特征在于,所述消息池是从内存中分 配的关联所述源处理器和目的处理器的消息池。
15、 如权利要求14所述的系统,其特征在于,从所述源处理器的内存中 分配所述消息池,并将分配信息通知到所述源处理器和目的处理器;或从所述目的处理器的内存中分配所述消息池,并将分配信息通知到所述源 处理器和目的处理器。
16、 如权利要求13所述的系统,其特征在于,所述消息包括消息头,所 述源处理器将消息头存入消息池包括所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用 时,则在判定所述消息池中的第一空白内存块Blockl有足够的空间存储待写 入的消息时,所述源处理器从Blockl的起始地址开始写入该消息的消息头。
17、 如权利要求13所述的系统,其特征在于,所述消息包括消息头,所 述源处理器将消息头存入消息池包括所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用 时,则在判定所述消息池的第一空白内存块Blockl不足以存储待写入的消息 时,进一步判定所述消息池的第二空白内存块Block2有足够的空间存储该消 息时,所述源处理器从Block2的起始地址开始写入该消息的消息头,并在 Blockl的起始地址写入跳转标志。
18、 如权利要求16或17所述的系统,其特征在于,所述源处理器所述从 起始地址开始写入所述消息的消息头包括所述源处理器将该消息的消息头中的标志位设置为有效,再写入该消息的 类型和长度,并将所述消息池中已写入消息的序列号最大值加l作为该消息的 序列号。
19、 如权利要求13所述的系统,其特征在于,所述源处理器将所述消息 的消息体存入消息池包括所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用 时,则在判定所述消息池的第一空白内存块Blockl有足够的空间存储待写入 的消息时,在Blockl的起始地址上偏移消息头的长度,所述源处理器从偏移 后的地址开始写入该消息的消息体。
20、 如权利要求13所述的系统,其特征在于,所述源处理器将所述消息 的消息体存入消息池包括所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用 时,则在判定所述消息池的第一空白内存块Blockl不足以存储待写入的消息 时,进一步判定所述消息池的第二空白内存块Block2有足够的空间存储该消 息时,在Block2的起始地址上偏移消息头的长度,所述源处理器从偏移后的 地址开始写入该消息的消息体。
21、 如权利要求13所述的系统,其特征在于,所述目的处理器根据预先 设置的阈值,定时对所述消息池进行读操作;或所述目的处理器空闲时对所述消息池进行读操作。
22、 如权利要求21所述的系统,其特征在于,所述目的处理器对所述消 息池进行读操作包括所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用且 所述消息池中存储有消息时,所述目的处理器从所述消息池管理区中的当前读 指针所指的地址开始读取,若读到跳转标志,则从所述消息池的起始地址开始读取;所述目的处理器先读取所述消息的消息头,判定该消息头满足读取条件, 则根据该消息头中的消息长度读取该消息的消息体。
23、 如权利要求22所述的系统,其特征在于,所述读取条件是指同时满 足以下四个条件所述消息头中的标志位为有效;该消息的类型与预先设置的消息类型相符;该消息的长度小于预先设置的长度;该消息的长度与其类型相符。
24、 如权利要求22所述的系统,其特征在于,所述目的处理器读取所述 消息的消息体完毕后,将所述读指针指向下一个读取地址,以更新所述读指针; 或所述目的处理器读取所述消息的消息体完毕后,将该消息的消息头中的标 志位设置为空闲,并将所述读指针指向下一个读取地址,以更新所述读指针。
全文摘要
本发明公开了一种多处理器间通信的方法及系统,属于计算机网络和通信领域,以实现嵌入式系统中多处理器间的通信。方法包括源处理器通过写操作将待发送到目的处理器的消息存入消息池;目的处理器通过读操作从消息池中读取消息。系统包括其中的源处理器,用于通过写操作将待发送到目的处理器的消息存入消息池;其中的目的处理器,用于通过读操作从所述消息池中读取消息。本发明实施例中,嵌入式系统中的源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作从消息池中读取消息,因此能够实现嵌入式系统中多处理器间的通信。
文档编号G06F15/16GK101178701SQ20071019850
公开日2008年5月14日 申请日期2007年12月11日 优先权日2007年12月11日
发明者罗显锋 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1