• <ul id="ikuqo"></ul>
    <tfoot id="ikuqo"></tfoot>
    <tfoot id="ikuqo"></tfoot>
  • <ul id="ikuqo"><sup id="ikuqo"></sup></ul>
  • 閱讀 | 訂閱
    閱讀 | 訂閱
    控制系統

    基于嵌入式TCP/IP軟件體系結構的優化設計與實現(一)

    星之球激光 來源:中國自動化網2012-02-15 我要評論(0 )   

    摘要: 本文提出一種基于嵌入式TCP/IP軟件體系結構的優化設計和解決方案,通過分析在嵌入式系統上實現TCP/IP的速度、程序結構、內存需求等特點,優化設計了清晰的TCP/IP和...

    摘  要:  本文提出一種基于嵌入式TCP/IP軟件體系結構的優化設計和解決方案,通過分析在嵌入式系統上實現TCP/IP的速度、程序結構、內存需求等特點,優化設計了清晰的TCP/IP和應用層接口、防止多余的內存拷貝和實現數據包整序重發/窗口控制。最后給出了嵌入式TCP/IP的性能評價。


     

    關鍵詞: 嵌入式系統;TCP/IP;軟件體系結構;優化設計

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

        嵌入式系統中大量存在的是8/16位低速處理器,在進行Internet接入時,嵌入式TCP/IP對于計算機存儲器、運算速度要求比較高,占用大量系統資源,因而常嵌入TCP/IP協議簇的子集或用UDP代替TCP實現。

        本文提出一種基于嵌入式TCP/IP軟件體系結構的優化設計和實現方案,從實現相應的功能又節省系統資源角度出發,對嵌入TCP/IP優化設計,實現嵌入式的Internet接入。

    嵌入式TCP/IP接入方法

        嵌入式電子設備接入Internet有多種解決方案:在低速微處理器運行剪裁的TCP/IP協議棧;使用一些ASIC實現TCP/IP的芯片如 ADI的Internet Modem;也可以使用嵌入式操作系統自帶的完整的TCP/IP協議棧。在某些對網絡速度要求不高的領域,可以精簡的TCP /IP實現;在對性能要求高的場合,則可以選擇后兩種方案。嵌入式設備接入Internet網絡常用的方案比較如表1所示。

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

    嵌入式TCP/IP的軟件體系結構與優化設計

    嵌入式TCP/IP軟件體系結構

        與PC TCP/IP協議相似,嵌入式TCP/IP采用協議分層的結構:應用層、TCP層、IP層和網絡設備接口層[4]。圖1描述了嵌入式TCP/IP輸入和輸出數據包流程以及調用的函數。


     


     

    圖1 基于嵌入式TCP/IP接口結構


     

        其中,Timer()函數調用TCPTimer()處理TCP數據包重發,以及調用每個接口的Input()函數接收到達的數據包。Timer()函數必須在短時間(一般<20ms)內被調用一次,否則接收數據包和TCP定時等功能將停止。

        輸出時,TCP層先查看unsend隊列,發現非空,將數據包插入隊列;發現為空,則查看對方窗口是否夠大能夠接收這個數據包,然后填寫TCP頭部信息。IP層選擇網絡設備接口,目的IP和該接口的子網掩碼相與是否等于子網掩碼。然后調用這個接口的Output函數來發送。


     


     

    圖2 基于嵌入式TCP/IP主程序結構


     

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

    嵌入式TCP/IP設計優化

        因為網絡中數據非常多,如果把所有的數據都讀到內存中再判斷是否應該丟棄幀顯然效率不高。所以邊讀取數據邊判斷而沒有一開始就把整個幀全部讀到內存中,同時在程序里定義幀中各個部分的相對地址,可以方便的對幀的各個字節尋址。這樣的設計是基于提高訪問速度考慮的。

        為了減小RAM使用量,當數據包需要重新發送時,如果能夠重新產生數據包所需的數據,可以不存儲需要被應答的TCP包。圖3給出了嵌入式CPU中TCP/IP的內存劃分,以及內存中幀的各個字節的定義和相對位置,其中PacketRAM為存放幀的首地址。

        發送TCP/IP過程中主要的運算量集中在三個部分:應用程序將數據拷貝到RAM、計算TCP校驗和、將RAM中的數據包拷貝到網絡設備的發送緩沖區。對每一個字節數據,兩次拷貝大致共使用12×2=24個指令周期;計算TCP校驗和使用為16個指令周期。為提高速度可采用快速CPU或提高晶振頻率。例如采用12M晶振時,網絡傳輸速度為25K字節/s;而在高頻PCB電路板使用233M晶振時,網絡傳輸速度能達到為384K字節/s。

        另外,TCP/IP一般采用C語言或者混合匯編,而使用可重入函數和一般指針(generic pointer)使得程序代碼增大,運行速度變慢.所以使用函數指針時,應手動重建調用樹(Call tree),或將函數指針調用的函數設置為可重入函數,同時使用“指定存儲類型”的指針(memory-specific pointer),防止數據包的不必要的拷貝以及優化計算校驗和和內存拷貝函數。另外,Reentrant類型的函數比一般函數速度要慢很多,但是某些時候為了程序結構的需要必須使用Reentrant,這就需要在速度和結構之間作一個選擇。
      
     

     

    轉載請注明出處。

    暫無關鍵詞
    免責聲明

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

    網友點評
    0相關評論
    精彩導讀