專利名稱:一種實現(xiàn)板間對象通信的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種實現(xiàn)板間對象通信的方法,特別一種適用于嵌入式系統(tǒng)的板間通信的方法。
因為對象間的通信實際上是通過對象指針來完成的,所以這種通信方式只能在同一個進程或板上實現(xiàn),不同板之間的通信不能采用這種方法。
在對板間通信的專利檢索中,沒有找到類似的專利解決這個不便。
根據(jù)目前所知,板間通信一般都是通過一些固定的原語調(diào)用來完成的。這種方法使板內(nèi)和板間的對象通信方法不一樣,開發(fā)人員需要在編碼中用兩套通信流程,增加了復雜性;同時,用這類通信方法,也就無法用到UML設(shè)計工具的動畫功能,如某些設(shè)計工具提供的順序圖顯示功能來協(xié)助設(shè)計。
本發(fā)明是這樣實現(xiàn)的一種實現(xiàn)板間對象通信的方法,其特征在于至少包括以下步驟對其他板上所有需要和本板通信的對象都在本板的程序中創(chuàng)建一個映射的對象,稱之為skeleton對象(skeleton對象的概念和作用與OMG CORBA標準中的skeleton相似),作為通信的中介,和其他板上需要與本板通信的靜態(tài)對象一一對應(yīng);由本板的對象將消息發(fā)給其他板上對應(yīng)對象在本板上的skeleton對象;在本板上創(chuàng)建的其他板上對應(yīng)對象的skeleton對象截取消息,處理成統(tǒng)一的數(shù)據(jù)格式發(fā)送給本板的板間通信模塊;板間通信模塊將數(shù)據(jù)發(fā)送到其他板;其他板的通信模塊從通信線路上收到信息時,判斷發(fā)送消息的對象對應(yīng)的skeleton對象是否存在,如果不存在,則動態(tài)創(chuàng)建發(fā)送消息的對象對應(yīng)的skeleton對象;其他板的板間通信模塊生成消息,發(fā)送給目的對象。
一種將板A上的對象C發(fā)消息給板B上的目的對象,實現(xiàn)板間對象通信的方法,其特征在于包括以下步驟板A上的板間通信模塊啟動時建立一些skeleton對象,和板B上的需要與本板通信的靜態(tài)對象一一對應(yīng),這樣在板A中,就有了目的對象的skeleton對象;對象C將消息發(fā)給目的對象在板A上的skeleton對象;板A上目的對象的skeleton對象截取消息,處理成統(tǒng)一的數(shù)據(jù)格式發(fā)送給板A的板間通信模塊;板間通信模塊將數(shù)據(jù)發(fā)送到板B;板B的通信模塊從通信線路上收到信息時,判斷發(fā)送消息的對象C對應(yīng)的skeleton對象是否存在,如果不存在,則動態(tài)創(chuàng)建對象C對應(yīng)的skeleton對象;板B的板間通信模塊生成消息,發(fā)送給目的對象。
所述每一個和其他板通信的動態(tài)創(chuàng)建的skeleton對象在析構(gòu)時要向通信模塊注銷,通信模塊將此注銷信息發(fā)送到其他板上,讓其他板刪除此動態(tài)對象的skeleton對象;如果通信鏈路中斷,則通信模塊刪除所有動態(tài)創(chuàng)建的skeleton對象;本發(fā)明和其他板間通信的方法相比優(yōu)點主要有對應(yīng)用程序設(shè)計來說,無論對象在什么地方,通信的方法都是一樣的,真正實現(xiàn)了完全透明;UML設(shè)計工具的動畫功能可以使用,對調(diào)試很有幫助。
圖2是板間通信模塊的啟動流程圖。
圖3是板間通信模塊的通信流程圖。
圖4是需要通信的對象被刪除的流程圖。
圖5是通信中斷的處理流程圖。
圖6是本發(fā)明的方法構(gòu)建的一個通信模塊實例圖。
圖1是本發(fā)明的原理圖,表示一次單向通信的原理。數(shù)據(jù)從對象C發(fā)出,依次經(jīng)過目的對象的skeleton對象,板A的板間通信模塊,板B的板間通信模塊,然后到達目的對象。如果目的對象要發(fā)消息給對象C,則需要在板B中建立對象C的skeleton對象,并進行相反的過程。
圖2說明了板A的通信模塊的啟動流程,通信模塊在啟動時要創(chuàng)建其他板上要和本板通信的對象的skeleton對象。
圖3說明了從板A的對象C發(fā)消息給板B的目的對象的流程,是對圖1的流程形式表示。
圖4說明了對象析構(gòu)時需要進行的工作流程。由于對象析構(gòu)時其他板并不知道,所以需要通信模塊將對象的析構(gòu)消息通知其他板,使其他板的通信模塊有機會刪除其對應(yīng)的skeleton對象。
圖5表示了通信中斷時的處理流程。通信中斷時要刪除所有動態(tài)創(chuàng)建的skeleton對象,因為如果這些skeleton對象對應(yīng)的真實對象析構(gòu),在通信中斷的時候是無法通知本板的,就會造成這些skeleton對象永遠無法刪除。
圖6是本發(fā)明的方法構(gòu)建的一個通信模塊及skeleton對象的圖。圖中,應(yīng)用模塊的對象將板間通信的消息發(fā)送給skeleton對象,然后再發(fā)給stub對象轉(zhuǎn)發(fā)給通信對象,最后發(fā)送到通信鏈路上傳給對方;接收則是完全相反的過程。
因為動態(tài)創(chuàng)建的對象進行板間通信會帶來很多問題,所以此實現(xiàn)中只考慮靜態(tài)創(chuàng)建的對象間的通信。這些對象在程序運行開始時就創(chuàng)建好,生存期和程序的生存期相同。如果是對象只有一個實例,則一開始就可以建好其對應(yīng)的skeleton對象;如果是多實例對象,就動態(tài)創(chuàng)建其skeleton對象。
對于每一塊和本板通信的板,都對應(yīng)唯一的stub對象,它接收skeleton對象轉(zhuǎn)發(fā)來的消息數(shù)據(jù),保存在自己的緩沖區(qū)中,并將其拆成小數(shù)據(jù)幀,發(fā)送給Socket或RS232等通信對象,由它們進行發(fā)送。如果由數(shù)據(jù)被通信對象收到,也傳給stub對象,由它組合成消息幀,轉(zhuǎn)發(fā)給接收的對象。
靜態(tài)的skeleton對象由應(yīng)用程序自己建立,由于OXF已經(jīng)被修改,skeleton對象在注冊時會將消息分發(fā)函數(shù)交給通信模塊接管,新的分發(fā)函數(shù)不處理Framework Event以及所有ID<0的系統(tǒng)消息,如timeout,startbehavior等。
新的消息分發(fā)函數(shù)處理兩類消息a)普通的消息。對于這些消息,分發(fā)函數(shù)根據(jù)消息長度組合成數(shù)據(jù)消息(名稱可取為EV_DATA)發(fā)給stub對象,b)變長數(shù)據(jù)消息。板間通信中有時需要發(fā)送變長數(shù)據(jù),一般發(fā)送變長數(shù)據(jù)的做法是在消息的數(shù)據(jù)結(jié)構(gòu)中加上指針進行傳送,而指針在其他板上是無效的。為此,專門定義了變長數(shù)據(jù)消息EV_VARIANT,應(yīng)用程序可以發(fā)送此消息給skeleton對象,分發(fā)函數(shù)組合成EV_DATA消息發(fā)給stub對象。
stub對象擁有一個大緩沖區(qū),保存skeleton對象發(fā)來的消息,然后逐漸地把緩沖區(qū)中的信息分割成小數(shù)據(jù)幀,加上發(fā)給通信對象,完成發(fā)送。如果緩沖區(qū)滿,則消息丟棄。在接收到數(shù)據(jù)幀時,stub對象將其組合成消息,然后發(fā)送給skeleton對象。Stub對象存在的意義就在于它能屏蔽底層的通信方法,無論是采用Socket還是RS232,Stub對象的操作是一樣的。
通信對象完成真正的通信工作,如socket的收發(fā)等。在通信對象的發(fā)送緩沖區(qū)空時,發(fā)消息通知stub對象,以允許stub對象發(fā)送新的數(shù)據(jù)包。
要實現(xiàn)消息的透明轉(zhuǎn)發(fā),分發(fā)函數(shù)必須知道消息的長度,這只能在消息創(chuàng)建時知道,所以需要在Rhapsody的代碼生成配置中修改消息的內(nèi)存分配過程,在完成內(nèi)存分配后將消息長度填入結(jié)構(gòu)成員中。
為了實現(xiàn)動畫,Rhapsody對每一種消息都有對應(yīng)的ARCEventClass對象,在收到板間通信消息時必須創(chuàng)建ARCEvent,但由于此時僅僅知道消息ID,不知道其對應(yīng)的ARCEventClass對象,無法創(chuàng)建。這可以這樣解決a)修改Rhapsody的代碼生成配置中修改消息的內(nèi)存分配過程,此時可以記錄消息的名稱。
b)在編譯選項有Rhaspody動畫代碼時,包的初始化過程會初始化ARCEventClass,由于它用的是宏,可以修改宏定義,在初始化ARCEventClass后將消息名稱和ARCEventClass對象的指針加入一張映射表。
c)在有板間消息數(shù)據(jù)傳來時,根據(jù)消息名稱查找其對應(yīng)的ARCEventClass對象,實現(xiàn)消息的發(fā)送。
本發(fā)明方法獨特,使板間通信對用UML設(shè)計的應(yīng)用程序完全透明,并且使板間對象的交互可以用動畫功能進行調(diào)試,加快了開發(fā)進度,減少了發(fā)生錯誤的可能。
權(quán)利要求
1.一種實現(xiàn)板間對象通信的方法,其特征在于至少包括以下步驟對其他板上所有需要和本板通信的對象都在本板的程序中創(chuàng)建一個映射的對象,稱之為skeleton對象,作為通信的中介,和其他板上需要與本板通信的靜態(tài)對象一一對應(yīng);由本板的對象將消息發(fā)給其他板上對應(yīng)對象在本板上的skeleton對象;在本板上創(chuàng)建的其他板上對應(yīng)對象的skeleton對象截取消息,處理成統(tǒng)一的數(shù)據(jù)格式發(fā)送給本板的板間通信模塊;板間通信模塊將數(shù)據(jù)發(fā)送到其他板;其他板的通信模塊從通信線路上收到信息時,判斷發(fā)送消息的對象對應(yīng)的skeleton對象是否存在,如果不存在,則動態(tài)創(chuàng)建發(fā)送消息的對象對應(yīng)的skeleton對象;其他板的板間通信模塊生成消息,發(fā)送給目的對象。
2.一種將板(A)上的對象(C)發(fā)消息給板(B)上的目的對象,實現(xiàn)板間對象通信的方法,其特征在于包括以下步驟板(A)上的板間通信模塊啟動時建立一些skeleton對象,和板(B)上的需要與本板通信的靜態(tài)對象一一對應(yīng),這樣在板(A)中,就有了目的對象的skeleton對象;對象(C)將消息發(fā)給目的對象在板(A)上的skeleton對象;板(A)上目的對象的skeleton對象截取消息,處理成統(tǒng)一的數(shù)據(jù)格式發(fā)送給板(A)的板間通信模塊;板間通信模塊將數(shù)據(jù)發(fā)送到板(B);板(B)的通信模塊從通信線路上收到信息時,判斷發(fā)送消息的對象(C)對應(yīng)的skeleton對象是否存在,如果不存在,則動態(tài)創(chuàng)建對象(C)對應(yīng)的skeleton對象;板(B)的板間通信模塊生成消息,發(fā)送給目的對象。
3.如權(quán)利要求1或2所述的一種實現(xiàn)板間對象通信的方法,其特征在于所述每一個和其他板通信的動態(tài)創(chuàng)建的skeleton對象在析構(gòu)時要向通信模塊注銷,通信模塊將此注銷信息發(fā)送到其他板上,讓其他板刪除此動態(tài)對象的skeleton對象。
4.如權(quán)利要求1或2所述的一種實現(xiàn)板間對象通信的方法,其特征在于如果通信鏈路中斷,則通信模塊刪除所有動態(tài)創(chuàng)建的skeleton對象。
全文摘要
本發(fā)明涉及一種實現(xiàn)板間對象通信的方法,特別一種適用于嵌入式系統(tǒng)的板間通信的方法。該方法是對其他板上所有需要和本板通信的對象都在本板的程序中創(chuàng)建一個映射的對象,稱之為skeleton對象,作為通信的中介。本發(fā)明和其他板間通信的方法相比對應(yīng)用程序設(shè)計來說,無論對象在什么地方,通信的方法都是一樣的,真正實現(xiàn)了完全透明;UML設(shè)計工具的動畫功能可以使用,對調(diào)試很有幫助。
文檔編號H04L29/00GK1477839SQ02136650
公開日2004年2月25日 申請日期2002年8月21日 優(yōu)先權(quán)日2002年8月21日
發(fā)明者朱丹緋, 謝高輝, 牟川 申請人:深圳市中興通訊股份有限公司