欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種多處理器間通信的方法及系統(tǒng)的制作方法

文檔序號:6614955閱讀:208來源:國知局
專利名稱:一種多處理器間通信的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)和通信領(lǐng)域,特別是涉及一種多處理器間通信的方
法及系統(tǒng)。
背景技術(shù)
在現(xiàn)代移動(dòng)通信系統(tǒng)中,嵌入式系統(tǒng)與其他類型的系統(tǒng)相比具備以下優(yōu)
點(diǎn)
(1) 對實(shí)時(shí)多任務(wù)有很強(qiáng)的支持能力,能完成多任務(wù)并且有較短的中斷 響應(yīng)時(shí)間,從而使內(nèi)部的代碼和實(shí)時(shí)內(nèi)核心的執(zhí)行時(shí)間減少到最低限度。
(2) 具有功能很強(qiáng)的存儲(chǔ)區(qū)保護(hù)功能。由于嵌入式系統(tǒng)的軟件結(jié)構(gòu)已模 塊化,而為了避免在軟件模塊之間出現(xiàn)錯(cuò)誤的交叉作用,需要設(shè)計(jì)強(qiáng)大的存儲(chǔ) 區(qū)保護(hù)功能,同時(shí)也有利于軟件診斷。
(3) 體積小、集成度高、功耗低等。嵌入式系統(tǒng)使用閃存(FlashMemory) 作為存儲(chǔ)介質(zhì),因此結(jié)構(gòu)緊湊,體積微小;面向特定應(yīng)用,為特定用戶群設(shè)計(jì), 能夠把通用CPU中許多由板卡完成的任務(wù)集成在芯片內(nèi)部,因此集成度高; 設(shè)計(jì)趨于小型化,移動(dòng)能力大大增強(qiáng),跟網(wǎng)絡(luò)的耦合也越來越緊密,功耗也低。
(4) 執(zhí)行速度高、可靠性強(qiáng)。嵌入式系統(tǒng)中的軟件一般都固化在存儲(chǔ)器 芯片或單片機(jī)本身中,而不是存貯于磁盤等載體中,因此提高了執(zhí)行速度、也 增強(qiáng)了系統(tǒng)的可靠性。
(5) 性能高、竟?fàn)幜?qiáng)。嵌入式系統(tǒng)以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基 礎(chǔ),并且軟硬件可裁剪,具有軟件代碼小、高度自動(dòng)化、響應(yīng)速度快等特點(diǎn)。 嵌入式系統(tǒng)的硬件和軟件都經(jīng)過高效率的設(shè)計(jì),量體裁衣、去除冗余,這樣在 同樣的硅片面積上實(shí)現(xiàn)的性能更高,在具體應(yīng)用中對處理器的選擇更具有竟?fàn)?br> 力。嵌入式系統(tǒng)一般用于實(shí)現(xiàn)對其他設(shè)備的控制、監(jiān)視或管理等功能,尤其適 用于要求實(shí)時(shí)和多任務(wù)的系統(tǒng)。
鑒于上述優(yōu)點(diǎn),嵌入式系統(tǒng)在目前的應(yīng)用中用得越來越廣泛,適用于對功 能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng),尤其在功能復(fù) 雜、系統(tǒng)龐大的應(yīng)用中顯得愈來愈重要。
發(fā)明人在發(fā)明過程中發(fā)現(xiàn), 一個(gè)大型復(fù)雜的嵌入式系統(tǒng)中有多個(gè)處理器, 以提高系統(tǒng)的實(shí)時(shí)運(yùn)算能力,來完成算法復(fù)雜的基帶處理。但是,嵌入式系統(tǒng) 的多個(gè)處理器要協(xié)同并行工作,就必須實(shí)現(xiàn)系統(tǒng)中多個(gè)處理器間的通信。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種多處理器間通信的方法及系統(tǒng),以實(shí)現(xiàn)嵌入式系統(tǒng) 中多處理器間的通信。
本發(fā)明實(shí)施例的方法包括
源處理器通過寫操作將待發(fā)送到目的處理器的消息存入消息池; 目的處理器通過讀操作從消息池中讀取消息。 本發(fā)明實(shí)施例的系統(tǒng)包括
其中的源處理器,用于通過寫操作將待發(fā)送到目的處理器的消息存入消息
池;
其中的目的處理器,用于通過讀操作從所述消息池中讀取消息。 本發(fā)明實(shí)施例中,嵌入式系統(tǒng)中的源處理器通過寫操作將待發(fā)送到目的處
理器的消息存入消息池,目的處理器通過讀操作從消息池中讀取消息,因此本
發(fā)明實(shí)施例能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。


圖1為本發(fā)明實(shí)施例的方法步驟流程圖; 圖2為本發(fā)明實(shí)施例的系統(tǒng)結(jié)構(gòu)示意圖3為本發(fā)明實(shí)施例1的步驟流程圖; 圖4為本發(fā)明實(shí)施例2的步驟流程圖; 圖5為本發(fā)明實(shí)施例3的步驟流程圖; 圖6為本發(fā)明實(shí)施例4的步驟流程圖; 圖7為本發(fā)明實(shí)施例5的步驟流程圖; 圖8為本發(fā)明實(shí)施例6的步驟流程圖; 圖9為本發(fā)明實(shí)施例7的步驟流程圖; 圖10為本發(fā)明實(shí)施例8的步驟流程圖。
具體實(shí)施例方式
為了實(shí)現(xiàn)嵌入式系統(tǒng)中多處理器間的通信,本發(fā)明實(shí)施例提供一種多處理 器間通信的方法及系統(tǒng),以下分別簡要概述。
本發(fā)明實(shí)施例提供一種多處理器間通信的方法,參見圖l所示,包括下列 主要步驟
51、 源處理器通過寫操作將待發(fā)送到目的處理器的消息存入消息池;
52、 目的處理器通過讀操作從消息池中讀取消息。 本發(fā)明實(shí)施例還提供一種多處理器間通信的系統(tǒng),參見圖2所示,包括 其中的源處理器,用于通過寫操作將待發(fā)送到目的處理器的消息存入消息
池;
其中的目的處理器,用于通過讀操作從所述消息池中讀取消息。 本實(shí)施例中每個(gè)消息包括消息體和消息頭,消息體為通信雙方處理器之間 實(shí)際要傳輸?shù)臄?shù)據(jù);消息頭包括消息標(biāo)志位、消息類型、消息長度和消息序列 號。其中,消息標(biāo)志位,用于標(biāo)記消息的當(dāng)前狀態(tài),可以分為兩種有效和空 閑;相互通信的處理器可以預(yù)先設(shè)定允許通信的消息類型;消息長度表示消息 實(shí)體的長度,與消息類型有關(guān),特定類型的消息長度一定;消息序列號用于表 示消息池中寫入的消息的序號,每往消息池中寫入一條消息時(shí),消息序列號增
加1。
本發(fā)明實(shí)施例的消息池中還包括消息池管理區(qū),用于管理消息池。消息池 管理區(qū)中還包括消息池狀態(tài)標(biāo)志、寫指針和讀指針。其中,消息池狀態(tài)標(biāo)志用 于表示當(dāng)前消息池是否處于可用的狀態(tài),可以預(yù)先定義消息池狀態(tài)標(biāo)志的取值 所表示的意義,例如,消息池狀態(tài)標(biāo)志為O,則表示當(dāng)前消息池處于不可用的
狀態(tài);消息池狀態(tài)標(biāo)志為1,則表示當(dāng)前消息池處于可用的狀態(tài);也可以如此 定義消息池狀態(tài)標(biāo)志為1,則表示當(dāng)前消息池處于不可用的狀態(tài);消息池狀 態(tài)標(biāo)志為0,則表示當(dāng)前消息池處于可用的狀態(tài);寫指針用于記錄將要寫入消 息的起始地址,每次往消息池中寫完一條消息后,寫指針就要更新一次;讀指 針用于記錄將要讀取消息的起始地址,每從消息池中讀完一條消息,讀指針就 要更新一次。
本發(fā)明實(shí)施例中的消息池是一個(gè)循環(huán)緩沖器(buffer),假設(shè)消息池中的第 一空白內(nèi)存塊Blockl靠近消息池的底部,第二空白內(nèi)存塊Block2靠近消息池 的頂部;本發(fā)明實(shí)施例預(yù)先定義消息池狀態(tài)標(biāo)志為0,則表示當(dāng)前消息池處 于不可用的狀態(tài);消息池狀態(tài)標(biāo)志為1,則表示當(dāng)前消息池處于可用的狀態(tài)。
下面以8個(gè)實(shí)施例來詳細(xì)描述本發(fā)明實(shí)施例。
實(shí)施例l、消息池在源處理器中,消息寫入Blockl,先寫消息頭,再寫消 息體,定時(shí)讀取,讀取后不設(shè)置標(biāo)志位。
參見圖3所示,本實(shí)施例的步驟流程如下。 步驟101:在源處理器的內(nèi)存中分配消息池。
在源處理器中開辟一段內(nèi)存空間,作為源處理器和目的處理器的共享內(nèi)存 區(qū),在該共享內(nèi)存區(qū)中分配內(nèi)存作為源處理器和目的處理器之間通信專用的消
息池,并將分配信息通知到源處理器和目的處理器。 步驟102:將待寫入消息的消息頭寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處
于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息。
本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫 入的消息,則從Blockl的起始地址開始寫入該消息的消息頭(此時(shí)當(dāng)前寫指 針指向Blockl的起始地址),先將該消息的消息頭中的標(biāo)志位設(shè)置為有效,再 寫入該消息的類型和長度,并將已寫入消息池的消息的序列號的最大值加1, 作為該消息的序列號。
步驟103:將待寫入消息的消息體寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
判定消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫入的消息 時(shí),在Blockl的起始地址上偏移消息頭的長度(消息頭的長度為固定值),從 偏移后的地址開始寫入該消息的消息體(此時(shí)當(dāng)前寫指針指向Blockl的起始 地址)。
步驟104:消息寫完后,更新寫指針。
該消息寫完后,即將該消息的消息體和消息頭都寫入消息池后,更新消息 池的消息池管理區(qū)中的寫指針,即將當(dāng)前寫指針滑過(或跳過)消息池中已寫 入消息的內(nèi)存空間,指向下一個(gè)能夠?qū)懭胂⒌牡刂贰?br> 更新寫指針后,判斷更新后的寫指針是否指向消息池的結(jié)尾地址,如果是, 則修改該寫指針,將其指向消息池的起始地址;如果否,則不作處理。
步驟105:目的處理器定時(shí)從消息池中讀取消息。
目的處理器根據(jù)預(yù)先設(shè)置的閾值,定時(shí)對消息池進(jìn)行讀操:作,例如,當(dāng)源 處理器與目的處理器之間通信比較頻繁時(shí),可將閾值預(yù)先設(shè)置為5ms,即目的處理器每隔5ms,就讀一次消息池中的消息。
首先進(jìn)行合法性判斷,具體的,先判斷消息池狀態(tài)標(biāo)志是否為1,如果否
(即當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息 池處于可用的狀態(tài)),則判斷消息池是否為空,如果是,則反饋異常指令;如 果否,則從消息池管理區(qū)中的當(dāng)前讀指針?biāo)傅牡刂烽_始讀取。讀取時(shí)先讀取 消息的消息頭,判定該消息頭滿足讀取條件,則根據(jù)該消息頭中的消息長度讀 取該消息的消息體。
讀取條件是指同時(shí)滿足以下四個(gè)條件
條件一、該消息頭中的標(biāo)志位為有效;
條件二 、該消息的類型與預(yù)先設(shè)置的消息類型相符;
條件三、該消息的長度小于預(yù)先設(shè)置的長度;
條件四、該消息的長度與其類型相符。
具體的,先判斷該消息的消息頭中標(biāo)志位是否為有效,如果否,則反饋異 常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起始地址; 如果是,則繼續(xù)判斷該消息的類型是否與預(yù)先設(shè)置的消息類型相符,如果否, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果是,則繼續(xù)判斷該消息的長度是否超過預(yù)先設(shè)置的閾值,如果是, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果否,則當(dāng)判定該消息的長度與類型相符時(shí),根據(jù)該消息的長度, 讀取該消息的消息體。
步驟106:讀完消息后,更新讀指針。
該消息讀取完畢后,更新消息池的消息池管理區(qū)中的當(dāng)前讀指針,即將當(dāng) 前讀指針滑過(或跳過)已讀消息的內(nèi)存空間,指向下一個(gè)可以讀取消息的地址。
接下來,判斷更新后的讀指針是否滿足預(yù)先設(shè)置的條件,如果是,則不作 處理;如果否,則反饋異常指令,并進(jìn)行復(fù)位,將讀指針和寫指針均指向消息
池的起始纟也址。
預(yù)先設(shè)置的條件是指同時(shí)滿足以下三個(gè)條件
(1) 當(dāng)原讀指針小于寫指針時(shí),新讀指針小于等于寫指針;
(2) 當(dāng)原讀指針大于寫指針時(shí),新讀指針指向的地址在消息池的地址范
圍內(nèi);
(3) 當(dāng)新讀指針指向消息池的結(jié)尾地址時(shí),將新讀指針指向消息池的起 始地址。
本實(shí)施例中,在嵌入式系統(tǒng)中源處理器的內(nèi)存中分配消息池,并將分配信 息通知到源處理器和目的處理器。源處理器通過寫^喿作將待發(fā)送到目的處理器 的消息存入消息池,目的處理器通過讀操作,定時(shí)從消息池中讀取消息,因此 能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
實(shí)施例2、消息池在源處理器中,消息寫入Block2,先寫消息頭,再寫消 息體,定時(shí)讀取,讀取后設(shè)置標(biāo)志位。
參見圖4所示,本實(shí)施例的步驟流程如下。
步驟201:在源處理器的內(nèi)存中分配消息池。
在源處理器中開辟一段內(nèi)存空間,作為源處理器和目的處理器的共享內(nèi)存 區(qū),在該共享內(nèi)存區(qū)中分配內(nèi)存作為源處理器和目的處理器之間通信專用的消 息池,并將分配信息通知到源處理器和目的處理器。
步驟202:將待寫入消息的消息頭寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息,本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl 沒有足夠的空間存儲(chǔ)待寫入的消息,則放棄Blockl 。由于消息池是一個(gè)循環(huán)緩沖器(buffer),繼續(xù)判斷Block2是否有足夠的空 間存儲(chǔ)該消息,如果否,則丟棄該消息,并反饋異常指令;如果是,則從Block2 的起始地址(即消息池的起始地址)開始,寫入該消息的消息頭,先將該消息 的消息頭中的標(biāo)志位設(shè)置為有效,再寫入該消息的類型和長度,并將已寫入消 息池的消息的序列號的最大值加1,作為該消息的序列號,并在Blockl的起始 地址寫入逸^t標(biāo)志。
步驟203:將待寫入消息的消息體寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息,本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl 沒有足夠的空間存儲(chǔ)待寫入的消息,則放棄Blockl 。
由于消息池是一個(gè)循環(huán)緩沖器(buffer),繼續(xù)判斷Block2是否有足夠的空 間存儲(chǔ)該消息,如果否,則丟棄該消息,并反饋異常指令;如果是,則在Block2 的起始地址上偏移消息頭的長度(消息頭的長度為固定值),從偏移后的地址 開始寫入該消息的消息體。
步驟204:消息寫完后,更新寫指針。
該消息寫完后,即將該消息的消息體和消息頭都寫入消息池后,更新消息 池的消息池管理區(qū)中的寫指針,即將當(dāng)前寫指針滑過(或跳過)消息池中已寫 入消息的內(nèi)存空間,指向下 一 個(gè)能夠?qū)懭胂⒌牡刂贰?br> 更新寫指針后,判斷更新后的寫指針是否指向消息池的結(jié)尾地址,如果是, 則修改該寫指針,將其指向消息池的起始地址;如果否,則不作處理。
步驟205:目的處理器定時(shí)從消息池中讀取消息。
目的處理器根據(jù)預(yù)先設(shè)置的閾值,定時(shí)對消息池進(jìn)行讀操作,例如,當(dāng)源
處理器與目的處理器之間通信比較頻繁時(shí),可將閾值預(yù)先設(shè)置為5ms,即目的 處理器每隔5ms,就讀一次消息池中的消息。
首先進(jìn)行合法性判斷,具體的,先判斷消息池狀態(tài)標(biāo)志是否為1,如果否 (即當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息 池處于可用的狀態(tài)),則判斷消息池是否為空,如果是,則反饋異常指令;如 果否,則從消息池管理區(qū)中的當(dāng)前讀指針?biāo)傅牡刂烽_始讀取,當(dāng)讀到跳轉(zhuǎn)標(biāo) 志時(shí),將當(dāng)前讀指針指向消息池的起始地址,再從消息池的起始地址開始讀取。
讀取時(shí)先讀取消息的消息頭,判定該消息頭滿足讀取條件,則根據(jù)該消息 頭中的消息長度讀取該消息的消息體。
讀取條件是指同時(shí)滿足以下四個(gè)條件
條件一、該消息頭中的標(biāo)志位為有效;
條件二 、該消息的類型與預(yù)先設(shè)置的消息類型相符;
條件三、該消息的長度小于預(yù)先設(shè)置的長度;
條件四、該消息的長度與其類型相符。
具體的,先判斷該消息的消息頭中標(biāo)志位是否為有效,如果否,則反饋異 常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起始地址; 如果是,則繼續(xù)判斷該消息的類型是否與預(yù)先設(shè)置的消息類型相符,如果否, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果是,則繼續(xù)判斷該消息的長度是否超過預(yù)先設(shè)置的閾值,如果是, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果否,則當(dāng)判定該消息的長度與類型相符時(shí),根據(jù)該消息的長度, 讀取該消息的消息體。
步驟206:讀完消息后設(shè)置標(biāo)志位,并更新讀指針。
該消息讀取完畢后,將該消息的消息頭中的標(biāo)志位設(shè)置為空閑,即存儲(chǔ)該 消息的內(nèi)存空間被釋^:,并更新消息池的消息池管理區(qū)中的當(dāng)前讀指針,即將 當(dāng)前讀指針滑過(或跳過)已讀消息的內(nèi)存空間,指向下一個(gè)可以讀取消息的
地址。
接下來,判斷更新后的讀指針是否滿足預(yù)先設(shè)置的條件,如果是,則不作
處理;如果否,則反饋異常指令,并進(jìn)行復(fù)位,將讀指針和寫指針均指向消息 池的起始地址。
預(yù)先設(shè)置的條件是指同時(shí)滿足以下三個(gè)條件
(1) 當(dāng)原讀指針小于寫指針時(shí),新讀指針小于等于寫指針;
(2) 當(dāng)原讀指針大于寫指針時(shí),新讀指針指向的地址在消息池的地址范
圍內(nèi);
(3) 當(dāng)新讀指針指向消息池的結(jié)尾地址時(shí),將新讀指針指向消息池的起 始地址。
本實(shí)施例中,在嵌入式系統(tǒng)中源處理器的內(nèi)存中分配消息池,并將分配信 息通知到源處理器和目的處理器。源處理器通過寫操作將待發(fā)送到目的處理器 的消息存入消息池,目的處理器通過讀操作,定時(shí)從消息池中讀取消息,因此 能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
實(shí)施例3、消息池在源處理器中,消息寫入Blockl,先寫消息體,再寫消 息頭,空閑時(shí)讀取,讀取后設(shè)置標(biāo)志位。
參見圖5所示,本實(shí)施例的步驟流程如下。
步驟301:在源處理器的內(nèi)存中分配消息池。
在源處理器中開辟一段內(nèi)存空間,作為源處理器和目的處理器的共享內(nèi)存 區(qū),在該共享內(nèi)存區(qū)中分配內(nèi)存作為源處理器和目的處理器之間通信專用的消 息池,并將分配信息通知到源處理器和目的處理器。
步驟302:將待寫入消息的消息體寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
判定消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫入的消息
時(shí),在Bl0Ckl的起始地址上偏移消息頭的長度(消息頭的長度為固定值),從
偏移后的地址開始寫入該消息的消息體(此時(shí)當(dāng)前寫指針指向Blockl的起始 地址)。
步驟303:將待寫入消息的消息頭寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息。
本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫 入的消息,則從Blockl的起始地址開始寫入該消息的消息頭(此時(shí)當(dāng)前寫指 針指向Blockl的起始地址),先將該消息的消息頭中的標(biāo)志位設(shè)置為有效,再 寫入該消息的類型和長度,并將已寫入消息池的消息的序列號的最大值加1, 作為該消息的序列號。
步驟304:消息寫完后,更新寫指針。
該消息寫完后,即將該消息的消息體和消息頭都寫入消息池后,更新消息 池的消息池管理區(qū)中的寫指針,即將當(dāng)前寫指針滑過(或跳過)消息池中已寫 入消息的內(nèi)存空間,指向下一個(gè)能夠?qū)懭胂⒌牡刂贰?br> 更新寫指針后,判斷更新后的寫指針是否指向消息池的結(jié)尾地址,如果是, 則修改該寫指針,將其指向消息池的起始地址;如果否,則不作處理。
步驟305:目的處理器空閑時(shí)從消息池中讀取消息。
首先進(jìn)行合法性判斷,具體的,先判斷消息池狀態(tài)標(biāo)志是否為1,如果否 (即當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息 池處于可用的狀態(tài)),則判斷消息池是否為空,如果是,則反饋異常指令;如 果否,則從消息池管理區(qū)中的當(dāng)前讀指針?biāo)傅牡刂烽_始讀:f又。讀取時(shí)先讀取
消息的消息頭,判定該消息頭滿足讀取條件,則根據(jù)該消息頭中的消息長度讀 取該消息的消息體。
讀取條件是指同時(shí)滿足以下四個(gè)條件 條件一、該消息頭中的標(biāo)志位為有效; 條件二 、該消息的類型與預(yù)先設(shè)置的消息類型相符;
條件三、該消息的長度小于預(yù)先設(shè)置的長度; 條件四、該消息的長度與其類型相符。
具體的,先判斷該消息的消息頭中標(biāo)志位是否為有效,如果否,則反饋異 常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起始地址; 如果是,則繼續(xù)判斷該消息的類型是否與預(yù)先設(shè)置的消息類型相符,如果否, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果是,則繼續(xù)判斷該消息的長度是否超過預(yù)先設(shè)置的閾值,如果是, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果否,則當(dāng)判定該消息的長度與類型相符時(shí),根據(jù)該消息的長度, 讀取該消息的消息體。
步驟306:讀完消息后設(shè)置標(biāo)志位,并更新讀指針。
該消息讀取完畢后,將該消息的消息頭中的標(biāo)志位設(shè)置為空閑,即存儲(chǔ)該 消息的內(nèi)存空間被釋放,并更新消息池的消息池管理區(qū)中的當(dāng)前讀指針,即將 當(dāng)前讀指針滑過(或跳過)已讀消息的內(nèi)存空間,指向下一個(gè)可以讀取消息的 地址。
接下來,判斷更新后的讀指針是否滿足預(yù)先設(shè)置的條件,如果是,則不作 處理;如果否,則反饋異常指令,并進(jìn)行復(fù)位,將讀指針和寫指針均指向消息 池的起始地址。
預(yù)先設(shè)置的條件是指同時(shí)滿足以下三個(gè)條件
(1) 當(dāng)原讀指針小于寫指針時(shí),新讀指針小于等于寫指針;
(2) 當(dāng)原讀指針大于寫指針時(shí),新讀指針指向的地址在消息池的地址范圍內(nèi);
(3)當(dāng)新讀指針指向消息池的結(jié)尾地址時(shí),將新讀指針指向消息池的起
始地址。
本實(shí)施例中,在嵌入式系統(tǒng)中源處理器的內(nèi)存中分配消息池,并將分配信
息通知到源處理器和目的處理器。源處理器通過寫揭:作將待發(fā)送到目的處理器 的消息存入消息池,目的處理器通過讀操作,空閑時(shí)從消息池中讀取消息,因 此能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
實(shí)施例4、消息池在源處理器中,消息寫入Block2,先寫消息體,再寫消
息頭,空閑時(shí)讀取,讀取后不設(shè)置標(biāo)志位。
參見圖6所示,本實(shí)施例的步驟流程如下。 步驟401:在源處理器的內(nèi)存中分配消息池。
在源處理器中開辟一段內(nèi)存空間,作為源處理器和目的處理器的共享內(nèi)存 區(qū),在該共享內(nèi)存區(qū)中分配內(nèi)存作為源處理器和目的處理器之間通信專用的消 息池,并將分配信息通知到源處理器和目的處理器。
步驟402:將待寫入消息的消息體寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息,本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl 沒有足夠的空間存儲(chǔ)待寫入的消息,則放棄Blockl。
由于消息池是一個(gè)循環(huán)緩沖器(buffer),繼續(xù)判斷Block2是否有足夠的空 間存儲(chǔ)該消息,如果否,則丟棄該消息,并反饋異常指令;如果是,則在Block2 的起始地址上偏移消息頭的長度(消息頭的長度為固定值),從偏移后的地址 開始寫入該消息的消息體。 步驟403:將待寫入消息的消息頭寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息,本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl 沒有足夠的空間存儲(chǔ)待寫入的消息,則放棄Blockl。
由于消息池是一個(gè)循環(huán)緩沖器(buffer),繼續(xù)判斷Block2是否有足夠的空 間存儲(chǔ)該消息,如果否,則丟棄該消息,并反饋異常指令;如果是,則從Block2 的起始地址(即消息池的起始地址)開始,寫入該消息的消息頭,先將該消息 的消息頭中的標(biāo)志位設(shè)置為有效,再寫入該消息的類型和長度,并將已寫入消 息池的消息的序列號的最大值加1,作為該消息的序列號,并在Blockl的起始 地址寫入3兆轉(zhuǎn)標(biāo)志。
步驟404:消息寫完后,更新寫指針。
該消息寫完后,即將該消息的消息體和消息頭都寫入消息池后,更新消息 池的消息池管理區(qū)中的寫指針,即將當(dāng)前寫指針滑過(或跳過)消息池中已寫 入消息的內(nèi)存空間,指向下一個(gè)能夠?qū)懭胂⒌牡刂贰?br> 更新寫指針后,判斷更新后的寫指針是否指向消息池的結(jié)尾地址,如果是, 則修改該寫指針,將其指向消息池的起始地址;如果否,則不作處理。
步驟405:目的處理器空閑時(shí)從消息池中讀取消息。
首先進(jìn)行合法性判斷,具體的,先判斷消息池狀態(tài)標(biāo)志是否為1,如果否 (即當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息 池處于可用的狀態(tài)),則判斷消息池是否為空,如果是,則反饋異常指令;如 果否,則從消息池管理區(qū)中的當(dāng)前讀指針?biāo)傅牡刂烽_始讀取,當(dāng)讀到跳轉(zhuǎn)標(biāo) 志時(shí),將當(dāng)前讀指針指向消息池的起始地址,再從消息池的起始地址開始讀取。
讀取時(shí)先讀取消息的消息頭,判定該消息頭滿足讀取條件,則根據(jù)該消息 頭中的消息長度讀取該消息的消息體。
讀取條件是指同時(shí)滿足以下四個(gè)條件
條件一、該消息頭中的標(biāo)志位為有效;
條件二、該消息的類型與預(yù)先設(shè)置的消息類型相符;
條件三、該消息的長度小于預(yù)先設(shè)置的長度;
條件四、該消息的長度與其類型相符。
具體的,先判斷該消息的消息頭中標(biāo)志位是否為有效,如果否,則反饋異 常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起始地址; 如果是,則繼續(xù)判斷該消息的類型是否與預(yù)先設(shè)置的消息類型相符,如果否, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果是,則繼續(xù)判斷該消息的長度是否超過預(yù)先設(shè)置的閾值,如果是, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果否,則當(dāng)判定該消息的長度與類型相符時(shí),根據(jù)該消息的長度, 讀取該消息的消息體。
步驟406:讀完消息后,更新讀指針。
該消息讀取完畢后,更新消息池的消息池管理區(qū)中的當(dāng)前讀指針,即將當(dāng) 前讀指針滑過(或跳過)已讀消息的內(nèi)存空間,指向下一個(gè)可以讀取消息的地 址。
接下來,判斷更新后的讀指針是否滿足預(yù)先設(shè)置的條件,如果是,則不作 處理;如果否,則反饋異常指令,并進(jìn)行復(fù)位,將讀指針和寫指針均指向消息 池的起始i也址。
預(yù)先設(shè)置的條件是指同時(shí)滿足以下三個(gè)條件
(1) 當(dāng)原讀指針小于寫指針時(shí),新讀指針小于等于寫指針;
(2) 當(dāng)原讀指針大于寫指針時(shí),新讀指針指向的地址在消息池的地址范
圍內(nèi);
(3)當(dāng)新讀指針指向消息池的結(jié)尾地址時(shí),將新讀指針指向消息池的起
始地址。
本實(shí)施例中,在嵌入式系統(tǒng)中源處理器的內(nèi)存中分配消息池,并將分配信 息通知到源處理器和目的處理器。源處理器通過寫纟喿作將待發(fā)送到目的處理器 的消息存入消息池,目的處理器通過讀操作,空閑時(shí)從消息池中讀取消息,因 此能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
實(shí)施例5、消息池在目的處理器中,消息寫入Blockl,先寫消息頭,再寫 消息體,定時(shí)讀取,讀取后設(shè)置標(biāo)志位。
參見圖7所示,本實(shí)施例的步驟流程如下。 步驟501:在目的處理器的內(nèi)存中分配消息池。
在目的處理器中開辟一段內(nèi)存空間,作為源處理器和目的處理器的共享內(nèi)
消息池,并將分配信息通知到源處理器和目的處理器。 步驟502:將待寫入消息的消息頭寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息。
本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫 入的消息,則從Blockl的起始地址開始寫入該消息的消息頭(此時(shí)當(dāng)前寫指 針指向Blockl的起始地址),先將該消息的消息頭中的標(biāo)志位設(shè)置為有效,再 寫入該消息的類型和長度,并將已寫入消息池的消息的序列號的最大值加1, 作為該消息的序列號。
步驟503:將待寫入消息的消息體寫入消息池。首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即
當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處
于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
判定消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫入的消息 時(shí),在Blockl的起始地址上偏移消息頭的長度(消息頭的長度為固定值),從 偏移后的地址開始寫入該消息的消息體(此時(shí)當(dāng)前寫指針指向Blockl的起始 地址)。
步驟504:消息寫完后,更新寫指針。
該消息寫完后,即將該消息的消息體和消息頭都寫入消息池后,更新消息 池的消息池管理區(qū)中的寫指針,即將當(dāng)前寫指針滑過(或跳過)消息池中已寫 入消息的內(nèi)存空間,指向下 一個(gè)能夠?qū)懭胂⒌牡刂贰?br> 更新寫指針后,判斷更新后的寫指針是否指向消息池的結(jié)尾地址,如果是,
則修改該寫指針,將其指向消息池的起始地址;如果否,則不作處理。 步驟505:目的處理器定時(shí)從消息池中讀取消息。
目的處理器根據(jù)預(yù)先設(shè)置的閾值,定時(shí)對消息池進(jìn)行讀搡作,例如,當(dāng)源 處理器與目的處理器之間通信比較頻繁時(shí),可將閾值預(yù)先設(shè)置為5ms,即目的 處理器每隔5ms,就讀一次消息池中的消息。
首先進(jìn)行合法性判斷,具體的,先判斷消息池狀態(tài)標(biāo)志是否為1,如果否 (即當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息 池處于可用的狀態(tài)),則判斷消息池是否為空,如果是,則反饋異常指令;如 果否,則從消息池管理區(qū)中的當(dāng)前讀指針?biāo)傅牡刂烽_始讀取。讀取時(shí)先讀取 消息的消息頭,判定該消息頭滿足讀取條件,則根據(jù)該消息頭中的消息長度讀 取該消息的消息體。
讀取條件是指同時(shí)滿足以下四個(gè)條件
條件一、該消息頭中的標(biāo)志位為有效;
條件二、該消息的類型與預(yù)先設(shè)置的消息類型相符;
條件三、該消息的長度小于預(yù)先設(shè)置的長度;
條件四、該消息的長度與其類型相符。
具體的,先判斷該消息的消息頭中標(biāo)志位是否為有效,如果否,則反饋異
常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起始地址; 如果是,則繼續(xù)判斷該消息的類型是否與預(yù)先設(shè)置的消息類型相符,如果否, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果是,則繼續(xù)判斷該消息的長度是否超過預(yù)先設(shè)置的閾值,如果是, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果否,則當(dāng)判定該消息的長度與類型相符時(shí),根據(jù)該消息的長度, 讀取該消息的消息體。
步驟506:讀完消息后設(shè)置標(biāo)志位,并更新讀指針。
該消息讀取完畢后,將該消息的消息頭中的標(biāo)志位設(shè)置為空閑,即存儲(chǔ)該 消息的內(nèi)存空間被釋方欠,并更新消息池的消息池管理區(qū)中的當(dāng)前讀指針,即將 當(dāng)前讀指針滑過(或跳過)已讀消息的內(nèi)存空間,指向下一個(gè)可以讀取消息的地址。
接下來,判斷更新后的讀指針是否滿足預(yù)先設(shè)置的條件,如果是,則不作 處理;如果否,則反饋異常指令,并進(jìn)行復(fù)位,將讀指針和寫指針均指向消息 池的起始地址。
預(yù)先設(shè)置的條件是指同時(shí)滿足以下三個(gè)條件
(1) 當(dāng)原讀指針小于寫指針時(shí),新讀指針小于等于寫指針;
(2) 當(dāng)原讀指針大于寫指針時(shí),新讀指針指向的地址在消息池的地址范
圍內(nèi);
(3) 當(dāng)新讀指針指向消息池的結(jié)尾地址時(shí),將新讀指針指向消息池的起 始地址。
本實(shí)施例中,在嵌入式系統(tǒng)中目的處理器的內(nèi)存中分配消息池,并將分配 信息通知到源處理器和目的處理器。源處理器通過寫操作將待發(fā)送到目的處理
器的消息存入消息池,目的處理器通過讀操作,定時(shí)從消息池中讀取消息,因 此能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
實(shí)施例6、消息池在目的處理器中,消息寫入Block2,先寫消息頭,再寫 消息體,定時(shí)讀取,讀取后設(shè)置標(biāo)志位。
參見圖8所示,本實(shí)施例的步驟流程如下。 步驟601:在目的處理器的內(nèi)存中分配消息池。
在目的處理器中開辟一段內(nèi)存空間,作為源處理器和目的處理器的共享內(nèi) 存區(qū),在該共享內(nèi)存區(qū)中分配內(nèi)存作為源處理器和目的處理器之間通信專用的 消息池,并將分配信息通知到源處理器和目的處理器。
步驟602:將待寫入消息的消息頭寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息,本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl 沒有足夠的空間存儲(chǔ)待寫入的消息,則放棄Blockl 。
由于消息池是一個(gè)循環(huán)緩沖器(buffer ),繼續(xù)判斷Block2是否有足夠的空 間存儲(chǔ)該消息,如果否,則丟棄該消息,并反饋異常指令;如果是,則從Block2 的起始地址(即消息池的起始地址)開始,寫入該消息的消息頭,先將該消息 的消息頭中的標(biāo)志位設(shè)置為有效,再寫入該消息的類型和長度,并將已寫入消 息池的消息的序列號的最大值加1,作為該消息的序列號,并在Blockl的起始 地址寫入跳轉(zhuǎn)標(biāo)志。
步驟603:將待寫入消息的消息體寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處
于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,^f根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息,本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl 沒有足夠的空間存儲(chǔ)待寫入的消息,則放棄Blockl 。
由于消息池是一個(gè)循環(huán)緩沖器(buffer),繼續(xù)判斷Block2是否有足夠的空 間存儲(chǔ)該消息,如果否,則丟棄該消息,并反饋異常指令;如果是,則在Block2 的起始地址上偏移消息頭的長度(消息頭的長度為固定值),從偏移后的地址 開始寫入該消息的消息體。
步驟604:消息寫完后,更新寫指針。
該消息寫完后,即將該消息的消息體和消息頭都寫入消息池后,更新消息 池的消息池管理區(qū)中的寫指針,即將當(dāng)前寫指針滑過(或跳過)消息池中已寫 入消息的內(nèi)存空間,指向下一個(gè)能夠?qū)懭胂⒌牡刂贰?br> 更新寫指針后,判斷更新后的寫指針是否指向消息池的結(jié)尾地址,如果是,
則修改該寫指針,將其指向消息池的起始地址;如果否,則不作處理。 步驟605:目的處理器定時(shí)從消息池中讀取消息。
目的處理器根據(jù)預(yù)先設(shè)置的閾值,定時(shí)對消息池進(jìn)行讀操作,例如,當(dāng)源 處理器與目的處理器之間通信比較頻繁時(shí),可將閾值預(yù)先設(shè)置為5ms,即目的 處理器每隔5ms,就讀一次消息池中的消息。
首先進(jìn)行合法性判斷,具體的,先判斷消息池狀態(tài)標(biāo)志是否為1,如果否 (即當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息 池處于可用的狀態(tài)),則判斷消息池是否為空,如果是,則反饋異常指令;如 果否,則從消息池管理區(qū)中的當(dāng)前讀指針?biāo)傅牡刂烽_始讀:f又,當(dāng)讀到跳轉(zhuǎn)標(biāo) 志時(shí),將當(dāng)前讀指針指向消息池的起始地址,再從消息池的起始地址開始讀取。
讀取時(shí)先讀取消息的消息頭,判定該消息頭滿足讀取條件,則根據(jù)該消息 頭中的消息長度讀取該消息的消息體。讀取條件是指同時(shí)滿足以下四個(gè)條件
條件一、該消息頭中的標(biāo)志位為有效;
條件二、該消息的類型與預(yù)先設(shè)置的消息類型相符;
條件三、該消息的長度小于預(yù)先設(shè)置的長度;
條件四、該消息的長度與其類型相符。
具體的,先判斷該消息的消息頭中標(biāo)志位是否為有效,如果否,則反饋異 常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起始地址; 如果是,則繼續(xù)判斷該消息的類型是否與預(yù)先設(shè)置的消息類型相符,如果否, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果是,則繼續(xù)判斷該消息的長度是否超過預(yù)先設(shè)置的閾值,如果是, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果否,則當(dāng)判定該消息的長度與類型相符時(shí),根據(jù)該消息的長度, 讀取該消息的消息體。
步驟606:讀完消息后設(shè)置標(biāo)志位,并更新讀指針。
該消息讀取完畢后,將該消息的消息頭中的標(biāo)志位設(shè)置為空閑,即存儲(chǔ)該 消息的內(nèi)存空間被釋放,并更新消息池的消息池管理區(qū)中的當(dāng)前讀指針,即將 當(dāng)前讀指針滑過(或跳過)已讀消息的內(nèi)存空間,指向下一個(gè)可以讀取消息的 地址。
接下來,判斷更新后的讀指針是否滿足預(yù)先設(shè)置的條件,如果是,則不作 處理;如果否,則反饋異常指令,并進(jìn)行復(fù)位,將讀指針和寫指針均指向消息 池的起始地址。
預(yù)先設(shè)置的條件是指同時(shí)滿足以下三個(gè)條件
(1) 當(dāng)原讀指針小于寫指針時(shí),新讀指針小于等于寫指針;
(2) 當(dāng)原讀指針大于寫指針時(shí),新讀指針指向的地址在消息池的地址范
圍內(nèi);
(3) 當(dāng)新讀指針指向消息池的結(jié)尾地址時(shí),將新讀指針指向消息池的起
始地址。
本實(shí)施例中,在嵌入式系統(tǒng)中源處理器的內(nèi)存中分配消息池,并將分配信 息通知到源處理器和目的處理器。源處理器通過寫操作將待發(fā)送到目的處理器 的消息存入消息池,目的處理器通過讀操作,定時(shí)從消息池中讀取消息,因此 能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
實(shí)施例7、消息池在目的處理器中,消息寫入Blockl,先寫消息體,再寫
消息頭,空閑時(shí)讀取,讀取后不設(shè)置標(biāo)志位。
參見圖9所示,本實(shí)施例的步驟流程如下。 步驟701:在目的處理器的內(nèi)存中分配消息池。
在目的處理器中開辟一段內(nèi)存空間,作為源處理器和目的處理器的共享內(nèi)
消息池,并將分配信息通知到源處理器和目的處理器。 步驟702:將待寫入消息的消息體寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
判定消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫入的消息 時(shí),在Blockl的起始地址上偏移消息頭的長度(消息頭的長度為固定值),從 偏移后的地址開始寫入該消息的消息體(此時(shí)當(dāng)前寫指針指向Blockl的起始 地址)。
步驟703:將待寫入消息的消息頭寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是
否有足夠的空間存儲(chǔ)該消息。
本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫 入的消息,則從Blockl的起始地址開始寫入該消息的消息頭(此時(shí)當(dāng)前寫指 針指向Blockl的起始地址),先將該消息的消息頭中的標(biāo)志位設(shè)置為有效,再 寫入該消息的類型和長度,并將已寫入消息池的消息的序列號的最大值加1, 作為該消息的序列號。
步驟704:消息寫完后,更新寫指針。
該消息寫完后,即將該消息的消息體和消息頭都寫入消息池后,更新消息 池的消息池管理區(qū)中的寫指針,即將當(dāng)前寫指針滑過(或跳過)消息池中已寫 入消息的內(nèi)存空間,指向下 一 個(gè)能夠?qū)懭胂⒌牡刂贰?br> 更新寫指針后,判斷更新后的寫指針是否指向消息池的結(jié)尾地址,如果是, 則修改該寫指針,將其指向消息池的起始地址;如果否,則不作處理。
步驟705:目的處理器空閑時(shí)從消息池中讀^^消息。
首先進(jìn)行合法性判斷,具體的,先判斷消息池狀態(tài)標(biāo)志是否為1,如果否 (即當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息 池處于可用的狀態(tài)),則判斷消息池是否為空,如果是,則反饋異常指令;如 果否,則從消息池管理區(qū)中的當(dāng)前讀指針?biāo)傅牡刂烽_始讀取。讀取時(shí)先讀取 消息的消息頭,判定該消息頭滿足讀取條件,則才艮據(jù)該消息頭中的消息長度讀 取該消息的消息體。
讀取條件是指同時(shí)滿足以下四個(gè)條件
條件一、該消息頭中的標(biāo)志位為有效;
條件二 、該消息的類型與預(yù)先設(shè)置的消息類型相符;
條件三、該消息的長度小于預(yù)先設(shè)置的長度;
條件四、該消息的長度與其類型相符。
具體的,先判斷該消息的消息頭中標(biāo)志位是否為有效,如果否,則反饋異 常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起始地址;
如果是,則繼續(xù)判斷該消息的類型是否與預(yù)先設(shè)置的消息類型相符,如果否, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果是,則繼續(xù)判斷該消息的長度是否超過預(yù)先設(shè)置的閾值,如果是, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起
始地址;如果否,則當(dāng)判定該消息的長度與類型相符時(shí),根據(jù)該消息的長度,
讀取該消息的消息體。
步驟706:讀完消息后,更新讀指針。
該消息讀:f又完畢后,更新消息池的消息池管理區(qū)中的當(dāng)前讀指針,即將當(dāng) 前讀指針滑過(或跳過)已讀消息的內(nèi)存空間,指向下一個(gè)可以讀取消息的地址。
接下來,判斷更新后的讀指針是否滿足預(yù)先設(shè)置的條件,如果是,則不作 處理;如果否,則反饋異常指令,并進(jìn)行復(fù)位,將讀指針和寫指針均指向消息 池的起始地址。
預(yù)先設(shè)置的條件是指同時(shí)滿足以下三個(gè)條件
(1) 當(dāng)原讀指針小于寫指針時(shí),新讀指針小于等于寫指針;
(2) 當(dāng)原讀指針大于寫指針時(shí),新讀指針指向的地址在消息池的地址范
圍內(nèi);
(3) 當(dāng)新讀指針指向消息池的結(jié)尾地址時(shí),將新讀指針指向消息池的起 始地址。
本實(shí)施例中,在嵌入式系統(tǒng)中目的處理器的內(nèi)存中分配消息池,并將分配 信息通知到源處理器和目的處理器。源處理器通過寫操:作將待發(fā)送到目的處理 器的消息存入消息池,目的處理器通過讀操作,空閑時(shí)從消息池中讀取消息, 因此能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
實(shí)施例8、消息池在目的處理器中,消息寫入Block2,先寫消息體,再寫 消息頭,空閑時(shí)讀取,讀取后設(shè)置標(biāo)志位。
參見圖IO所示,本實(shí)施例的步驟流程如下。
步驟801:在目的處理器的內(nèi)存中分配消息池。
在目的處理器中開辟一段內(nèi)存空間,作為源處理器和目的處理器的共享內(nèi)
消息池,并將分配信息通知到源處理器和目的處理器。 步驟802:將待寫入消息的消息體寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息,本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl 沒有足夠的空間存儲(chǔ)待寫入的消息,則放棄Blockl。
由于消息池是一個(gè)循環(huán)緩沖器(buffer),繼續(xù)判斷Block2是否有足夠的空 間存儲(chǔ)該消息,如果否,則丟棄該消息,并反饋異常指令;如果是,則在Block2 的起始地址上偏移消息頭的長度(消息頭的長度為固定值),從偏移后的地址 開始寫入該消息的消息體。
步驟803:將待寫入消息的消息頭寫入消息池。
首先判斷消息池的消息池管理區(qū)中消息池狀態(tài)標(biāo)志是否為1,如果否(即 當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息池處 于可用的狀態(tài)),則繼續(xù)后續(xù)流程。
當(dāng)Blockl存在(此時(shí)消息池的消息池管理區(qū)中的寫指針指向Blockl的起 始地址)時(shí),計(jì)算Blockl的長度,并根據(jù)待寫入消息的長度,判斷Blockl是 否有足夠的空間存儲(chǔ)該消息,本實(shí)施例假設(shè)消息池中的第一空白內(nèi)存塊Blockl 沒有足夠的空間存儲(chǔ)待寫入的消息,則放棄Blockl 。
由于消息池是一個(gè)循環(huán)緩沖器(buffer),繼續(xù)判斷Block2是否有足夠的空 間存儲(chǔ)該消息,如果否,則丟棄該消息,并反饋異常指令;如果是,則從Block2的起始地址(即消息池的起始地址)開始,寫入該消息的消息頭,先將該消息 的消息頭中的標(biāo)志位設(shè)置為有效,再寫入該消息的類型和長度,并將已寫入消 息池的消息的序列號的最大值加1,作為該消息的序列號,并在Blockl的起始
地址寫入3兆轉(zhuǎn)標(biāo) 志o
步驟804:消息寫完后,更新寫指針。
該消息寫完后,即將該消息的消息體和消息頭都寫入消息池后,更新消息 池的消息池管理區(qū)中的寫指針,即將當(dāng)前寫指針滑過(或跳過)消息池中已寫 入消息的內(nèi)存空間,指向下一個(gè)能夠?qū)懭胂⒌牡刂贰?br> 更新寫指針后,判斷更新后的寫指針是否指向消息池的結(jié)尾地址,如果是,
則修改該寫指針,將其指向消息池的起始地址;如果否,則不作處理。
步驟805:目的處理器空閑時(shí)從消息池中讀取消息。
首先進(jìn)行合法性判斷,具體的,先判斷消息池狀態(tài)標(biāo)志是否為1,如果否 (即當(dāng)前消息池處于不可用的狀態(tài)),則反饋異常指令;如果是(即當(dāng)前消息 池處于可用的狀態(tài)),則判斷消息池是否為空,如果是,則反饋異常指令;如 果否,則從消息池管理區(qū)中的當(dāng)前讀指針?biāo)傅牡刂烽_始讀取,當(dāng)讀到跳轉(zhuǎn)標(biāo) 志時(shí),將當(dāng)前讀指針指向消息池的起始地址,再從消息池的起始地址開始讀取。
讀取時(shí)先讀取消息的消息頭,判定該消息頭滿足讀取條件,貝'J根據(jù)該消息 頭中的消息長度讀取該消息的消息體。
讀取條件是指同時(shí)滿足以下四個(gè)條件
條件一、該消息頭中的標(biāo)志位為有效;
條件二 、該消息的類型與預(yù)先設(shè)置的消息類型相符;
條件三、該消息的長度小于預(yù)先設(shè)置的長度;
條件四、該消息的長度與其類型相符。
具體的,先判斷該消息的消息頭中標(biāo)志位是否為有效,如果否,則反饋異 常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起始地址; 如果是,則繼續(xù)判斷該消息的類型是否與預(yù)先設(shè)置的消息類型相符,如果否,則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起 始地址;如果是,則繼續(xù)判斷該消息的長度是否超過預(yù)先設(shè)置的閾值,如果是, 則反饋異常指令,并進(jìn)行消息池復(fù)位,即將讀指針和寫指針均指向消息池的起
始地址;如果否,則當(dāng)判定該消息的長度與類型相符時(shí),根據(jù)該消息的長度, 讀取該消息的消息體。
步驟806:讀完消息后設(shè)置標(biāo)志位,并更新讀指針。
該消息讀耳又完畢后,將該消息的消息頭中的標(biāo)志位設(shè)置為空閑,即存儲(chǔ)該 消息的內(nèi)存空間被釋放,并更新消息池的消息池管理區(qū)中的當(dāng)前讀指針,即將 當(dāng)前讀指針滑過(或跳過)已讀消息的內(nèi)存空間,指向下一個(gè)可以讀取消息的 地址。
接下來,判斷更新后的讀指針是否滿足預(yù)先設(shè)置的條件,如果是,則不作 處理;如果否,則反饋異常指令,并進(jìn)行復(fù)位,將讀指針和寫指針均指向消息 池的起始;也址。
預(yù)先設(shè)置的條件是指同時(shí)滿足以下三個(gè)條件
(1) 當(dāng)原讀指針小于寫指針時(shí),新讀指針小于等于寫指針;
(2) 當(dāng)原讀指針大于寫指針時(shí),新讀指針指向的地址在消息池的地址范
圍內(nèi);
(3) 當(dāng)新讀指針指向消息池的結(jié)尾地址時(shí),將新讀指針指向消息池的起 始地址。
本實(shí)施例中,在嵌入式系統(tǒng)中目的處理器的內(nèi)存中分配消息池,并將分配 信息通知到源處理器和目的處理器。源處理器通過寫操作將待發(fā)送到目的處理 器的消息存入消息池,目的處理器通過讀操作,空閑時(shí)從消息池中讀取消息, 因此能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
綜上所述,本發(fā)明實(shí)施例可應(yīng)用于嵌入式系統(tǒng)中任意兩個(gè)處理器之間的通 信,在嵌入式系統(tǒng)中的源處理器的內(nèi)存中分配消息池,并將分配信息通知到源 處理器和目的處理器,源處理器通過寫操作將待發(fā)送到目的處理器的消息存入
消息池,目的處理器通過讀搡作,定時(shí)或空閑時(shí)從消息池中讀取消息;或
在嵌入式系統(tǒng)中的目的處理器的內(nèi)存中分配消息池,并將分配信息通知到 源處理器和目的處理器,源處理器通過寫操作將待發(fā)送到目的處理器的消息存 入消息池,目的處理器通過讀操作,定時(shí)或空閑時(shí)從消息池中讀取消息,因此 本發(fā)明實(shí)施例能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及 其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1、一種多處理器間通信的方法,其特征在于,包括下列步驟源處理器通過寫操作將待發(fā)送到目的處理器的消息存入消息池;目的處理器通過讀操作從消息池中讀取消息。
2、 如權(quán)利要求1所述的方法,其特征在于,所述消息池是從內(nèi)存中分配 的關(guān)聯(lián)源處理器和目的處理器的消息池。
3、 如權(quán)利要求2所述的方法,其特征在于,從源處理器的內(nèi)存中分配所 述消息池,并將分配信息通知到所述源處理器和目的處理器;或從目的處理器的內(nèi)存中分配所述消息池,并將分配信息通知到所述源處理 器和目的處理器。
4、 如權(quán)利要求1所述的方法,其特征在于,所述消息包括消息頭,將消 息頭存入消息池,包括下列步驟所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用 時(shí),則在判定所述消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫 入的消息時(shí),從Blockl的起始地址開始寫入該消息的消息頭。
5、 如權(quán)利要求1所述的方法,其特征在于,所述消息包括消息頭,將消 息頭存入消息池,包括下列步驟所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用 時(shí),則在判定所述消息池的第一空白內(nèi)存塊Blockl不足以存儲(chǔ)待寫入的消息 時(shí),進(jìn)一步判定所述消息池的第二空白內(nèi)存塊Block2有足夠的空間存儲(chǔ)該消 息時(shí),從Block2的起始地址開始寫入該消息的消息頭,并在Blockl的起始地 址寫入跳轉(zhuǎn)標(biāo)志。
6、 如權(quán)利要求4或5所述的方法,其特征在于,所述從起始地址開始寫 入所述消息的消息頭,包括下列步驟將該消息的消息頭中的標(biāo)志位設(shè)置為有效,再寫入該消息的類型和長度, 并將所述消息池中已寫入消息的序列號最大值加1作為該消息的序列號。
7、 如權(quán)利要求1所述的方法,其特征在于,將所述消息的消息體存入消 息池,包括下列步驟所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用 時(shí),則在判定所述消息池的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫入 的消息時(shí),在Blockl的起始地址上偏移消息頭的長度,從偏移后的地址開始 寫入該消息的消息體。
8、 如權(quán)利要求1所述的方法,其特征在于,將所述消息的消息體存入消 息池,包括下列步驟所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用 時(shí),則在判定所述消息池的第一空白內(nèi)存塊Blockl不足以存儲(chǔ)待寫入的消息 時(shí),進(jìn)一步判定所述消息池的第二空白內(nèi)存塊Block2有足夠的空間存儲(chǔ)該消 息時(shí),在Block2的起始地址上偏移消息頭的長度,從偏移后的地址開始寫入 該消息的消息體。
9、 如權(quán)利要求1所述的方法,其特征在于,所述目的處理器根據(jù)預(yù)先設(shè) 置的閾值,定時(shí)對所述消息池進(jìn)行讀操作;或所述目的處理器空閑時(shí)對所述消息池進(jìn)行讀操作。
10、 如權(quán)利要求9所述的方法,其特征在于,所述讀才喿作包括以下步驟 所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用且所述消息池中存儲(chǔ)有消息時(shí),從所述消息池管理區(qū)中的當(dāng)前讀指針?biāo)傅牡刂?開始讀取,若讀到跳轉(zhuǎn)標(biāo)志,則從所述消息池的起始地址開始讀取;讀取時(shí)先讀取所述消息的消息頭,判定該消息頭滿足讀取條件,則根據(jù)該 消息頭中的消息長度讀取該消息的消息體。
11、 如權(quán)利要求10所述的方法,其特征在于,所述讀取條件是指同時(shí)滿 足以下四個(gè)條件所述消息頭中的標(biāo)志位為有效;該消息的類型與預(yù)先設(shè)置的消息類型相符; 該消息的長度小于預(yù)先設(shè)置的長度;該消息的長度與其類型相符。
12、 如權(quán)利要求10所述的方法,其特征在于,所述消息的消息體讀取完 畢后,將所述讀指針指向下一個(gè)讀取地址,以更新所述讀指針;或所述消息的消息體讀取完畢后,將該消息的消息頭中的標(biāo)志位設(shè)置為空 閑,并將所述讀指針指向下一個(gè)讀取地址,以更新所述讀指針。
13、 一種多處理器間通信的系統(tǒng),包括源處理器和目的處理器,其特征在于,所述源處理器,用于通過寫操作將待發(fā)送到所述目的處理器的消息存入消 息池;所述目的處理器,用于通過讀操作從所述消息池中讀取消息。
14、 如權(quán)利要求13所述的系統(tǒng),其特征在于,所述消息池是從內(nèi)存中分 配的關(guān)聯(lián)所述源處理器和目的處理器的消息池。
15、 如權(quán)利要求14所述的系統(tǒng),其特征在于,從所述源處理器的內(nèi)存中 分配所述消息池,并將分配信息通知到所述源處理器和目的處理器;或從所述目的處理器的內(nèi)存中分配所述消息池,并將分配信息通知到所述源 處理器和目的處理器。
16、 如權(quán)利要求13所述的系統(tǒng),其特征在于,所述消息包括消息頭,所 述源處理器將消息頭存入消息池包括所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用 時(shí),則在判定所述消息池中的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫 入的消息時(shí),所述源處理器從Blockl的起始地址開始寫入該消息的消息頭。
17、 如權(quán)利要求13所述的系統(tǒng),其特征在于,所述消息包括消息頭,所 述源處理器將消息頭存入消息池包括所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用 時(shí),則在判定所述消息池的第一空白內(nèi)存塊Blockl不足以存儲(chǔ)待寫入的消息 時(shí),進(jìn)一步判定所述消息池的第二空白內(nèi)存塊Block2有足夠的空間存儲(chǔ)該消 息時(shí),所述源處理器從Block2的起始地址開始寫入該消息的消息頭,并在 Blockl的起始地址寫入跳轉(zhuǎn)標(biāo)志。
18、 如權(quán)利要求16或17所述的系統(tǒng),其特征在于,所述源處理器所述從 起始地址開始寫入所述消息的消息頭包括所述源處理器將該消息的消息頭中的標(biāo)志位設(shè)置為有效,再寫入該消息的 類型和長度,并將所述消息池中已寫入消息的序列號最大值加l作為該消息的 序列號。
19、 如權(quán)利要求13所述的系統(tǒng),其特征在于,所述源處理器將所述消息 的消息體存入消息池包括所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用 時(shí),則在判定所述消息池的第一空白內(nèi)存塊Blockl有足夠的空間存儲(chǔ)待寫入 的消息時(shí),在Blockl的起始地址上偏移消息頭的長度,所述源處理器從偏移 后的地址開始寫入該消息的消息體。
20、 如權(quán)利要求13所述的系統(tǒng),其特征在于,所述源處理器將所述消息 的消息體存入消息池包括所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用 時(shí),則在判定所述消息池的第一空白內(nèi)存塊Blockl不足以存儲(chǔ)待寫入的消息 時(shí),進(jìn)一步判定所述消息池的第二空白內(nèi)存塊Block2有足夠的空間存儲(chǔ)該消 息時(shí),在Block2的起始地址上偏移消息頭的長度,所述源處理器從偏移后的 地址開始寫入該消息的消息體。
21、 如權(quán)利要求13所述的系統(tǒng),其特征在于,所述目的處理器根據(jù)預(yù)先 設(shè)置的閾值,定時(shí)對所述消息池進(jìn)行讀操作;或所述目的處理器空閑時(shí)對所述消息池進(jìn)行讀操作。
22、 如權(quán)利要求21所述的系統(tǒng),其特征在于,所述目的處理器對所述消 息池進(jìn)行讀操作包括所述消息池中包括消息池管理區(qū),消息池管理區(qū)中的消息池狀態(tài)為可用且 所述消息池中存儲(chǔ)有消息時(shí),所述目的處理器從所述消息池管理區(qū)中的當(dāng)前讀 指針?biāo)傅牡刂烽_始讀取,若讀到跳轉(zhuǎn)標(biāo)志,則從所述消息池的起始地址開始讀??;所述目的處理器先讀取所述消息的消息頭,判定該消息頭滿足讀取條件, 則根據(jù)該消息頭中的消息長度讀取該消息的消息體。
23、 如權(quán)利要求22所述的系統(tǒng),其特征在于,所述讀取條件是指同時(shí)滿 足以下四個(gè)條件所述消息頭中的標(biāo)志位為有效;該消息的類型與預(yù)先設(shè)置的消息類型相符;該消息的長度小于預(yù)先設(shè)置的長度;該消息的長度與其類型相符。
24、 如權(quán)利要求22所述的系統(tǒng),其特征在于,所述目的處理器讀取所述 消息的消息體完畢后,將所述讀指針指向下一個(gè)讀取地址,以更新所述讀指針; 或所述目的處理器讀取所述消息的消息體完畢后,將該消息的消息頭中的標(biāo) 志位設(shè)置為空閑,并將所述讀指針指向下一個(gè)讀取地址,以更新所述讀指針。
全文摘要
本發(fā)明公開了一種多處理器間通信的方法及系統(tǒng),屬于計(jì)算機(jī)網(wǎng)絡(luò)和通信領(lǐng)域,以實(shí)現(xiàn)嵌入式系統(tǒng)中多處理器間的通信。方法包括源處理器通過寫操作將待發(fā)送到目的處理器的消息存入消息池;目的處理器通過讀操作從消息池中讀取消息。系統(tǒng)包括其中的源處理器,用于通過寫操作將待發(fā)送到目的處理器的消息存入消息池;其中的目的處理器,用于通過讀操作從所述消息池中讀取消息。本發(fā)明實(shí)施例中,嵌入式系統(tǒng)中的源處理器通過寫操作將待發(fā)送到目的處理器的消息存入消息池,目的處理器通過讀操作從消息池中讀取消息,因此能夠?qū)崿F(xiàn)嵌入式系統(tǒng)中多處理器間的通信。
文檔編號G06F15/16GK101178701SQ20071019850
公開日2008年5月14日 申請日期2007年12月11日 優(yōu)先權(quán)日2007年12月11日
發(fā)明者羅顯鋒 申請人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
泸定县| 双流县| 平山县| 仁布县| 云浮市| 崇明县| 双辽市| 武穴市| 民丰县| 娄烦县| 沁阳市| 永春县| 固阳县| 习水县| 剑河县| 建德市| 万山特区| 惠来县| 丁青县| 鄂托克旗| 遂溪县| 宜宾市| 祁阳县| 手机| 丹巴县| 怀集县| 丰顺县| 新龙县| 赣榆县| 平乐县| 洛扎县| 灵石县| 宁国市| 宜章县| 玉溪市| 绥化市| 米林县| 科技| 哈密市| 苗栗县| 嫩江县|