基于SDL的通信協(xié)議開(kāi)發(fā)平臺(tái)
l 引 言
SDL是一種用來(lái)說(shuō)明和描述系統(tǒng)的國(guó)際通用的標(biāo)準(zhǔn)化語(yǔ)言。它將直觀的圖形和固定的格式結(jié)合起來(lái),使開(kāi)發(fā)人員可以簡(jiǎn)潔高效地將規(guī)范和協(xié)議描述出來(lái),SDL的應(yīng)用,可以縮短開(kāi)發(fā)周期,降低系統(tǒng)的差錯(cuò)率,提高軟件質(zhì)量。現(xiàn)在越來(lái)越多的電信設(shè)備開(kāi)發(fā)商開(kāi)始使用SDL進(jìn)行協(xié)議軟件開(kāi)發(fā)。
但SDL并非編程語(yǔ)言,用SDL描述系統(tǒng)以后最終需要將SDL系統(tǒng)映射成實(shí)際程序才有意義,而目前一般是借助于國(guó)外的一些開(kāi)發(fā)工具如SDT提供的SDL和C語(yǔ)言的轉(zhuǎn)換工具來(lái)完成,開(kāi)發(fā)人員通過(guò)編寫SDL系統(tǒng)和環(huán)境的接口函數(shù)來(lái)實(shí)現(xiàn)所生成的代碼和RTOS的集成。這種方法提高了協(xié)議開(kāi)發(fā)的效率,但也有一些缺點(diǎn):設(shè)計(jì)依賴于工具,脫離工具則代碼難以維護(hù)、SDL生成的代碼非常復(fù)雜,不便于修改和閱讀,所以在實(shí)際應(yīng)用中這些工具往往用于協(xié)議驗(yàn)證。
為了提高協(xié)議開(kāi)發(fā)效率,我們?cè)跓o(wú)線通信系統(tǒng)開(kāi)發(fā)中建立一套自主的基于SDL的通信協(xié)議開(kāi)發(fā)平臺(tái),通過(guò)這個(gè)平臺(tái)可以實(shí)現(xiàn)SDL基本元素進(jìn)程以及進(jìn)程之間的通信和RTOS任務(wù)之間的通信,并集成了協(xié)議中常用的定時(shí)器管理功能、內(nèi)存管理功能。
2 SDL介紹
SDL(Specification and Description Language)是1976年至1992年由ITU―T發(fā)展和標(biāo)準(zhǔn)化的一種描述系統(tǒng)行為的語(yǔ)言,SDL的數(shù)學(xué)模型是擴(kuò)展有限狀態(tài)機(jī)(EFSM),是一種高層泛用型的用于事件驅(qū)動(dòng)、實(shí)時(shí)和通信系統(tǒng)的描述語(yǔ)言,電信系統(tǒng)和協(xié)議是它主要應(yīng)用領(lǐng)域之一。SDL有圖形和文本兩種表示形式,SDL/GR和SDL/PR。它既可以用來(lái)對(duì)系統(tǒng)的功能進(jìn)行說(shuō)明,也可以描述系統(tǒng)的內(nèi)部結(jié)構(gòu)和行為,因而應(yīng)用范圍很廣,可以用于協(xié)議工程的各個(gè)階段。SDL采用一種層次結(jié)構(gòu)來(lái)對(duì)系統(tǒng)進(jìn)行描述和說(shuō)明,結(jié)構(gòu)和功能被清楚地劃分。系統(tǒng)可以分為多個(gè)功能塊,功能塊表示系統(tǒng)內(nèi)部功能相對(duì)獨(dú)立的幾個(gè)模塊,它們之間通過(guò)信道相連。根據(jù)系統(tǒng)規(guī)模的大小,每個(gè)功能塊還可以分為子功能塊或進(jìn)程。與傳統(tǒng)FSM類似,SDL進(jìn)程具有有限數(shù)量的被有限數(shù)量躍遷連接著的宏控制狀態(tài)。通過(guò)一個(gè)輸入信號(hào)(也可稱使能條件)的接收、事先設(shè)置的定時(shí)器的定時(shí)或當(dāng)前狀態(tài)變量(連續(xù)信號(hào))值所指定條件的確認(rèn),躍遷能夠被觸發(fā)。在SDL中,定義了一些基本的數(shù)據(jù)類型和操作,以及構(gòu)造新類型的機(jī)制,使得SDL擁有和C/C++語(yǔ)言一樣的數(shù)據(jù)操作能力,因此它可以用于系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。
3 SDL通信協(xié)議開(kāi)發(fā)平臺(tái)構(gòu)成和實(shí)現(xiàn)
SDL通信協(xié)議開(kāi)發(fā)平臺(tái)建立在嵌入式實(shí)時(shí)操作系統(tǒng)上,主要包括4個(gè)模塊:進(jìn)程管理、消息管理、定時(shí)器管理、緩存管理,如圖1所示。其中進(jìn)程管理模塊提供了SDL進(jìn)程的創(chuàng)建、刪除等庫(kù)函數(shù),并提供了SDL功能塊和進(jìn)程的描述表,通過(guò)這張表格可以確定任務(wù)塊和進(jìn)程的從屬關(guān)系。在消息管理模塊提供了進(jìn)程間、進(jìn)程和功能塊間、進(jìn)程和外部任務(wù)間的消息通信函數(shù);定時(shí)器管理和緩沖管理模塊則提供了定時(shí)器的創(chuàng)建、刪除函數(shù)以及緩沖的創(chuàng)建和釋放函數(shù)。
3.1 功能塊和進(jìn)程的實(shí)現(xiàn)
3.1.1 功能塊實(shí)現(xiàn)
采用SDL描述的系統(tǒng)包含若干個(gè)功能塊(block),每個(gè)功能塊內(nèi)至少有一個(gè)進(jìn)程(process),功能塊是用RTOS的任務(wù)直接實(shí)現(xiàn)的不需要開(kāi)發(fā)者單獨(dú)創(chuàng)建,只需在功能塊中預(yù)先定義包含哪些進(jìn)程,SDL系統(tǒng)在初始化時(shí)直接可以創(chuàng)建功能塊。每個(gè)功能塊內(nèi)進(jìn)程的并發(fā)調(diào)度是由功能塊的一個(gè)調(diào)度函數(shù)實(shí)現(xiàn),而功能塊之間的調(diào)度則由操作系統(tǒng)完成。功能塊任務(wù)內(nèi)除了完成個(gè)進(jìn)程狀態(tài)機(jī)的輪詢調(diào)度外,還負(fù)責(zé)接收外部環(huán)境的消息并分發(fā)消息到各個(gè)進(jìn)程狀態(tài)機(jī)中;除此外功能塊任務(wù)還負(fù)責(zé)本功能塊內(nèi)所有進(jìn)程的定時(shí)器管理工作。功能塊內(nèi)部工作流程圖如圖2所示。
3.1.2 進(jìn)程狀態(tài)機(jī)的實(shí)現(xiàn)
c++相關(guān)文章:c++教程
數(shù)字通信相關(guān)文章:數(shù)字通信原理
通信相關(guān)文章:通信原理
評(píng)論