引 言
隨著接入網(wǎng)(AN)范圍內(nèi)多種傳輸媒介、多種接入配置和業(yè)務發(fā)展的需要,ITU制定了V5.1接口的G.964建議和V5.2接口的G.965建議。這些標準的制定使得交換機可以通過此接口支持多種類型的用戶接入,其開放性使得交換機和接入網(wǎng)的技術(shù)和業(yè)務完全獨立開來。接入網(wǎng)的發(fā)展可以不受交換機的限制,使得接入網(wǎng)市場完全開放。根據(jù)速率不同,V5接口分為V5.1和V5.2接口。
V5通信接口協(xié)議
V5.1接口由單個2048kbit/S鏈路構(gòu)成,用于支持模擬電話接入以及基于64kbit/S的綜合業(yè)務數(shù)字網(wǎng)(ISDN)基本接入和用于半永久連接的、不加帶外信令信息的其他模擬接入或數(shù)字接入。
V5.2接口按需要可以由1~16個2048kbit/S鏈路構(gòu)成,除了支持V5.1接口提供的接入類型外,還可支持ISDN一次群速率接入。V5.2接口由以下3層組成:第一層,物理層,由1~16個符合ITU的G.703和G.732建議的2Mbit/S的數(shù)據(jù)鏈路構(gòu)成。第二層,數(shù)據(jù)鏈路層,僅對C通路而言,使用的規(guī)程稱為LAPV5,其目的是為了允許靈活地將不同的信息流復用到C通路上去。
它又可進一步分為兩個子層,即數(shù)據(jù)包封裝功能子層(LAPV5-EF)和數(shù)據(jù)鏈路子層(LAPV5-DL)。LAPV5-DL子層完成對V5.2協(xié)議第三層消息的復用。LAPV5-EF 子層通過映射完成對LAPV5-DL幀和ISDND通路信息的復用。第三層,協(xié)議層,包括PSTN協(xié)議、公共控制協(xié)議、鏈路控制協(xié)議、BCC協(xié)議和保護協(xié)議。PSTN協(xié)議負責處理與PSTN業(yè)務相關的信令;公共控制協(xié)議負責協(xié)調(diào)兩端用戶端口狀態(tài)同步及數(shù)據(jù)指配;鏈路控制協(xié)議負責協(xié)調(diào)和實現(xiàn)兩端鏈路相關的控制;BCC協(xié)議負責AN和LE,協(xié)調(diào)完成2Mbit/S鏈路上的承載通路分配;保護協(xié)議在鏈路出現(xiàn)故障時提供通路的切換保護功能。第一層有限狀態(tài)機協(xié)議如圖1所示。
μC/OS-II實時多任務嵌入式系統(tǒng)
V5接口實現(xiàn)中包括5個核心協(xié)議的處理和管理許多定時器,所以對操作系統(tǒng)要求很高。筆者選用μC/OS-II作為其操作系統(tǒng),實現(xiàn)多任務管理及任務間通信等。μC/OS-II最多支持56個任務,任務調(diào)度采用優(yōu)先級搶占調(diào)度算法,總是執(zhí)行就緒態(tài)的優(yōu)先級最高的任務,并支持SemaphorE( 信號量)、Mailbox ( 郵箱)MessageQueuE(消息隊列)等多種常用的進程間通信機制。由于系統(tǒng)中代碼大多是用C語言寫的,有比較好的可移植性。
系統(tǒng)啟動
μC/OS中,多任務內(nèi)核通過調(diào)用OSInit函數(shù)開始執(zhí)行內(nèi)核相關的初始化。OSInit函數(shù)將完成任務控塊、事件控制塊、消息隊列和內(nèi)存管理的初始化等。系統(tǒng)初始化完成后需調(diào)用OS-Start函數(shù)啟動嵌入式內(nèi)核,開始多任務運行。在啟動多任務內(nèi)核前需要至少啟動一個任務。
圖1 協(xié)議??蚣軋D
多任務創(chuàng)建
在μC/OS中,每個任務都是無限循環(huán)的,每個任務都處在以下5種狀態(tài)之一:休眠態(tài)、就緒態(tài)、運行態(tài)、掛起態(tài)和中斷態(tài)。μC/OS中通過調(diào)用OSTaskCreatE或OSTaskCreateExt函數(shù)創(chuàng)建啟動任務。對于每個任務都有惟一的1個優(yōu)先級標識。
任務間同步和通信
在μC/OS中,提供了消息隊列、郵箱和信號量等機制用以實現(xiàn)任務間同步和通信。郵箱可以用來通知一個事件的發(fā)生(發(fā)送一條信息)。在源端的任務通過調(diào)用OSMBoxPost函數(shù)向郵箱寫,在目的端的任務通過調(diào)用OSMBoxPend函數(shù)從郵箱讀。當郵箱為空時調(diào)用OSMBoxPend函數(shù)的任務將被掛起。信號量是一種約定機制:兩個或多個任務通過簡單的信號進行合作,一個任務可以被迫在某一位置停止,直到它接收到一個特定的信號。信號量主要實施3種操作:一個信號量可以初始化為非負數(shù);等待操作使信號量減1,如果值變成負數(shù),則執(zhí)行等待的任務被阻塞;得到CPU使用權(quán)的任務signaL操作使信號量加1,如果值不是正數(shù),則被等待操作阻塞的任務解除阻塞。
函數(shù)的可重入性
可重入函數(shù)是指一個可以同時被多個任務調(diào)用而不會發(fā)生數(shù)據(jù)沖突的函數(shù)。在多任務環(huán)境下,所有可能被多個任務同時調(diào)用的函數(shù)都必須保證其具有可重入性,此函數(shù)可以通過使用局部變量來保證其可重入性。
V5系統(tǒng)設計
V5接口協(xié)議的3層中物理層和數(shù)據(jù)鏈路層部分功能由硬件實現(xiàn)。物理層可用PMC公司生產(chǎn)的大規(guī)模E1接口芯片PMC4354,它是一種可提供4路E1的接口芯片并綜合了成幀器和LIU,其重要特性包括數(shù)據(jù)鏈路接入、報警、中斷、環(huán)回和診斷。處理器選用SUMSUNG 公司的KS32C50100,它內(nèi)置2個HDLC控制器,2個定時器。特別適用在V5接口(封裝功能子層功能和HDLC協(xié)議類似),V5協(xié)議的第三層實現(xiàn)全部基于嵌入式系統(tǒng)編程。
軟件實現(xiàn)框架
對于V5接口的5個核心協(xié)議中的每個協(xié)議都作為一個任務來實現(xiàn)和管理。任務間的消息采用郵件的方式。
軟件實現(xiàn)框架包括3個模塊,如圖2所示。
OS系統(tǒng)模塊
此模塊由μC/OS-II實現(xiàn)系統(tǒng)功能,包括多任務調(diào)度、管理內(nèi)存分配、任務間通信和定時器。
協(xié)議實現(xiàn)模塊
塊主要實現(xiàn)了V5接口的5個核心協(xié)議、第1層有限狀態(tài)機協(xié)議和LAPV5協(xié)議。每個協(xié)議作為一個單獨的任務運行。由于V5接口在運作過程中通話建立和拆除主要由PSTN協(xié)議和BCC協(xié)議完成,所以這2個任務需要有較高的優(yōu)先級。LAPV5任務將來自上層需要發(fā)送給LE的消息數(shù)據(jù)封裝打包并轉(zhuǎn)發(fā)出去。
圖2 軟件實現(xiàn)架構(gòu)
管理模塊
此模塊主要完成AN的管理相關任務。其中包括PSTN端口的狀態(tài)管理,V5界面管理,E1鏈路上承載時隙資源管理和5個核心協(xié)議C-PATH的管理。狀態(tài)管理完成鏈路和端口的狀態(tài)管理,界面管理用來獲取V5接口的設定并完成V5接口的啟動和保護切換。另外,V5接口通過界面管理任務接受來自控制臺或網(wǎng)管系統(tǒng)的維護命令,隨時向上層網(wǎng)管報告V5接口目前的狀況。C-PATH管理用來建立和維護各個C通路。
接口的具體設計
V5接口協(xié)議中每個協(xié)議的處理流程按FSM(FinitEStatEMachine)的方式來完成。FSM 是具有馬爾可夫性的,其目前狀態(tài)僅與前一次的狀態(tài)有關,與其他歷史狀態(tài)無關。它由有限的狀態(tài)和相互之間的轉(zhuǎn)移構(gòu)成,在任何時候只能處于給定數(shù)目的狀態(tài)中的一個。當接收到一個輸入事件時,狀態(tài)機產(chǎn)生一個輸出,同時也可能伴隨著狀態(tài)的轉(zhuǎn)移,其特點是根據(jù)目前的消息和目前的狀態(tài)決定要做的事和以后的狀態(tài)。[!--empirenews.page--]
每個任務用一個結(jié)構(gòu)體數(shù)組來維護其各個實體的狀態(tài)和其他相關的信息。
例如PSTN協(xié)議可以用如下類似的結(jié)構(gòu)體數(shù)組
struct PSTNPORT{
bytE interfaceid;/*保存該PSNT端口實體所屬的V5接口ID*/
unsigned intle portid;/*保存該PSTN端口實體所對應的LE端PSTN實體ID*/
bytE statE;/*該實體的狀態(tài)*/
TIMER t1;/*保存該實體的t1,t2,t3,tr,tt定時器值*/
TIMER t2;
TIMER t3;
TIMER tr;
TIMER tt;
}
每次完成由FSM 產(chǎn)生的動作時更新該數(shù)組,保存該實體相關的新的信息。V5接口中5個主要協(xié)議都是以FSM 的方式來運行的。協(xié)議根據(jù)目前的狀態(tài)和收到的激勵消息在FSM 中找到需要做的動作并完成響應。
考慮到這種特殊的運作方式,任務的實現(xiàn)可以以下列方式來運行。
OSMboxCreatE( ...);/*在任務初始化時,為該任務創(chuàng)建一個郵箱,用來接收其他任務發(fā)送來的消息。*/
for( ;;)
{ bytE statE,stim ,act;
Check Timer Expired();/*檢查TIMER是否timEout*/
OSMboxPend();/*從該任務的郵箱中接受收到的新郵件消息*/
statE= Get Entity ();/*從郵件消息中獲取消息實體,得到該消息是發(fā)給此協(xié)議的那一個實體的,并得到該實體的狀態(tài)。例如,PSTN協(xié)議,則要獲取此消息是發(fā)給PSTN協(xié)議的那個端口*/
stim = Get Stim();/*從郵件消息中獲取用于FSM 的激勵消息*/
act= Do FSM(statE,stim);/*根據(jù)前面獲取的狀態(tài)和激勵消息,得到需要做的動作和下一個狀態(tài).*/
DoAct(act);/*完成由FSM 指定的工作,并轉(zhuǎn)移該實體的狀態(tài).*/
OSMboxPost();/*根據(jù)需要發(fā)送消息通知其他協(xié)議任務*/
}
各個協(xié)議的FSM 方式運作實現(xiàn)都可按上面的框架來完成。
借助于μC/OS-II系統(tǒng)API函數(shù)OSMboxPend,可以從郵箱中收取郵件。當郵箱中有新的郵件時,該函數(shù)返回指針指向新的郵件。若沒有新郵件,該函數(shù)將掛起當前任務,把CPU時間讓給其他任務使用。在DoAct函數(shù)的處理中,用系統(tǒng)的API函數(shù)OSMboxPost發(fā)送郵件給其他任務的郵箱。
定時器的實現(xiàn)
每個任務有一個timer鏈表保存該任務使用的所有定時器。定時器鏈表具有以下的數(shù)據(jù)結(jié)構(gòu)
structv5_timer
{
bytE timerid;/*標示每個TIMER*/
unsigned long period;/*標示定時器的timeout時長*/
bytE timer typE;/*標示定時器的類型*/
unsignedlong starttimE;/*標示定時器啟動的系統(tǒng)時間*/
bytE t_flag ;/*保留用的標記*/
}
要設定一個定時器只需新添加一個TIMER到鏈表中。調(diào)用系統(tǒng)APIOSTimeGet()獲取目前系統(tǒng)時間作為定期器的啟動時間填入定時器結(jié)構(gòu)體的starttimE成員中,給period賦值指定定時器時長。任務循環(huán)的開始部分在接收郵件消息前,將檢查鏈表,通過比較每個TIMER的starttime和目前系統(tǒng)時間的差值來判斷定時器是否到期,如果有定時器到期則插入一條TIMEOUT消息到本任務的郵箱。
結(jié)束語
V5接口在通信網(wǎng)絡中有著廣泛的應用,筆者探討了在開放源碼的μC/OS操作系統(tǒng)上如何實現(xiàn)V5接口,提出了V5接口的軟件實現(xiàn)框架和具體設計方案。在商業(yè)應用上可大大降低開發(fā)成本,對開發(fā)嵌入式操作系統(tǒng)的技術(shù)人員能有所幫助。