CN101178701B - 一种多处理器间通信的方法及系统 - Google Patents

一种多处理器间通信的方法及系统 Download PDF

Info

Publication number
CN101178701B
CN101178701B CN2007101985068A CN200710198506A CN101178701B CN 101178701 B CN101178701 B CN 101178701B CN 2007101985068 A CN2007101985068 A CN 2007101985068A CN 200710198506 A CN200710198506 A CN 200710198506A CN 101178701 B CN101178701 B CN 101178701B
Authority
CN
China
Prior art keywords
message
pool
read
write
header
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
Application number
CN2007101985068A
Other languages
English (en)
Other versions
CN101178701A (zh
Inventor
罗显锋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN2007101985068A priority Critical patent/CN101178701B/zh
Publication of CN101178701A publication Critical patent/CN101178701A/zh
Application granted granted Critical
Publication of CN101178701B publication Critical patent/CN101178701B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)

Abstract

本发明公开了一种多处理器间通信的方法及系统,属于计算机网络和通信领域,以实现嵌入式系统中多处理器间的通信。方法包括:从目的处理器或源处理器的内存中分配消息池,将该消息池作为源处理器和目的处理器的共享内存区,并将所述消息池的分配信息通知所述源处理器和目的处理器,源处理器通过写操作将待发送到目的处理器的消息存入消息池;目的处理器通过读操作从消息池中读取消息。利用本发明实施例所提供的方法和系统能够实现嵌入式系统中多处理器间的通信。

Description

一种多处理器间通信的方法及系统
技术领域
本发明涉及计算机网络和通信领域,特别是涉及一种多处理器间通信的方法及系统。
背景技术
在现代移动通信系统中,嵌入式系统与其他类型的系统相比具备以下优点:
(1)对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。
(2)具有功能很强的存储区保护功能。由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。
(3)体积小、集成度高、功耗低等。嵌入式系统使用闪存(Flash Memory)作为存储介质,因此结构紧凑,体积微小;面向特定应用,为特定用户群设计,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,因此集成度高;设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密,功耗也低。
(4)执行速度高、可靠性强。嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中,因此提高了执行速度、也增强了系统的可靠性。
(5)性能高、竞争力强。嵌入式系统以应用为中心,以计算机技术为基础,并且软硬件可裁剪,具有软件代码小、高度自动化、响应速度快等特点。嵌入式系统的硬件和软件都经过高效率的设计,量体裁衣、去除冗余,这样在同样的硅片面积上实现的性能更高,在具体应用中对处理器的选择更具有竞争力。嵌入式系统一般用于实现对其他设备的控制、监视或管理等功能,尤其适用于要求实时和多任务的系统
鉴于上述优点,嵌入式系统在目前的应用中用得越来越广泛,适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。
发明人在发明过程中发现,一个大型复杂的嵌入式系统中有多个处理器,以提高系统的实时运算能力,来完成算法复杂的基带处理。但是,嵌入式系统的多个处理器要协同并行工作,就必须实现系统中多个处理器间的通信。
发明内容
本发明实施例提供一种多处理器间通信的方法及系统,以实现嵌入式系统中多处理器间的通信。
本发明实施例的方法包括:
从目的处理器或源处理器的内存中分配消息池,将该消息池作为源处理器和目的处理器的共享内存区,并将所述消息池的分配信息通知所述源处理器和目的处理器,源处理器通过写操作将待发送到目的处理器的消息存入消息池,其中,所述消息池中包括消息池管理区;
目的处理器根据预设的时间间隔或空闲时对所述消息池进行读操作从消息池中读取消息,其中,消息池管理区中的消息池状态为可用且所述消息池中存储有消息时,从所述消息池管理区中的当前读指针所指的地址开始读取,若读到跳转标志,则从所述消息池的起始地址开始读取;读取时先读取所述消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
本发明实施例的系统包括:
其中的源处理器,用于从自身的内存中分配消息池,将该消息池作为源处理器和目的处理器的共享内存区,并将分配信息通知目的处理器,并通过写操作将待发送到目的处理器的消息存入消息池,其中,所述消息池中包括消息池管理区;
其中的目的处理器,用于根据预设的时间间隔或空闲时对所述消息池进行读操作从消息池中读取消息,其中,消息池管理区中的消息池状态为可用且所述消息池中存储有消息时,从所述消息池管理区中的当前读指针所指的地址开始读取,若读到跳转标志,则从所述消息池的起始地址开始读取;读取时先读取所述消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
本发明实施例中,嵌入式系统中的源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作从消息池中读取消息,因此本发明实施例能够实现嵌入式系统中多处理器间的通信。
附图说明
图1为本发明实施例的方法步骤流程图;
图2为本发明实施例的系统结构示意图;
图3为本发明实施例1的步骤流程图;
图4为本发明实施例2的步骤流程图;
图5为本发明实施例3的步骤流程图;
图6为本发明实施例4的步骤流程图;
图7为本发明实施例5的步骤流程图;
图8为本发明实施例6的步骤流程图;
图9为本发明实施例7的步骤流程图;
图10为本发明实施例8的步骤流程图。
具体实施方式
为了实现嵌入式系统中多处理器间的通信,本发明实施例提供一种多处理器间通信的方法及系统,以下分别简要概述。
本发明实施例提供一种多处理器间通信的方法,参见图1所示,包括下列主要步骤:
S1、源处理器通过写操作将待发送到目的处理器的消息存入消息池;
S2、目的处理器通过读操作从消息池中读取消息。
本发明实施例还提供一种多处理器间通信的系统,参见图2所示,包括:
其中的源处理器,用于通过写操作将待发送到目的处理器的消息存入消息池;
其中的目的处理器,用于通过读操作从所述消息池中读取消息。
本实施例中每个消息包括消息体和消息头,消息体为通信双方处理器之间实际要传输的数据;消息头包括消息标志位、消息类型、消息长度和消息序列号。其中,消息标志位,用于标记消息的当前状态,可以分为两种:有效和空闲;相互通信的处理器可以预先设定允许通信的消息类型;消息长度表示消息实体的长度,与消息类型有关,特定类型的消息长度一定;消息序列号用于表示消息池中写入的消息的序号,每往消息池中写入一条消息时,消息序列号增加1。
本发明实施例的消息池中还包括消息池管理区,用于管理消息池。消息池管理区中还包括消息池状态标志、写指针和读指针。其中,消息池状态标志用于表示当前消息池是否处于可用的状态,可以预先定义消息池状态标志的取值所表示的意义,例如,消息池状态标志为0,则表示当前消息池处于不可用的状态;消息池状态标志为1,则表示当前消息池处于可用的状态;也可以如此定义:消息池状态标志为1,则表示当前消息池处于不可用的状态;消息池状态标志为0,则表示当前消息池处于可用的状态;写指针用于记录将要写入消息的起始地址,每次往消息池中写完一条消息后,写指针就要更新一次;读指针用于记录将要读取消息的起始地址,每从消息池中读完一条消息,读指针就要更新一次。
本发明实施例中的消息池是一个循环缓冲器(buffer),假设消息池中的第一空白内存块Block1靠近消息池的底部,第二空白内存块Block2靠近消息池的顶部;本发明实施例预先定义:消息池状态标志为0,则表示当前消息池处于不可用的状态;消息池状态标志为1,则表示当前消息池处于可用的状态。
下面以8个实施例来详细描述本发明实施例。
实施例1、消息池在源处理器中,消息写入Block1,先写消息头,再写消息体,定时读取,读取后不设置标志位。
参见图3所示,本实施例的步骤流程如下。
步骤101:在源处理器的内存中分配消息池。
在源处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消息池,并将分配信息通知到源处理器和目的处理器。
步骤102:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息。
本实施例假设消息池中的第一空白内存块Block1有足够的空间存储待写入的消息,则从Block1的起始地址开始写入该消息的消息头(此时当前写指针指向Block1的起始地址),先将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1,作为该消息的序列号。
步骤103:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
判定消息池中的第一空白内存块Block1有足够的空间存储待写入的消息时,在Block1的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址开始写入该消息的消息体(此时当前写指针指向Block1的起始地址)。
步骤104:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤105:目的处理器定时从消息池中读取消息。
目的处理器根据预先设置的阈值,定时对消息池进行读操作,例如,当源处理器与目的处理器之间通信比较频繁时,可将阈值预先设置为5ms,即目的处理器每隔5ms,就读一次消息池中的消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如果否,则从消息池管理区中的当前读指针所指的地址开始读取。读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件:
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度,读取该消息的消息体。
步骤106:读完消息后,更新读指针。
该消息读取完毕后,更新消息池的消息池管理区中的当前读指针,即将当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息池的起始地址。
预先设置的条件是指同时满足以下三个条件:
(1)当原读指针小于写指针时,新读指针小于等于写指针;
(2)当原读指针大于写指针时,新读指针指向的地址在消息池的地址范围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,定时从消息池中读取消息,因此能够实现嵌入式系统中多处理器间的通信。
实施例2、消息池在源处理器中,消息写入Block2,先写消息头,再写消息体,定时读取,读取后设置标志位。
参见图4所示,本实施例的步骤流程如下。
步骤201:在源处理器的内存中分配消息池。
在源处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消息池,并将分配信息通知到源处理器和目的处理器。
步骤202:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Block1没有足够的空间存储待写入的消息,则放弃Block1。
由于消息池是一个循环缓冲器(buffer),继续判断Block2是否有足够的空间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则从Block2的起始地址(即消息池的起始地址)开始,写入该消息的消息头,先将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1,作为该消息的序列号,并在Block1的起始地址写入跳转标志。
步骤203:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Block1没有足够的空间存储待写入的消息,则放弃Block1。
由于消息池是一个循环缓冲器(buffer),继续判断Block2是否有足够的空间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则在Block2的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址开始写入该消息的消息体。
步骤204:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤205:目的处理器定时从消息池中读取消息。
目的处理器根据预先设置的阈值,定时对消息池进行读操作,例如,当源处理器与目的处理器之间通信比较频繁时,可将阈值预先设置为5ms,即目的处理器每隔5ms,就读一次消息池中的消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如果否,则从消息池管理区中的当前读指针所指的地址开始读取,当读到跳转标志时,将当前读指针指向消息池的起始地址,再从消息池的起始地址开始读取。
读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件:
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度,读取该消息的消息体。
步骤206:读完消息后设置标志位,并更新读指针。
该消息读取完毕后,将该消息的消息头中的标志位设置为空闲,即存储该消息的内存空间被释放,并更新消息池的消息池管理区中的当前读指针,即将当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息池的起始地址。
预先设置的条件是指同时满足以下三个条件:
(1)当原读指针小于写指针时,新读指针小于等于写指针;
(2)当原读指针大于写指针时,新读指针指向的地址在消息池的地址范围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,定时从消息池中读取消息,因此能够实现嵌入式系统中多处理器间的通信。
实施例3、消息池在源处理器中,消息写入Block1,先写消息体,再写消息头,空闲时读取,读取后设置标志位。
参见图5所示,本实施例的步骤流程如下。
步骤301:在源处理器的内存中分配消息池。
在源处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消息池,并将分配信息通知到源处理器和目的处理器。
步骤302:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
判定消息池中的第一空白内存块Block1有足够的空间存储待写入的消息时,在Block1的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址开始写入该消息的消息体(此时当前写指针指向Block1的起始地址)。
步骤303:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息。
本实施例假设消息池中的第一空白内存块Block1有足够的空间存储待写入的消息,则从Block1的起始地址开始写入该消息的消息头(此时当前写指针指向Block1的起始地址),先将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1,作为该消息的序列号。
步骤304:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤305:目的处理器空闲时从消息池中读取消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如果否,则从消息池管理区中的当前读指针所指的地址开始读取。读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件:
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度,读取该消息的消息体。
步骤306:读完消息后设置标志位,并更新读指针。
该消息读取完毕后,将该消息的消息头中的标志位设置为空闲,即存储该消息的内存空间被释放,并更新消息池的消息池管理区中的当前读指针,即将当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息池的起始地址。
预先设置的条件是指同时满足以下三个条件:
(1)当原读指针小于写指针时,新读指针小于等于写指针;
(2)当原读指针大于写指针时,新读指针指向的地址在消息池的地址范围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,空闲时从消息池中读取消息,因此能够实现嵌入式系统中多处理器间的通信。
实施例4、消息池在源处理器中,消息写入Block2,先写消息体,再写消息头,空闲时读取,读取后不设置标志位。
参见图6所示,本实施例的步骤流程如下。
步骤401:在源处理器的内存中分配消息池。
在源处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消息池,并将分配信息通知到源处理器和目的处理器。
步骤402:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Block1没有足够的空间存储待写入的消息,则放弃Block1。
由于消息池是一个循环缓冲器(buffer),继续判断Block2是否有足够的空间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则在Block2的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址开始写入该消息的消息体。
步骤403:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Block1没有足够的空间存储待写入的消息,则放弃Block1。
由于消息池是一个循环缓冲器(buffer),继续判断Block2是否有足够的空间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则从Block2的起始地址(即消息池的起始地址)开始,写入该消息的消息头,先将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1,作为该消息的序列号,并在Block1的起始地址写入跳转标志。
步骤404:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤405:目的处理器空闲时从消息池中读取消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如果否,则从消息池管理区中的当前读指针所指的地址开始读取,当读到跳转标志时,将当前读指针指向消息池的起始地址,再从消息池的起始地址开始读取。
读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件:
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度,读取该消息的消息体。
步骤406:读完消息后,更新读指针。
该消息读取完毕后,更新消息池的消息池管理区中的当前读指针,即将当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息池的起始地址。
预先设置的条件是指同时满足以下三个条件:
(1)当原读指针小于写指针时,新读指针小于等于写指针;
(2)当原读指针大于写指针时,新读指针指向的地址在消息池的地址范围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,空闲时从消息池中读取消息,因此能够实现嵌入式系统中多处理器间的通信。
实施例5、消息池在目的处理器中,消息写入Block1,先写消息头,再写消息体,定时读取,读取后设置标志位。
参见图7所示,本实施例的步骤流程如下。
步骤501:在目的处理器的内存中分配消息池。
在目的处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消息池,并将分配信息通知到源处理器和目的处理器。
步骤502:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息。
本实施例假设消息池中的第一空白内存块Block1有足够的空间存储待写入的消息,则从Block1的起始地址开始写入该消息的消息头(此时当前写指针指向Block1的起始地址),先将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1,作为该消息的序列号。
步骤503:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
判定消息池中的第一空白内存块Block1有足够的空间存储待写入的消息时,在Block1的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址开始写入该消息的消息体(此时当前写指针指向Block1的起始地址)。
步骤504:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤505:目的处理器定时从消息池中读取消息。
目的处理器根据预先设置的阈值,定时对消息池进行读操作,例如,当源处理器与目的处理器之间通信比较频繁时,可将阈值预先设置为5ms,即目的处理器每隔5ms,就读一次消息池中的消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如果否,则从消息池管理区中的当前读指针所指的地址开始读取。读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件:
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度,读取该消息的消息体。
步骤506:读完消息后设置标志位,并更新读指针。
该消息读取完毕后,将该消息的消息头中的标志位设置为空闲,即存储该消息的内存空间被释放,并更新消息池的消息池管理区中的当前读指针,即将当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息池的起始地址。
预先设置的条件是指同时满足以下三个条件:
(1)当原读指针小于写指针时,新读指针小于等于写指针;
(2)当原读指针大于写指针时,新读指针指向的地址在消息池的地址范围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起始地址。
本实施例中,在嵌入式系统中目的处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,定时从消息池中读取消息,因此能够实现嵌入式系统中多处理器间的通信。
实施例6、消息池在目的处理器中,消息写入Block2,先写消息头,再写消息体,定时读取,读取后设置标志位。
参见图8所示,本实施例的步骤流程如下。
步骤601:在目的处理器的内存中分配消息池。
在目的处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消息池,并将分配信息通知到源处理器和目的处理器。
步骤602:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Block1没有足够的空间存储待写入的消息,则放弃Block1。
由于消息池是一个循环缓冲器(buffer),继续判断Block2是否有足够的空间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则从Block2的起始地址(即消息池的起始地址)开始,写入该消息的消息头,先将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1,作为该消息的序列号,并在Block1的起始地址写入跳转标志。
步骤603:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Block1没有足够的空间存储待写入的消息,则放弃Block1。
由于消息池是一个循环缓冲器(buffer),继续判断Block2是否有足够的空间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则在Block2的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址开始写入该消息的消息体。
步骤604:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤605:目的处理器定时从消息池中读取消息。
目的处理器根据预先设置的阈值,定时对消息池进行读操作,例如,当源处理器与目的处理器之间通信比较频繁时,可将阈值预先设置为5ms,即目的处理器每隔5ms,就读一次消息池中的消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如果否,则从消息池管理区中的当前读指针所指的地址开始读取,当读到跳转标志时,将当前读指针指向消息池的起始地址,再从消息池的起始地址开始读取。
读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件:
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度,读取该消息的消息体。
步骤606:读完消息后设置标志位,并更新读指针。
该消息读取完毕后,将该消息的消息头中的标志位设置为空闲,即存储该消息的内存空间被释放,并更新消息池的消息池管理区中的当前读指针,即将当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息池的起始地址。
预先设置的条件是指同时满足以下三个条件:
(1)当原读指针小于写指针时,新读指针小于等于写指针;
(2)当原读指针大于写指针时,新读指针指向的地址在消息池的地址范围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起始地址。
本实施例中,在嵌入式系统中源处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,定时从消息池中读取消息,因此能够实现嵌入式系统中多处理器间的通信。
实施例7、消息池在目的处理器中,消息写入Block1,先写消息体,再写消息头,空闲时读取,读取后不设置标志位。
参见图9所示,本实施例的步骤流程如下。
步骤701:在目的处理器的内存中分配消息池。
在目的处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消息池,并将分配信息通知到源处理器和目的处理器。
步骤702:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
判定消息池中的第一空白内存块Block1有足够的空间存储待写入的消息时,在Block1的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址开始写入该消息的消息体(此时当前写指针指向Block1的起始地址)。
步骤703:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息。
本实施例假设消息池中的第一空白内存块Block1有足够的空间存储待写入的消息,则从Block1的起始地址开始写入该消息的消息头(此时当前写指针指向Block1的起始地址),先将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1,作为该消息的序列号。
步骤704:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤705:目的处理器空闲时从消息池中读取消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如果否,则从消息池管理区中的当前读指针所指的地址开始读取。读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件:
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度,读取该消息的消息体。
步骤706:读完消息后,更新读指针。
该消息读取完毕后,更新消息池的消息池管理区中的当前读指针,即将当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息池的起始地址。
预先设置的条件是指同时满足以下三个条件:
(1)当原读指针小于写指针时,新读指针小于等于写指针;
(2)当原读指针大于写指针时,新读指针指向的地址在消息池的地址范围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起始地址。
本实施例中,在嵌入式系统中目的处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,空闲时从消息池中读取消息,因此能够实现嵌入式系统中多处理器间的通信。
实施例8、消息池在目的处理器中,消息写入Block2,先写消息体,再写消息头,空闲时读取,读取后设置标志位。
参见图10所示,本实施例的步骤流程如下。
步骤801:在目的处理器的内存中分配消息池。
在目的处理器中开辟一段内存空间,作为源处理器和目的处理器的共享内存区,在该共享内存区中分配内存作为源处理器和目的处理器之间通信专用的消息池,并将分配信息通知到源处理器和目的处理器。
步骤802:将待写入消息的消息体写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Block1没有足够的空间存储待写入的消息,则放弃Block1。
由于消息池是一个循环缓冲器(buffer),继续判断Block2是否有足够的空间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则在Block2的起始地址上偏移消息头的长度(消息头的长度为固定值),从偏移后的地址开始写入该消息的消息体。
步骤803:将待写入消息的消息头写入消息池。
首先判断消息池的消息池管理区中消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则继续后续流程。
当Block1存在(此时消息池的消息池管理区中的写指针指向Block1的起始地址)时,计算Block1的长度,并根据待写入消息的长度,判断Block1是否有足够的空间存储该消息,本实施例假设消息池中的第一空白内存块Blockl没有足够的空间存储待写入的消息,则放弃Blockl。
由于消息池是一个循环缓冲器(buffer),继续判断Block2是否有足够的空间存储该消息,如果否,则丢弃该消息,并反馈异常指令;如果是,则从Block2的起始地址(即消息池的起始地址)开始,写入该消息的消息头,先将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将已写入消息池的消息的序列号的最大值加1,作为该消息的序列号,并在Block1的起始地址写入跳转标志。
步骤804:消息写完后,更新写指针。
该消息写完后,即将该消息的消息体和消息头都写入消息池后,更新消息池的消息池管理区中的写指针,即将当前写指针滑过(或跳过)消息池中已写入消息的内存空间,指向下一个能够写入消息的地址。
更新写指针后,判断更新后的写指针是否指向消息池的结尾地址,如果是,则修改该写指针,将其指向消息池的起始地址;如果否,则不作处理。
步骤805:目的处理器空闲时从消息池中读取消息。
首先进行合法性判断,具体的,先判断消息池状态标志是否为1,如果否(即当前消息池处于不可用的状态),则反馈异常指令;如果是(即当前消息池处于可用的状态),则判断消息池是否为空,如果是,则反馈异常指令;如果否,则从消息池管理区中的当前读指针所指的地址开始读取,当读到跳转标志时,将当前读指针指向消息池的起始地址,再从消息池的起始地址开始读取。
读取时先读取消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
读取条件是指同时满足以下四个条件:
条件一、该消息头中的标志位为有效;
条件二、该消息的类型与预先设置的消息类型相符;
条件三、该消息的长度小于预先设置的长度;
条件四、该消息的长度与其类型相符。
具体的,先判断该消息的消息头中标志位是否为有效,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的类型是否与预先设置的消息类型相符,如果否,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果是,则继续判断该消息的长度是否超过预先设置的阈值,如果是,则反馈异常指令,并进行消息池复位,即将读指针和写指针均指向消息池的起始地址;如果否,则当判定该消息的长度与类型相符时,根据该消息的长度,读取该消息的消息体。
步骤806:读完消息后设置标志位,并更新读指针。
该消息读取完毕后,将该消息的消息头中的标志位设置为空闲,即存储该消息的内存空间被释放,并更新消息池的消息池管理区中的当前读指针,即将当前读指针滑过(或跳过)已读消息的内存空间,指向下一个可以读取消息的地址。
接下来,判断更新后的读指针是否满足预先设置的条件,如果是,则不作处理;如果否,则反馈异常指令,并进行复位,将读指针和写指针均指向消息池的起始地址。
预先设置的条件是指同时满足以下三个条件:
(1)当原读指针小于写指针时,新读指针小于等于写指针;
(2)当原读指针大于写指针时,新读指针指向的地址在消息池的地址范围内;
(3)当新读指针指向消息池的结尾地址时,将新读指针指向消息池的起始地址。
本实施例中,在嵌入式系统中目的处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器。源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,空闲时从消息池中读取消息,因此能够实现嵌入式系统中多处理器间的通信。
综上所述,本发明实施例可应用于嵌入式系统中任意两个处理器之间的通信,在嵌入式系统中的源处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器,源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,定时或空闲时从消息池中读取消息;或
在嵌入式系统中的目的处理器的内存中分配消息池,并将分配信息通知到源处理器和目的处理器,源处理器通过写操作将待发送到目的处理器的消息存入消息池,目的处理器通过读操作,定时或空闲时从消息池中读取消息,因此本发明实施例能够实现嵌入式系统中多处理器间的通信。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (17)

1.一种多处理器间通信的方法,其特征在于,包括下列步骤:
从目的处理器或源处理器的内存中分配消息池,将该消息池作为源处理器和目的处理器的共享内存区,并将所述消息池的分配信息通知所述源处理器和目的处理器,源处理器通过写操作将待发送到目的处理器的消息存入消息池,其中,所述消息池中包括消息池管理区;
目的处理器根据预设的时间间隔或空闲时对所述消息池进行读操作从消息池中读取消息,其中,消息池管理区中的消息池状态为可用且所述消息池中存储有消息时,从所述消息池管理区中的当前读指针所指的地址开始读取,若读到跳转标志,则从所述消息池的起始地址开始读取;读取时先读取所述消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
2.如权利要求1所述的方法,其特征在于,所述消息包括消息头,将消息头存入消息池,包括下列步骤:
所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用时,则在判定所述消息池中的第一空白内存块Block1有足够的空间存储待写入的消息时,从Block1的起始地址开始写入该消息的消息头。
3.如权利要求1所述的方法,其特征在于,所述消息包括消息头,将消息头存入消息池,包括下列步骤:
所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用时,则在判定所述消息池的第一空白内存块Block1不足以存储待写入的消息时,进一步判定所述消息池的第二空白内存块Block2有足够的空间存储该消息时,从Block2的起始地址开始写入该消息的消息头,并在Block1的起始地址写入跳转标志。
4.如权利要求2或3所述的方法,其特征在于,所述从起始地址开始写入所述消息的消息头,包括下列步骤:
将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将所述消息池中已写入消息的序列号最大值加1作为该消息的序列号。
5.如权利要求1所述的方法,其特征在于,将所述消息的消息体存入消息池,包括下列步骤:
所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用时,则在判定所述消息池的第一空白内存块Block1有足够的空间存储待写入的消息时,在Block1的起始地址上偏移消息头的长度,从偏移后的地址开始写入该消息的消息体。
6.如权利要求1所述的方法,其特征在于,将所述消息的消息体存入消息池,包括下列步骤:
所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用时,则在判定所述消息池的第一空白内存块Block1不足以存储待写入的消息时,进一步判定所述消息池的第二空白内存块Block2有足够的空间存储该消息时,在Block2的起始地址上偏移消息头的长度,从偏移后的地址开始写入该消息的消息体。
7.如权利要求1所述的方法,其特征在于,所述读取条件是指同时满足以下四个条件:
所述消息头中的标志位为有效;
该消息的类型与预先设置的消息类型相符;
该消息的长度小于预先设置的长度;
该消息的长度与其类型相符。
8.如权利要求1所述的方法,其特征在于,所述消息的消息体读取完毕后,将所述读指针指向下一个读取地址,以更新所述读指针;或
所述消息的消息体读取完毕后,将该消息的消息头中的标志位设置为空闲,并将所述读指针指向下一个读取地址,以更新所述读指针。
9.一种多处理器间通信的系统,包括源处理器和目的处理器,其特征在于,
所述源处理器,用于从自身的内存中分配消息池,将该消息池作为源处理器和目的处理器的共享内存区,并将所述消息池的分配信息通知目的处理器,并通过写操作将待发送到所述目的处理器的消息存入消息池,其中所述消息池为相互通信的源处理器和目的处理器所对应的消息池,其中,所述消息池中包括消息池管理区;
所述目的处理器,用于根据预设的时间间隔或空闲时对所述消息池进行读操作从消息池中读取消息,其中,消息池管理区中的消息池状态为可用且所述消息池中存储有消息时,从所述消息池管理区中的当前读指针所指的地址开始读取,若读到跳转标志,则从所述消息池的起始地址开始读取;读取时先读取所述消息的消息头,判定该消息头满足读取条件,则根据该消息头中的消息长度读取该消息的消息体。
10.如权利要求9所述的系统,其特征在于,所述目的处理器还用于从自身内存中分配所述消息池,并将分配信息通知到所述源处理器。
11.如权利要求9所述的系统,其特征在于,所述消息包括消息头,所述源处理器将消息头存入消息池包括:
所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用时,则在判定所述消息池中的第一空白内存块Block1有足够的空间存储待写入的消息时,所述源处理器从Block1的起始地址开始写入该消息的消息头。
12.如权利要求9所述的系统,其特征在于,所述消息包括消息头,所述源处理器将消息头存入消息池包括:
所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用时,则在判定所述消息池的第一空白内存块Block1不足以存储待写入的消息时,进一步判定所述消息池的第二空白内存块Block2有足够的空间存储该消息时,所述源处理器从Block2的起始地址开始写入该消息的消息头,并在Block1的起始地址写入跳转标志。
13.如权利要求11或12所述的系统,其特征在于,所述源处理器所述从起始地址开始写入所述消息的消息头包括:
所述源处理器将该消息的消息头中的标志位设置为有效,再写入该消息的类型和长度,并将所述消息池中已写入消息的序列号最大值加1作为该消息的序列号。
14.如权利要求9所述的系统,其特征在于,所述源处理器将所述消息的消息体存入消息池包括:
所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用时,则在判定所述消息池的第一空白内存块Block1有足够的空间存储待写入的消息时,在Block1的起始地址上偏移消息头的长度,所述源处理器从偏移后的地址开始写入该消息的消息体。
15.如权利要求9所述的系统,其特征在于,所述源处理器将所述消息的消息体存入消息池包括:
所述消息池中包括消息池管理区,消息池管理区中的消息池状态为可用时,则在判定所述消息池的第一空白内存块Block1不足以存储待写入的消息时,进一步判定所述消息池的第二空白内存块Block2有足够的空间存储该消息时,在Block2的起始地址上偏移消息头的长度,所述源处理器从偏移后的地址开始写入该消息的消息体。
16.如权利要求9所述的系统,其特征在于,所述读取条件是指同时满足以下四个条件:
所述消息头中的标志位为有效;
该消息的类型与预先设置的消息类型相符;
该消息的长度小于预先设置的长度;
该消息的长度与其类型相符。
17.如权利要求16所述的系统,其特征在于,所述目的处理器读取所述消息的消息体完毕后,将所述读指针指向下一个读取地址,以更新所述读指针;或
所述目的处理器读取所述消息的消息体完毕后,将该消息的消息头中的标志位设置为空闲,并将所述读指针指向下一个读取地址,以更新所述读指针。
CN2007101985068A 2007-12-11 2007-12-11 一种多处理器间通信的方法及系统 Active CN101178701B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2007101985068A CN101178701B (zh) 2007-12-11 2007-12-11 一种多处理器间通信的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2007101985068A CN101178701B (zh) 2007-12-11 2007-12-11 一种多处理器间通信的方法及系统

Publications (2)

Publication Number Publication Date
CN101178701A CN101178701A (zh) 2008-05-14
CN101178701B true CN101178701B (zh) 2010-07-21

Family

ID=39404959

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2007101985068A Active CN101178701B (zh) 2007-12-11 2007-12-11 一种多处理器间通信的方法及系统

Country Status (1)

Country Link
CN (1) CN101178701B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI489279B (zh) 2013-11-27 2015-06-21 Realtek Semiconductor Corp 虛擬實體位址轉換系統以及虛擬實體位址轉換系統的管理方法
CN104699633B (zh) * 2013-12-04 2019-04-23 瑞昱半导体股份有限公司 虚拟物理地址转换系统及其管理方法
CN105024904A (zh) * 2014-04-17 2015-11-04 上海米思软件科技有限公司 一种消息发送处理方法
CN104462008A (zh) * 2014-12-05 2015-03-25 三星半导体(中国)研究开发有限公司 共享物理内存的多处理器通信系统及其通信方法
CN106468559B (zh) * 2015-08-20 2019-10-22 高德信息技术有限公司 一种导航语音播报方法及装置
CN108363618A (zh) * 2018-01-24 2018-08-03 华为技术有限公司 一种进程处理的方法和装置
CN108829631A (zh) * 2018-04-27 2018-11-16 江苏华存电子科技有限公司 一种提升多核处理器的信息管理方法
WO2020133841A1 (en) * 2018-12-28 2020-07-02 Huawei Technologies Co., Ltd. Apparatus and method for locking pcie network having non-transparent bridging
CN110309098A (zh) * 2019-06-27 2019-10-08 上海金卓网络科技有限公司 一种处理器间的交互控制方法、装置、设备及存储介质
CN110825690B (zh) * 2019-11-14 2022-03-15 北京华捷艾米科技有限公司 多核处理器的核间通信方法及装置

Also Published As

Publication number Publication date
CN101178701A (zh) 2008-05-14

Similar Documents

Publication Publication Date Title
CN101178701B (zh) 一种多处理器间通信的方法及系统
CN102541468B (zh) 虚拟化环境下的脏数据回写系统
CN101051280A (zh) 智能卡嵌入式操作系统及其控制方法
CN101916180A (zh) Risc处理器中执行寄存器类型指令的方法和其系统
CN101872314A (zh) 用于多处理器的动态调度中断控制器
CN103279428B (zh) 一种显式的面向流应用的多核Cache一致性主动管理方法
CN102970202A (zh) 基于抢占式策略的1553b总线通信方法
CN101359321A (zh) 一种实现处理器相互通讯的方法及装置
CN110362450A (zh) 一种日志数据采集方法、装置及计算机可读存储介质
CN102419734A (zh) 一种数据存储的方法及装置
CN103559079A (zh) 一种基于共享内存的数据存取方法及装置
CN109062857A (zh) 一种能高速实现多处理器间通信的新型消息控制器及其通信方法
CN111208985B (zh) 基于生产者消费者模型的数据处理方法、系统及存储介质
CN112948287A (zh) 一种基于Hashmap缓存机制的SD卡读写方法及系统
CN102117261B (zh) 一种芯片内部处理器之间的通信方法
CN103389893A (zh) 一种配置寄存器读写方法及装置
CN1851651A (zh) 嵌入式sram操作系统进程优先权调度的实现方法
CN112817516A (zh) 数据读写控制方法、装置、设备和存储介质
CN108255424B (zh) 一种NVMe固态硬盘IO响应延迟的保障方法
CN102467410B (zh) 一种通用流程调度引擎的控制方法、装置及终端
CN102103490B (zh) 一种利用流水处理提高内存效率的方法
CN104182280A (zh) 面向混合主存嵌入式系统的低能耗rm实时任务调度方法
CN103885427B (zh) 一种基于rtems操作系统的嵌入式微机保护方法
CN1333346C (zh) 一种访问文件的方法
CN103377034A (zh) 指令预送方法及装置、指令管理系统、运算核心

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant