如何在SDL中調(diào)用C語言函數(shù)_第1頁
如何在SDL中調(diào)用C語言函數(shù)_第2頁
如何在SDL中調(diào)用C語言函數(shù)_第3頁
如何在SDL中調(diào)用C語言函數(shù)_第4頁
如何在SDL中調(diào)用C語言函數(shù)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

如何在SDL中調(diào)用C語言函數(shù)摘

要:從實(shí)際工作出發(fā),提出了在SDL中調(diào)用C語言函數(shù)的必要性,并給出了SDL語言中使用C語言數(shù)據(jù)類型、公共變量以及調(diào)用C語言函數(shù)的方法。這種方法具有很強(qiáng)的實(shí)用性,大大提高了工作效率,加快了實(shí)時(shí)多任務(wù)系統(tǒng)多任務(wù)系統(tǒng)應(yīng)用軟件的開發(fā)。此方法實(shí)際應(yīng)用于第三代移動通信系統(tǒng)TD-SCDMATD-SCDMA高層信令信令的開發(fā),收到了良好效果。關(guān)鍵詞:進(jìn)程

SDL

實(shí)時(shí)多任務(wù)系統(tǒng)

TD-SCDMA

C語言函數(shù)

數(shù)據(jù)類型

公共變量

SDL(SpecificationandDescriptionLanguage)是CCITT推薦的規(guī)范描述語言。經(jīng)過ITU-T的發(fā)展和標(biāo)準(zhǔn)化,定義在藍(lán)皮書Z.100建議中。1988年推出第一個(gè)正式版,以后每四年進(jìn)行一次增補(bǔ)更新。作為國際標(biāo)準(zhǔn)化的正式語言,用來規(guī)范描述實(shí)時(shí)系統(tǒng)。目前SDL-2000是SDL最新版本。作為SDL相關(guān)技術(shù)Z.120建議——消息序列圖MSC(MessageSequenceCharts)和Z.105建議——抽象語法符號ASN.1(AbstractSyntaxNotationOne)和SDL一起形成一個(gè)完整的描述語言。本文中介紹的SDL軟件由TelelogicTauAB公司提供。在協(xié)議軟件的開發(fā)流程中,SDL應(yīng)用在系統(tǒng)規(guī)范描述和設(shè)計(jì)階段。它完全獨(dú)立于硬件實(shí)現(xiàn)和操作系統(tǒng)。TelelogicTau公司提供的SDL軟件不僅可以用于規(guī)范描述和設(shè)計(jì),它還可以把SDL的描述和設(shè)計(jì)直接生成標(biāo)準(zhǔn)的C代碼;用戶也可以直接在SDL描述和設(shè)計(jì)中嵌入C代碼,從而完成部分功能。經(jīng)SDL描述產(chǎn)生的C代碼(包括嵌入的C代碼)可以直接與多種嵌入式(或非嵌入式)實(shí)時(shí)多任務(wù)操作系統(tǒng)(RTOS)集成,如NUCLUES、pSOS、Solaris、Vrtx、OSE等。集成后的代碼可以直接在目標(biāo)板上運(yùn)行,從而方便用戶進(jìn)行協(xié)議軟件的開發(fā)。雖然SDL軟件具有很強(qiáng)的開發(fā)功能,但是在重慶郵電學(xué)院信科公司的TD-SCDMA系統(tǒng)高層信令的二三層開發(fā)中,也遇到了許多問題,主要有:(1)由于TD-SCDMA系統(tǒng)的高層信令是由幾個(gè)部門共同負(fù)責(zé)的,除了二三層以外還有MMI和物理層控制部分的軟件,不可能將各個(gè)部門統(tǒng)一使用SDL軟件共同完成系統(tǒng)的信令開發(fā)工作。每個(gè)部門最終提供的應(yīng)該是標(biāo)準(zhǔn)的C語言源代碼源代碼,最后在實(shí)時(shí)操作系統(tǒng)上集成。利用SDL軟件生成的C源代碼,不便于和其它部分的代碼相互集成。(2)高層二三層信令是一個(gè)很復(fù)雜的系統(tǒng),各個(gè)進(jìn)程之間需要大量的數(shù)據(jù)交換,而SDL要求所有進(jìn)程間的數(shù)據(jù)交流必須通過信號來完成(雖然可以使用SDL的VIEW功能,但使用不方便)。在系統(tǒng)啟動后,很多數(shù)據(jù)需要進(jìn)行通信,系統(tǒng)資源將被白白浪費(fèi)在通信上面。但是SDL的測試功能特別強(qiáng)大,可以從不同角度對SDL描述進(jìn)行測試,發(fā)現(xiàn)錯(cuò)誤及時(shí)返回進(jìn)行修改。如果沒有SDL的TTCN測試,所有設(shè)計(jì)結(jié)果在硬件平臺上測試將困難重重,即使可以對硬件平臺運(yùn)行結(jié)果進(jìn)行跟蹤,也始終沒有TTCN測試結(jié)果MSC圖方便。并且SDL可以對系統(tǒng)任何部分獨(dú)立測試。在SDL設(shè)計(jì)結(jié)果和RTOS系統(tǒng)集成之前,基本保證了SDL設(shè)計(jì)階段的正確性,減少了繁瑣的板級代碼調(diào)試,從而可在較短時(shí)間內(nèi)將SDL設(shè)計(jì)結(jié)果移植到硬件工作平臺,提高了工作效率。為了SDL軟件的設(shè)計(jì)結(jié)果既可以被SDL軟件的TTCN測試又可以直接和其它C語言源代碼集成,必須解決一個(gè)問題——如何在SDL中調(diào)用C語言函數(shù)。實(shí)現(xiàn)模式SDL內(nèi)核對SDL進(jìn)程的管理采用了消息驅(qū)動事件的方法,SDL內(nèi)核對SDL進(jìn)程的調(diào)度是根據(jù)消息隊(duì)列中的消息來進(jìn)行的。如圖1,表明了SDL進(jìn)程、SDL內(nèi)核和SDL信號隊(duì)列的關(guān)系。

SDL圖形描述轉(zhuǎn)換成C源代碼,沒有系統(tǒng)(system)和功能塊(block)的概念,只有進(jìn)程和通信,它們由SDL內(nèi)核程序管理和協(xié)調(diào)。在各個(gè)進(jìn)程間沒有全局變量,所有的數(shù)據(jù)交換都要通過信號來傳遞。一個(gè)進(jìn)程要發(fā)送信號到另外一個(gè)進(jìn)程,需要先發(fā)送到SDL信號隊(duì)列中等待SDL內(nèi)核程序的處理。在實(shí)時(shí)多任務(wù)系統(tǒng)的編程中,最關(guān)心的是狀態(tài)的劃分和在什么狀態(tài)下收到什么信號以及做何種處理。所以在SDL中,應(yīng)該利用標(biāo)準(zhǔn)C語言源代碼對數(shù)據(jù)、信號定義并對收到的信號進(jìn)行處理。要求這部分代碼既能在SDL中進(jìn)行測試又可以在實(shí)時(shí)操作系統(tǒng)中使用。在整個(gè)開發(fā)過程中,始終堅(jiān)持這樣一個(gè)原則,利用SDL來劃分通信模塊,在協(xié)議中規(guī)定的原語盡量用信號來傳遞,而非標(biāo)準(zhǔn)的信息則使用公共變量,進(jìn)程的代碼利用C語言來實(shí)現(xiàn);最后利用TTCN進(jìn)行全面的面的測試。在TD-SCDMA信令設(shè)計(jì)中證實(shí)這種設(shè)想可行。圖2就是TD-SCDMA系統(tǒng)部分高層軟件的開發(fā)模式圖。

在開發(fā)的初始階段,根據(jù)TD-SCDMA系統(tǒng)協(xié)議TSM,考慮將系統(tǒng)劃分成多少個(gè)進(jìn)程,各進(jìn)程間需要哪些信號及全局變量數(shù)據(jù),然后定義數(shù)據(jù)類型、編寫C語言源代碼。所有C源代碼是按照在什么狀態(tài)下接收什么信號,處理以后發(fā)送什么信號格式來完成。這樣編寫的代碼既可以在RTOS中應(yīng)用,又可以滿足SDL的要求,方便TTCN的測試。如圖2利用標(biāo)準(zhǔn)C完成的源代碼可以和SDL相互集成,并且進(jìn)行TTCN測試;同時(shí)又可以和RTOS系統(tǒng)集成,在實(shí)際硬件環(huán)境中運(yùn)行。完成的C語言源代碼,經(jīng)過TTCN測試后,保證了信號處理的正確性。在軟件開發(fā)后期,只需根據(jù)協(xié)議變換作適當(dāng)?shù)某绦蛐薷暮虲語言源代碼的移植即可。在SDL的說明文檔中,提到了怎樣將C語言函數(shù)應(yīng)用于SDL系統(tǒng);但是這種方法經(jīng)過多次實(shí)驗(yàn)效果均不理想,即使能夠?qū)崿F(xiàn)也是受到諸多限制。所以舍棄了SDL提供的方法,最終找到了一種切實(shí)可行的方法,方法如3小節(jié)描述。實(shí)現(xiàn)過程C源代碼不能直接在SDL中使用。首先應(yīng)該利用sdth2sdl.exe軟件將C語言的頭文件轉(zhuǎn)換成SDL的文本描述(PR描述),如圖3。然后在SDL的Organizer界面中,將文本描述轉(zhuǎn)換成圖形描述方式,它以SDL的SUN文件形式存在。最后在設(shè)計(jì)的SDL系統(tǒng)中利用use關(guān)鍵字聲明即可。具體如下:(1)利用sdth2sdl.exe程序轉(zhuǎn)換C語言頭文件。sdth2sdl.exe是TelelogicTauAB公司提供的可執(zhí)行文件。在使用該文件時(shí),需要操作系統(tǒng)裝有MSC7.00或是MSVC++編譯器(不能是BorlandC編譯器)。sdth2sdl.exe自動調(diào)用標(biāo)準(zhǔn)C的編譯器,進(jìn)行C語法檢查,再將C部分代碼轉(zhuǎn)化成SDL的PR格式。sdth2sdl.exe只檢查頭文件的數(shù)據(jù)類型、數(shù)據(jù)定義以及函數(shù)的聲明。在該過程中,不檢查具體C語言函數(shù)的語法。實(shí)際上,C語言函數(shù)不能直接轉(zhuǎn)換成SDL的圖形描述或文本描述方式。為了方便使用sdth2sdl工具,sdth2sdl是一個(gè)可以帶參數(shù)的DOS程序,格式為:sdth2sdl

[參數(shù)選項(xiàng)]

要轉(zhuǎn)換的C語言頭文件它的參數(shù)選項(xiàng)如表1。在實(shí)際應(yīng)用中,最常用的參數(shù)選項(xiàng)有n、s、I三個(gè)參數(shù)選項(xiàng)。(2)將SDL的PR文件轉(zhuǎn)換成GR方式。利用SDTH2SDL程序生成一個(gè)以PR為擴(kuò)展名的SDLPackage文件。在SDL的Organizer界面的Generate菜單中有“ConverttoGR...”選項(xiàng),利用SDL的ConverttoGR對話框完成PR文件到GR格式的轉(zhuǎn)換。生成的SDLPackage文件的名字是SDLPR描述內(nèi)部指定的名字。(3)在SDL系統(tǒng)中聲明。在SDL進(jìn)程中,不能直接使用C語言的數(shù)據(jù)類型、變量定義和函數(shù),上面生成的是SDLPackage文件,需要在system中利用SDL關(guān)鍵字use加以聲明。格式為usepackage文件名。這樣可以在SDL進(jìn)程中任意使用C語言頭文件的函數(shù)、數(shù)據(jù)類型及變量。雖然這些定義在SDL中都可以使用,但是它們還必須遵守SDL調(diào)用C變量和函數(shù)的規(guī)則。①變量調(diào)用由于SDL可以調(diào)用C語言函數(shù),基本上系統(tǒng)所有的處理由C語言函數(shù)來完成。所以在SDL和C源代碼所用的公共變量很少,僅僅只有一些SDL專用的數(shù)據(jù),例如控制SDL的分支等。調(diào)用格式為:變量賦值:CallSet_變量名去變量值:CallGet_變量名②數(shù)據(jù)類型引用雖然整個(gè)系統(tǒng)的任務(wù)在C源代碼中完成,但是在進(jìn)行信號處理時(shí),SDL需要保存信號到變量中(SDL描述要求),信號類型在C語言中定義。C語言數(shù)據(jù)類型轉(zhuǎn)換成SDL數(shù)據(jù)類型時(shí),保持了原來的數(shù)據(jù)類型名字,在SDL中只要按照SDL規(guī)則定義數(shù)據(jù)即可。③函數(shù)調(diào)用C語言函數(shù)的調(diào)用和變量調(diào)用、數(shù)據(jù)類型引用基本相同,需要注意的是函數(shù)的參數(shù)。調(diào)用格式:Call函數(shù)名字(函數(shù)需要的實(shí)參)由于C語言編寫的C函數(shù)中可以使用全局變量,大大方便了C語言在SDL中的應(yīng)用,需要處理的公共數(shù)據(jù)可以不以SDL信號方式進(jìn)行傳遞。例如在TD-SCDMA高層信令的設(shè)計(jì)中,小區(qū)信息以及系統(tǒng)消息是很多進(jìn)程都需要使用的,就可以作為全局變量使用。舉例說明下面的例子是在空閑狀態(tài)下收到來自物理層的測量報(bào)告IdleNcellMeasInd信號和發(fā)送到物理層進(jìn)行小區(qū)BSIC解讀的BsicDecodeReq請求信號。將分以下幾個(gè)步驟來說明:(1)C語言頭文件trr.h的編寫所有在SDL中調(diào)用到的數(shù)據(jù)類型、全局變量和函數(shù)必須在C語言頭文件中聲明,只有聲明過的才能在SDL中調(diào)用或引用。在頭文件中可以使用任何標(biāo)準(zhǔn)C語法。在下面的頭文件中,由于篇幅關(guān)系,沒有給出詳細(xì)的下級數(shù)據(jù)類型的定義。#ifndef__TRR__#define__TRR__typedefstructMessageHeader}

int

header;

/*實(shí)時(shí)操作系統(tǒng)的數(shù)據(jù)頭,不同的RTOS的T_MsgHeaher定義不相同*/{T_MessageHeader;typedefstructt_IdleNcellMeasIndTag}

int

numMeas;

/*鄰近小區(qū)數(shù)*/

NcellList

ncellList;

/*鄰近小區(qū)標(biāo)識表*/

intrscpLevelList[MAX_NCELL];

/*鄰近小區(qū)功率測量結(jié)果*/{T_IdleNcellMeasInd;typedefstructh_t_IdleNcellMeasInd}

T_MessageHeadersignalHeader;

/*實(shí)時(shí)多任務(wù)系統(tǒng)頭標(biāo)識*/

T_IdleNcellMeasIndIdleNcellMeasInd;

/*鄰近小區(qū)測量數(shù)據(jù)*/{H_T_IdleNcellMeasInd;typedefstructt_BsicDecodeReqTag}

NcellNccDecode

ncc;

/*鄰近小區(qū)BSIC數(shù)據(jù)*/{T_BsicDecodeReq;typedefstructh_t_BsicDecodeReq}

T_MsgHeader

signalHeader;

T_BsicDecodeReq

BsicDecodeReq;{H_T_BsicDecodeReq;externH_T_IdleNcellMeasInd

s_trr_IdleNcellMeasInd;

/*接收處理的變量*/externH_T_BsicDecodeReq

s_trr_BsicDecodeReq;

/*需要發(fā)送的變量*/inttrr03_01IdleNcellMeasInd(H_T_IdleNcellMeasInd*p);

/*收到測量的處理程序*//*#include″trr.c″*/#endif在trr.h中,使用sdth2sdl時(shí)應(yīng)該將#include“trr.c”屏蔽,不需要將trr.c文件編譯和轉(zhuǎn)換成SDL的文本描述。但在生成SDL的TTCN或Simulator、Validator的可執(zhí)行文件時(shí),需要將C語言屏蔽符/**/去掉。這樣在生成可執(zhí)行文件時(shí),SDL將trr.c定義的內(nèi)容和SDL描述直接匯合編譯連接在一起。(2)C語言函數(shù)trr.c的編寫在C語言頭文件中聲明的全局變量和函數(shù)實(shí)體都是在C源代碼中定義的。在trr.c文件中定義s_trr_IdleNcellMeasInd、s_trr_BsicDecodeReq全局變量和inttrr03_01IdleNcellMeasInd()函數(shù)。C語言函數(shù)不直接轉(zhuǎn)換成SDL描述,可以支持標(biāo)準(zhǔn)C語言的所有使用方法。#include“trr.h”H_T_IdleNcellMeasInds_trr_IdleNcellMeasInd;

/*定義接收信號的變量*/H_T_BsicDecodeReq

s_trr_BsicDecodeReq;

/*定義發(fā)送信號的變量*/inttrr03_01IdleNcellMeasInd(H_T_IdleNcellMeasInd*p)}

inttempCount;

intrscp[MAX_NCELL];

s_trr_BsicDecodeReq.signalHeader=p->signalHeader;

rscp[tempCount]=p->IdleNcellMeasInd.RscpLev-

elList[tempCount];

/*保存測量*/

s_trr_BsicDecodeReq.BsicDecodeReq.ncc.numMeas=10;for(tempCount=0;tempCount}

s_trr_BsicDecodeReq.BsicDecodeReq.ncc.frequency

NUM_NCELLS]=tempCount;

s_trr_BsicDecodeReq.BsicDecodeReq.ncc.syncCode

[NUM_NCELLS]=tempCount;

s_trr_BsicDecodeReq.BsicDecodeReq.ncc.syncDiff

[NUM_NCELLS]=tempCount;{returnTRR_IDL;

/*#defineTRR_IDL1*/{

/*函數(shù)的返回值表明是否需要發(fā)送BsicDecodeReq信號*/在該例子中,函數(shù)返回值決定了是否需要發(fā)送BsicDecodeReq信號到物理層。利用這種方法可以確定SDL描述的分支處理。(3)sdth2sdl的使用編寫完成trr.h文件后,就可以將trr.h文件轉(zhuǎn)換成SDL的文本描述,在DOS系統(tǒng)提示符下執(zhí)行下列命令:sdth2sdl-ntrr-sc:td_scdmaprtsm_trr.pr-o″-Ic:bc5include-Ic:tdscdmatrrinclude″trr.h在編譯過程中,如果C語言源代碼編寫不正確,將有錯(cuò)誤提示。必須根據(jù)提示修正所有的錯(cuò)誤(每個(gè)頭文件的最后一行必須是空行),直到生成正確的tsm_rr.pr文件。在tsm_rr.pr文件中指明

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論