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