本發(fā)明涉及總線技術(shù),特別涉及總線模塊中的消息收發(fā)技術(shù)。
背景技術(shù):
航空電子領(lǐng)域中的總線網(wǎng)絡(luò)gjb289a(mil-std-1553b)總線已在航空電子領(lǐng)域被廣泛應(yīng)用多年,但是,在機(jī)載航電網(wǎng)絡(luò)以及航電綜合實(shí)驗(yàn)室中,現(xiàn)有的gjb289a總線模塊中消息收發(fā)沒有優(yōu)先級區(qū)分,影響了消息的收發(fā)效果。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是,提供一種能支持gjb289a總線模塊中區(qū)分消息優(yōu)先級進(jìn)行接收與發(fā)送的方法。
本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案是,支持優(yōu)先級的gjb289a總線模塊中的消息收發(fā)方法:
1)發(fā)送步驟:總線接口模塊mbi將待發(fā)送消息對應(yīng)放入三種類型的發(fā)送緩存中進(jìn)行存儲,三種類型的發(fā)送緩存為:緊急消息緩存,異步消息緩存和普通消息緩存;
緊急消息緩存存放緊急消息,優(yōu)先級最高,當(dāng)緊急消息緩存非空時(shí),總線接口模塊優(yōu)先發(fā)送緊急消息緩存中的消息內(nèi)容到gjb289a總線;
異步消息緩存存放異步消息,優(yōu)先級高于普通消息低于緊急消息,總線接口模塊根據(jù)異步消息本身的固定的異步周期發(fā)送異步消息到gjb289a總線;
普通消息緩存存放普通消息,普通消息為一般優(yōu)先級的總線消息,采用雙數(shù)據(jù)緩存形式,優(yōu)先選擇空閑緩存存放消息,當(dāng)緊急消息緩存和異步消息緩存均沒有消息需要進(jìn)行發(fā)送時(shí),總線接口模塊采取乒乓切換方式將雙緩存中的數(shù)據(jù)發(fā)送到gjb289a總線;
2)接收步驟:總線接口模塊的接收管理采用二級緩存形式;第一級緩存按接收時(shí)序存放消息,第二級緩存僅存放消息指針,根據(jù)消息的優(yōu)先級分為緊急消息指針隊(duì)列和非緊急消息指針隊(duì)列組;非緊急消息指針隊(duì)列組包含有2個(gè)以上的非緊急消息指針隊(duì)列,非緊急消息指針隊(duì)列按照不同msgid進(jìn)行區(qū)分;緊急消息的指針按照接收時(shí)序保存在緊急消息指針隊(duì)列中,非緊急消息的指針按照其msgid存入相應(yīng)的非緊急消息指針隊(duì)列中;緊急消息采用中斷接收方式,非緊急消息采用查詢接收方式;所述非緊急消息包括異步消息與普通消息。
本發(fā)明提出一套gjb289a總線模塊中的消息收發(fā)方法,當(dāng)總線接口模塊充當(dāng)bc時(shí),總線接口模塊獨(dú)立為高優(yōu)先級消息開辟緩存,保證高優(yōu)先級消息優(yōu)先發(fā)送。接收采用二級緩存形式,一級緩存采用接收大隊(duì)列形式,保證了消息接收的時(shí)序。二級緩存采用指針的方式,既保證了消息按照不同優(yōu)先級進(jìn)行了分類,又保證了消息緩存不占用過多的內(nèi)存空間;同時(shí)不同優(yōu)先級消息采取不同的接收方式,高優(yōu)先級的緊急消息采用中斷接收方式,普通優(yōu)先級的周期消息采用查詢機(jī)制接收。當(dāng)用戶需要按接收消息時(shí)序提取消息時(shí),可以選擇從一級緩存提取消息。當(dāng)用戶需要按照消息優(yōu)先級提取消息時(shí),可以選擇從二級緩存提取消息。這樣根據(jù)用戶的不同需求進(jìn)行有區(qū)別的消息提取,既可以保證消息的接收時(shí)序,又能滿足用戶優(yōu)先提取高優(yōu)先級消息的需求。
本發(fā)明的有益效果是,保證高優(yōu)先級消息優(yōu)先發(fā)送與接收。
附圖說明
圖1為發(fā)送消息隊(duì)列示意圖;
圖2為接收消息隊(duì)列示意圖;
圖3為作為bc的mbi發(fā)送數(shù)據(jù)的處理示意圖;
圖4為作為rt的mbi的接收與發(fā)送示意圖;
圖5為作為bm的mbi的接收示意圖;
圖6為作為bc的mbi的控制流程圖;
圖7為作為rt的mbi的控制流程圖;
圖8為作為bm的mbi的控制流程圖。
具體實(shí)施方式
為了方便描述對文中出現(xiàn)的英文簡寫進(jìn)行說明:
msgid:消息標(biāo)識;
icd:接口控制文件;
mbi:總線接口模塊;
rt:遠(yuǎn)程終端;
bc:總線控制器;
bm:總線監(jiān)視器。
一種支持優(yōu)先級的gjb289a總線模塊由消息發(fā)送和消息接收兩部分組成。
1根據(jù)消息優(yōu)先級不同區(qū)分發(fā)送緩存管理
如圖1所示,當(dāng)mbi作為bc時(shí),mbi根據(jù)消息發(fā)送優(yōu)先級不同,分別申請三種類型緩存,緊急消息緩存,異步消息緩存,普通消息緩存。
緊急消息緩存存放緊急消息,應(yīng)用軟件發(fā)送緊急消息時(shí),消息存放入緊急消息緩存,緊急消息優(yōu)先級最高,當(dāng)緊急消息緩存非空時(shí),優(yōu)先發(fā)送緊急消息緩存中的消息內(nèi)容;異步消息緩存存放異步消息,每一條異步消息根據(jù)消息本身的固定的異步周期發(fā)送異步消息;普通消息緩存存放普通消息,普通消息為一般優(yōu)先級的總線消息,采用雙數(shù)據(jù)緩存方式。
三種消息緩存設(shè)置在mbi的fpga固件程序中,fpga固件程序根據(jù)高速時(shí)鐘周期輪詢?nèi)N緩存的空滿狀態(tài),緊急消息優(yōu)先級最高,當(dāng)緊急消息緩存非空時(shí),第一時(shí)刻把緊急消息隊(duì)列中的消息發(fā)送給收發(fā)器模塊,收發(fā)器模塊將消息發(fā)到gjb289a總線上。異步消息優(yōu)先級其次,當(dāng)同時(shí)存在異步消息和普通消息時(shí),優(yōu)先發(fā)送異步消息。普通消息緩存采用雙緩存管理,當(dāng)應(yīng)用發(fā)送普通消息時(shí),固件程序優(yōu)先選擇空閑緩存存放消息,當(dāng)緊急消息緩存和異步消息緩存均沒有消息需要進(jìn)行發(fā)送時(shí),普通消息雙緩存采取乒乓切換方式將數(shù)據(jù)通過收發(fā)器發(fā)送到gjb289a總線上去。
2根據(jù)接收消息要求,接收分二級緩存進(jìn)行接收隊(duì)列管理。
如圖2所示,接收隊(duì)列采用二級緩存管理消息,用戶可選擇從第一級或者第二級緩存提取消息。當(dāng)用戶需要按接收消息時(shí)序提取消息時(shí),可以選擇從第一級緩存提取消息。當(dāng)用戶需要按照消息優(yōu)先級提取消息時(shí),可以選擇從第二級緩存提取消息。第一級緩存完全保證按照消息接收時(shí)序進(jìn)行存儲,從第一級緩存直接提取消息,可以保證消息的接收時(shí)序。比如作為bm時(shí),用戶關(guān)心的是接收消息的時(shí)序,所以作為bm模式時(shí),可以從第一級緩存直接提取消息。
第二級緩存根據(jù)消息的優(yōu)先級不同分為緊急消息隊(duì)列和非緊急消息隊(duì)列組。兩種隊(duì)列中只存放真實(shí)數(shù)據(jù)所在的地址信息。不占用太多內(nèi)存。
緊急消息隊(duì)列不需要按照msgid分隊(duì)列,所有緊急消息按照接收時(shí)序保存在緊急消息隊(duì)列中,非緊急消息按照不同msgid分隊(duì)列管理。非緊急消息包括異步消息與一般優(yōu)先級的總線消息。
緊急消息的接收采用中斷方式,保證收到緊急消息后應(yīng)用軟件能夠第一時(shí)間接收緊急消息,對于非緊急消息,由應(yīng)用軟件主動查詢并做相應(yīng)的接收操作。
接收緩存的消息存放、提取模式如下:
第一級緩存每條消息的存放空間采用固定長度,每個(gè)消息緩存的空間可以看做是一個(gè)“單元”,每個(gè)“單元”設(shè)有一個(gè)標(biāo)記量表示其處于“空”或者“滿”狀態(tài)。當(dāng)mbi收到總線消息后,對一級“單元”緩存進(jìn)行循環(huán)查找,當(dāng)找到第一個(gè)處于“空”狀態(tài)的“單元”緩存時(shí),則將消息存放入該“單元”緩存,然后該“單元”緩存置為“滿”狀態(tài),再根據(jù)該消息的優(yōu)先級建立二級緩存隊(duì)列,如果該消息為緊急消息,則將該消息的指針存入二級緩存的緊急消息指針隊(duì)列中,同時(shí),置一個(gè)中斷信號,上層應(yīng)用收到中斷信號后,開始提取緊急消息。如果該消息為非緊急消息,則根據(jù)該消息的msgid將它的指針存入相應(yīng)的非緊急消息msgid指針隊(duì)列中。如此反復(fù)進(jìn)行循環(huán)存放。
應(yīng)用軟件收到緊急消息提取中斷信號后,直接從二級緩存的緊急消息指針隊(duì)列中找到緊急消息指針,通過指針找到第一級緩存中緊急消息的實(shí)際存放位置,從第一級緩存中該條消息的“單元”緩存提取該條消息,然后將該“單元”緩存的狀態(tài)置為“空”狀態(tài)。如此反復(fù)進(jìn)行緊急消息的提取。
應(yīng)用軟件周期性查詢二級緩存非緊急消息的msgid指針隊(duì)列,當(dāng)發(fā)現(xiàn)某個(gè)msgid指針隊(duì)列非空時(shí),則調(diào)用相應(yīng)的消息提取接口,從該msgid指針隊(duì)列中找到消息的指針,通過指針找到第一級緩存中該條消息的實(shí)際存放位置,從一級緩存中該條消息的“單元”緩存提取該條消息,然后將該“單元”緩存狀態(tài)置為“空”狀態(tài)。如此反復(fù)進(jìn)行非緊急消息的提取。
由于第二級緩存時(shí)按照優(yōu)先級對接收消息的又一次排序,為了降低內(nèi)存消耗,所以第二級緩存隊(duì)列采用指針隊(duì)列的形式,消息的實(shí)際存放空間仍在第一級緩存中。因此,第一級緩存中的消息變成了離散式的緩存,所以第一級緩存采用“單元”式的管理方式,實(shí)時(shí)更新“空”“滿”狀態(tài)對“單元”緩存循環(huán)利用。
按照gjb289a協(xié)議要求,命令字中除了“數(shù)據(jù)字計(jì)數(shù)”5位以外還剩11位描述一條消息,最多有2^11(2048)條消息,所以最多有2048個(gè)消息id。所以給常規(guī)消息建立2048個(gè)消息隊(duì)列組。
對于緊急消息的接收可以采用中斷方式,軟件收到中斷信號后開始進(jìn)行消息提取操作,對于非緊急消息,對于非緊急消息,由應(yīng)用軟件主動查詢并做相應(yīng)的接收操作。。
作為bc的mbi發(fā)送消息正常工作需要有五個(gè)配置表配合使用,分別為:消息名與msgid映射表;msgid與命令字(cmd)映射表;子地址與矢量字位映射表;接口控制參數(shù)定義表;總線表。
消息名與msgid映射表:用于描述icd的消息名和msgid的對應(yīng)關(guān)系。包含消息總個(gè)數(shù)n;緊急消息個(gè)數(shù)n;n條緊急消息的消息名描述和msgid描述;n-n條消息的消息名描述和msgid描述。
msgid與cmd映射表:用于描述msgid與消息命令字的對應(yīng)關(guān)系。包含消息總個(gè)數(shù)n;緊急消息個(gè)數(shù)n;n條緊急消息的msgid描述和cmd描述;n-n條非緊急消息的msgid描述和cmd描述。
子地址與矢量字位映射表:用于描述每個(gè)終端對應(yīng)的各位子地址對應(yīng)的矢量字位數(shù)。包含終端個(gè)數(shù)n;n個(gè)終端的矢量字使用方式描述。
接口控制參數(shù)定義表:用于存放總線消息的配置信息。包括rt設(shè)備號;消息發(fā)送間隔;狀態(tài)字響應(yīng)時(shí)間間隔;狀態(tài)字響應(yīng)超時(shí)門限;dt(devicetimer)時(shí)鐘基值;wdt1(watchdogtimer)的時(shí)鐘加載值;wdt2的遠(yuǎn)程加載值;終端參數(shù)定義(包括有效終端號,終端屬性);消息名與msgid映射表版本號;msgid與命令字映射表版本號;子地址與矢量字位映射表版本號;子地址與矢量字位映射表版本號;接口控制參數(shù)定義表版本號;
總線表:用于描述緊急消息表、周期消息表、異步消息表。包括緊急消息個(gè)數(shù);緊急消息內(nèi)容;周期消息個(gè)數(shù);小周期值;小周期個(gè)數(shù);周期消息內(nèi)容;異步消息數(shù)目,異步消息內(nèi)容;
1)bc的數(shù)據(jù)發(fā)送如圖3所示,作為bc的mbi上電時(shí),fpga固件程序從flashmem模塊中讀取配置文件,將消息名與msgid映射表上傳給應(yīng)用軟件;將緊急消息表、異步消息表、非緊急消息表根據(jù)msgid與命令字映射表的映射關(guān)系存入消息緩存模塊;讀取子地址與矢量字對應(yīng)關(guān)系映射表的內(nèi)容存入消息刷新模塊;
應(yīng)用軟件有消息刷新時(shí),通過消息名與msgid匹配模塊,由消息名與msgid映射表的對應(yīng)關(guān)系找到消息名對應(yīng)的msgid,軟件根據(jù)msgid向msgid與命令字匹配模塊下發(fā)消息。
msgid與命令字匹配模塊收到msgid后,識別消息的優(yōu)先級,并將消息送入消息緩存模塊。消息緩存模塊根據(jù)msgid與命令字映射表對應(yīng)關(guān)系,找到msgid對應(yīng)的命令字,如果是緊急消息或異步消息,則直接將消息發(fā)送給收發(fā)器模塊,如果是非緊急消息,則將消息送入消息刷新模塊判斷消息的刷新狀態(tài)。
消息刷新模塊收到消息后首先判斷消息類型,如果是bc到rt的消息,則檢測消息刷新標(biāo)記,如果消息刷新標(biāo)記置一則將消息送給收發(fā)器模塊,如果是rt到bc的消息,則檢查矢量字標(biāo)記,如果對應(yīng)的矢量字位被置為1,則將該消息發(fā)送給收發(fā)器模塊。
收發(fā)器模塊收到消息后直接將消息送往gjb289a總線。
bc的接收流程與rt相同。
2)作為rt的mbi的接收及其發(fā)送處理如圖4所示。上電初始化時(shí),驅(qū)動程序從flashmem模塊中提取msgid與命令字對應(yīng)關(guān)系映射表文件,并保存到相應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,矢量字更新模塊讀取子地址與矢量字對應(yīng)關(guān)系映射表內(nèi)容,同時(shí)時(shí)鐘管理模塊讀取“接口參數(shù)定義”文件,進(jìn)行初始化時(shí)鐘等操作。
接收時(shí),收發(fā)器模塊按照總線消息接收時(shí)序,將所有消息保存至本地的接收隊(duì)列中,同時(shí)置驅(qū)動中斷開始接收數(shù)據(jù)。驅(qū)動程序按照接收時(shí)序?qū)⑺邢⒈4嬷两邮贞?duì)列一級緩存中,同時(shí)根據(jù)初始化時(shí)取的msgid與命令字對應(yīng)關(guān)系映射表內(nèi)容對消息進(jìn)行分類,緊急消息和非緊急消息用不同的隊(duì)列保存在接收二級緩存中。
接收隊(duì)列二級緩存中的消息通過msgid與消息名匹配模塊交給應(yīng)用層進(jìn)行數(shù)據(jù)提取。
rt作為發(fā)送端時(shí),應(yīng)用軟件根據(jù)“消息名與msgid映射表”找到消息名對應(yīng)的msgid之間的對應(yīng)關(guān)系。通過msgid與消息名匹配模塊將消息發(fā)送給msgid與命令字匹配模塊,該模塊根據(jù)msgid與命令字映射表按照命令字中對rt地址和子地址的約束將該條消息的數(shù)據(jù)字內(nèi)容發(fā)送給數(shù)據(jù)字存儲模塊。此時(shí)矢量字更新模塊根據(jù)數(shù)據(jù)字存儲模塊數(shù)據(jù)更新的信息,結(jié)合上電初始化時(shí)讀取的子地址與矢量字對應(yīng)關(guān)系文件內(nèi)容,更新矢量字。
3)作為bm的mbi,僅需接收消息,如圖5所示,上傳消息為按照接收消息時(shí)序排列的第一級緩存的消息。bm消息在上傳應(yīng)用進(jìn)行消息顯示、處理的同時(shí),進(jìn)行寫文件存儲,以方便進(jìn)行數(shù)據(jù)回放。
以下分別為作為bc、rt、bm的mbi的消息收發(fā)流程描述:
1)作為bc的mbi:
如圖6所示,發(fā)送消息緩存控制器模塊與pc接口相連,接收應(yīng)用刷新的消息寫入消息緩存,發(fā)送消息緩存控制器連接的是消息發(fā)送調(diào)度控制器模塊,該模塊控制器消息發(fā)送的調(diào)度??偩€表控制器模塊以及異步表控制器模塊都與消息發(fā)送調(diào)度控制器相連,調(diào)度器模塊在總線表控制器和異步表控制器的配合下讀取消息發(fā)送緩存的消息送入消息收/發(fā)控制器,消息收發(fā)控制器在發(fā)送消息時(shí)將消息送入編解碼器模塊,生成消息編碼數(shù)據(jù)發(fā)送的總線上,當(dāng)編解碼器從總線上接收到消息后,由消息發(fā)送/接收控制器送往接收消息緩存控制器,接收消息緩存控制器查找msgid與cmd映射表,將消息保存到接收消息大隊(duì)列。應(yīng)用讀取消息時(shí),接收消息緩存控制器從接收消息大隊(duì)列讀取消息送到pc端接口。
2)作為rt的mbi:
如圖7所示,pc端應(yīng)用通過接口將數(shù)據(jù)字刷新到數(shù)據(jù)字緩存管理模塊,數(shù)據(jù)字緩存管理模塊將刷新的消息暫存入數(shù)據(jù)字緩存中。與數(shù)據(jù)字緩存管理模塊相連的消息收發(fā)處理控制器模塊讀取數(shù)據(jù)字時(shí),數(shù)據(jù)字緩存管理模塊將數(shù)據(jù)字緩存中的消息讀出送到消息收發(fā)處理器,消息收發(fā)處理器將要發(fā)送消息送入編解碼器,生成編碼數(shù)據(jù)送到總線上。當(dāng)編解碼器接收到總線上的消息并送入消息收發(fā)控制器,根據(jù)接收處理規(guī)則將對應(yīng)的消息送入rt接收緩存控制器,接收緩存控制器將消息依次放到消息接收緩存中。應(yīng)用需要讀取消息時(shí),通過pc與設(shè)備接口從消息接收緩存提取消息數(shù)據(jù)。接收到的消息在消息收發(fā)控制器中經(jīng)過消息內(nèi)容提取后,送入wdt控制器模塊控制設(shè)備的硬件看門狗,并向應(yīng)用提供中斷信號。
3)作為bm的mbi:
如圖8所示,bm總線監(jiān)視器模塊主要是對總線信息進(jìn)行監(jiān)聽的終端,編解碼器從總線上解碼消息后送入bm消息接收處理控制器,該控制器根據(jù)消息類型將消息和消息屬性送入到消息接收緩存控制器,消息接收緩存控制器將消息暫存入消息接收緩存。應(yīng)用通過pc接收提取消息是,消息接收緩存控制器讀取消息接收緩存將數(shù)據(jù)送到設(shè)備與pc的接口,實(shí)現(xiàn)消息是提取。