閱讀 | 訂閱
閱讀 | 訂閱
控制系統(tǒng)

基于嵌入式TCP/IP軟件體系結(jié)構(gòu)的優(yōu)化設(shè)計(jì)與實(shí)現(xiàn)(一)

星之球激光 來源:中國自動(dòng)化網(wǎng)2012-02-15 我要評(píng)論(0 )   

摘要: 本文提出一種基于嵌入式TCP/IP軟件體系結(jié)構(gòu)的優(yōu)化設(shè)計(jì)和解決方案,通過分析在嵌入式系統(tǒng)上實(shí)現(xiàn)TCP/IP的速度、程序結(jié)構(gòu)、內(nèi)存需求等特點(diǎn),優(yōu)化設(shè)計(jì)了清晰的TCP/IP和...

摘  要:  本文提出一種基于嵌入式TCP/IP軟件體系結(jié)構(gòu)的優(yōu)化設(shè)計(jì)和解決方案,通過分析在嵌入式系統(tǒng)上實(shí)現(xiàn)TCP/IP的速度、程序結(jié)構(gòu)、內(nèi)存需求等特點(diǎn),優(yōu)化設(shè)計(jì)了清晰的TCP/IP和應(yīng)用層接口、防止多余的內(nèi)存拷貝和實(shí)現(xiàn)數(shù)據(jù)包整序重發(fā)/窗口控制。最后給出了嵌入式TCP/IP的性能評(píng)價(jià)。


 

關(guān)鍵詞: 嵌入式系統(tǒng);TCP/IP;軟件體系結(jié)構(gòu);優(yōu)化設(shè)計(jì)

    隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)和電子信息技術(shù)的迅猛發(fā)展,Internet的普及,接入Internet的非PC設(shè)備越來越多,各類電子設(shè)備像Web個(gè)人數(shù)字助理、Web可視電話、TV機(jī)頂盒接入Internet的需求也越來越大,嵌入式TCP/ IP的Internet網(wǎng)絡(luò)化將成為網(wǎng)絡(luò)發(fā)展的趨勢(shì)。

    嵌入式系統(tǒng)中大量存在的是8/16位低速處理器,在進(jìn)行Internet接入時(shí),嵌入式TCP/IP對(duì)于計(jì)算機(jī)存儲(chǔ)器、運(yùn)算速度要求比較高,占用大量系統(tǒng)資源,因而常嵌入TCP/IP協(xié)議簇的子集或用UDP代替TCP實(shí)現(xiàn)。

    本文提出一種基于嵌入式TCP/IP軟件體系結(jié)構(gòu)的優(yōu)化設(shè)計(jì)和實(shí)現(xiàn)方案,從實(shí)現(xiàn)相應(yīng)的功能又節(jié)省系統(tǒng)資源角度出發(fā),對(duì)嵌入TCP/IP優(yōu)化設(shè)計(jì),實(shí)現(xiàn)嵌入式的Internet接入。

嵌入式TCP/IP接入方法

    嵌入式電子設(shè)備接入Internet有多種解決方案:在低速微處理器運(yùn)行剪裁的TCP/IP協(xié)議棧;使用一些ASIC實(shí)現(xiàn)TCP/IP的芯片如 ADI的Internet Modem;也可以使用嵌入式操作系統(tǒng)自帶的完整的TCP/IP協(xié)議棧。在某些對(duì)網(wǎng)絡(luò)速度要求不高的領(lǐng)域,可以精簡的TCP /IP實(shí)現(xiàn);在對(duì)性能要求高的場(chǎng)合,則可以選擇后兩種方案。嵌入式設(shè)備接入Internet網(wǎng)絡(luò)常用的方案比較如表1所示。

    但以上接入方法一般專門為某種微處理器設(shè)計(jì),不具有通用性,而且效率較低或功能不夠全面[3]。本文提出的經(jīng)過優(yōu)化設(shè)計(jì)的嵌入式TCP/IP適合移植到各種嵌入式處理器中,如單片機(jī)、ARM或ARM+FPGA多核嵌入式處理器中,具有較小的代碼量、RAM使用量和較高的效率,同時(shí)支持套接字形式的多個(gè)TCP連接和多個(gè)網(wǎng)絡(luò)設(shè)備連接,支持通過網(wǎng)關(guān)發(fā)送數(shù)據(jù)包和數(shù)據(jù)包轉(zhuǎn)發(fā),支持TCP包的整序、重發(fā)和窗口控制流量控制等等。

嵌入式TCP/IP的軟件體系結(jié)構(gòu)與優(yōu)化設(shè)計(jì)

嵌入式TCP/IP軟件體系結(jié)構(gòu)

    與PC TCP/IP協(xié)議相似,嵌入式TCP/IP采用協(xié)議分層的結(jié)構(gòu):應(yīng)用層、TCP層、IP層和網(wǎng)絡(luò)設(shè)備接口層[4]。圖1描述了嵌入式TCP/IP輸入和輸出數(shù)據(jù)包流程以及調(diào)用的函數(shù)。


 


 

圖1 基于嵌入式TCP/IP接口結(jié)構(gòu)


 

    其中,Timer()函數(shù)調(diào)用TCPTimer()處理TCP數(shù)據(jù)包重發(fā),以及調(diào)用每個(gè)接口的Input()函數(shù)接收到達(dá)的數(shù)據(jù)包。Timer()函數(shù)必須在短時(shí)間(一般<20ms)內(nèi)被調(diào)用一次,否則接收數(shù)據(jù)包和TCP定時(shí)等功能將停止。

    輸出時(shí),TCP層先查看unsend隊(duì)列,發(fā)現(xiàn)非空,將數(shù)據(jù)包插入隊(duì)列;發(fā)現(xiàn)為空,則查看對(duì)方窗口是否夠大能夠接收這個(gè)數(shù)據(jù)包,然后填寫TCP頭部信息。IP層選擇網(wǎng)絡(luò)設(shè)備接口,目的IP和該接口的子網(wǎng)掩碼相與是否等于子網(wǎng)掩碼。然后調(diào)用這個(gè)接口的Output函數(shù)來發(fā)送。


 


 

圖2 基于嵌入式TCP/IP主程序結(jié)構(gòu)


 

    輸入時(shí),Timer()函數(shù)調(diào)用每個(gè)接口的Input函數(shù)。IP層判斷IP版本、IP校驗(yàn)和、判斷是否應(yīng)該轉(zhuǎn)發(fā)數(shù)據(jù)包,然后根據(jù)IP頭部的 protocol字段將包傳給相應(yīng)的高層處理。TCP層,需要判斷TCP校驗(yàn)和,然后在現(xiàn)有的套接字中查找,判斷是否有套接字可以接收這個(gè)數(shù)據(jù)包,判斷 TCP序號(hào)是否為希望的,然后更新這個(gè)連接的狀態(tài)(包括釋放被應(yīng)答的數(shù)據(jù)包和TCP狀態(tài)機(jī)的轉(zhuǎn)化等),調(diào)用該套接字的回調(diào)函數(shù)recv。
圖2程序主流程是一個(gè)大循環(huán),在循環(huán)中處理發(fā)送數(shù)據(jù)包等應(yīng)用層協(xié)議同時(shí)查詢變量bTimeOut,在定時(shí)中斷中將bTimerOut設(shè)置為真,應(yīng)用層在程序流程中反復(fù)查詢bTimerOut是否為真,真則調(diào)用Timer(),然后置bTimerOut為假。

嵌入式TCP/IP設(shè)計(jì)優(yōu)化

    因?yàn)榫W(wǎng)絡(luò)中數(shù)據(jù)非常多,如果把所有的數(shù)據(jù)都讀到內(nèi)存中再判斷是否應(yīng)該丟棄幀顯然效率不高。所以邊讀取數(shù)據(jù)邊判斷而沒有一開始就把整個(gè)幀全部讀到內(nèi)存中,同時(shí)在程序里定義幀中各個(gè)部分的相對(duì)地址,可以方便的對(duì)幀的各個(gè)字節(jié)尋址。這樣的設(shè)計(jì)是基于提高訪問速度考慮的。

    為了減小RAM使用量,當(dāng)數(shù)據(jù)包需要重新發(fā)送時(shí),如果能夠重新產(chǎn)生數(shù)據(jù)包所需的數(shù)據(jù),可以不存儲(chǔ)需要被應(yīng)答的TCP包。圖3給出了嵌入式CPU中TCP/IP的內(nèi)存劃分,以及內(nèi)存中幀的各個(gè)字節(jié)的定義和相對(duì)位置,其中PacketRAM為存放幀的首地址。

    發(fā)送TCP/IP過程中主要的運(yùn)算量集中在三個(gè)部分:應(yīng)用程序?qū)?shù)據(jù)拷貝到RAM、計(jì)算TCP校驗(yàn)和、將RAM中的數(shù)據(jù)包拷貝到網(wǎng)絡(luò)設(shè)備的發(fā)送緩沖區(qū)。對(duì)每一個(gè)字節(jié)數(shù)據(jù),兩次拷貝大致共使用12×2=24個(gè)指令周期;計(jì)算TCP校驗(yàn)和使用為16個(gè)指令周期。為提高速度可采用快速CPU或提高晶振頻率。例如采用12M晶振時(shí),網(wǎng)絡(luò)傳輸速度為25K字節(jié)/s;而在高頻PCB電路板使用233M晶振時(shí),網(wǎng)絡(luò)傳輸速度能達(dá)到為384K字節(jié)/s。

    另外,TCP/IP一般采用C語言或者混合匯編,而使用可重入函數(shù)和一般指針(generic pointer)使得程序代碼增大,運(yùn)行速度變慢.所以使用函數(shù)指針時(shí),應(yīng)手動(dòng)重建調(diào)用樹(Call tree),或?qū)⒑瘮?shù)指針調(diào)用的函數(shù)設(shè)置為可重入函數(shù),同時(shí)使用“指定存儲(chǔ)類型”的指針(memory-specific pointer),防止數(shù)據(jù)包的不必要的拷貝以及優(yōu)化計(jì)算校驗(yàn)和和內(nèi)存拷貝函數(shù)。另外,Reentrant類型的函數(shù)比一般函數(shù)速度要慢很多,但是某些時(shí)候?yàn)榱顺绦蚪Y(jié)構(gòu)的需要必須使用Reentrant,這就需要在速度和結(jié)構(gòu)之間作一個(gè)選擇。
  
 

 

轉(zhuǎn)載請(qǐng)注明出處。

暫無關(guān)鍵詞
免責(zé)聲明

① 凡本網(wǎng)未注明其他出處的作品,版權(quán)均屬于激光制造網(wǎng),未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用。獲本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使 用,并注明"來源:激光制造網(wǎng)”。違反上述聲明者,本網(wǎng)將追究其相關(guān)責(zé)任。
② 凡本網(wǎng)注明其他來源的作品及圖片,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本媒贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系我們刪除。
③ 任何單位或個(gè)人認(rèn)為本網(wǎng)內(nèi)容可能涉嫌侵犯其合法權(quán)益,請(qǐng)及時(shí)向本網(wǎng)提出書面權(quán)利通知,并提供身份證明、權(quán)屬證明、具體鏈接(URL)及詳細(xì)侵權(quán)情況證明。本網(wǎng)在收到上述法律文件后,將會(huì)依法盡快移除相關(guān)涉嫌侵權(quán)的內(nèi)容。

網(wǎng)友點(diǎn)評(píng)
0相關(guān)評(píng)論
精彩導(dǎo)讀