新聞中心

        EEPW首頁 > 嵌入式TCP/IP的優化設計與硬件實現

        嵌入式TCP/IP的優化設計與硬件實現

        ——
        作者: 時間:2007-04-23 來源: 收藏
        提出一種系統中實現TCP/IP的解決方案。通過優化設計清晰的TCP/IP和應用層接口、防止多余的內存拷貝和實現數據包整序重發及窗口控制,分析在系統上實現TCP/IP的速度、程序大小、內存大小以及編譯囂等特點,并針對這些特,最提出實現TCP/IP的技巧和方法。
             隨著計算機網絡技術和電子信息技術的迅猛發展,Internet的使用越來越普及,信息家電和智能儀表等能夠接入Iriternet的非PC設備越來越多,將各類電子設備接入Internet的需求也越來越大。
           
             電子設備接入Internet。有多種解決方案:在51系列單片機上運行經過裁剪的TCP/IP協議棧;使用一些ASIC實現TCP/IP的芯片,如Analog Devices推出的Internet Modem;也可使用操作系統自帶的TCP/IP協議棧。在某些對網絡速度要求不高的領域,可用單片機實現TCP/IP;在對性能要求高的場合,可選擇后兩種方案。
         
             1 嵌入式TCP/IP的硬件結構
           
              圖1是嵌入式TCP/IP系統的硬件結構。其中CS8900A是Cirrus Logic的網絡控制器,芯片內部已設置幀過濾器自動拋棄無效幀,減輕CPU負荷,提高CPU對網絡的訪問效率。CS8900A工作機制主要是通過設置好其內部各寄存器的值,然后就可以自動開始工作。在網絡接口部分,由于是RJ45接口,所以須使用E2023傳輸線變壓器對網絡中的信號進行轉換。

             通常TCP/IP協議棧需要大量的RAM來存儲需要被應答的TCP包。如果在規定時間內未被應答,則重發該TCP包;被應答以后釋放。為了減小RAM的使用量,當數據包需要重新發送時,如果能夠重新產生數據包所需的數據,則可不存儲需要被應答的TCP包。
           
             因為網絡中數據非常多,如果把所有的數據都讀到內存中再判斷是否應丟棄幀,則顯然效率不高。所以邊讀取數據邊判斷而沒有一開始就把整個幀全部讀到內存中。在程序里定義了幀中各部分的相對地址,可以方便地對幀的各字節尋址。這樣的設計是基于提高訪問速度考慮的。
           
             在CPU中幀的存放方式,定義PacketRAM變量為存放幀的首地址。圖2給出了CPU中的內存劃分,以及內存中幀的各個字節的定義和相對位置。
         

             2 嵌入式TCP/IP的優化設計
           
          TCP/IP一般采用C語言或混合匯編。使用可重入函數和一般指針(gellerc pointer)使得程序代碼增大,運行速度降低;使用函數指針時,需要手動重建調用樹(calltree),或將函數指針調用的函數設置為可重入函數。
         
          2.1 嵌入式TCP/IP輸入輸出流程
           
           與PC機TCP/IP協議一樣,嵌入式采用協議分層的結構:應用層、TCP層、IP層和網絡設備接口層。圖3描述了輸入和輸出數據包的流程以及需要調用的函數。

         
             輸出時,TCP層先查看unsend隊列,發現非空,將數據包插入隊列;發現為空,則查看對方窗口是否夠大(能夠接收這個數據包)。然后,填寫TCP頭部信息。IP層選擇網絡設備接口,目的IP和該接口的子網掩碼相“與”是否等于子網掩碼,然后調用這個接口的Output函數來發送。
           
          輸入時,Timer()函數調用每個接口的Input函數。IP層判斷IP版本、IP校驗和,以及是否應轉發數據包,然后根據IP頭部的protocol字段將包傳給相應的高層處理。TCP層,須判斷TCP校驗和,并在現有的套接字中查找,判斷是否有套接字可接收這個數據包,判斷TCP序號是否為希望的,然后更新這個連接的狀態(包括釋放被應答的數據包和TCP狀態機的轉化等),調用該套接字的回調函數recv。
         
          2.2 嵌入式TCP/IP的程序結構
           
          Tliner函數功能是調用TCPTimer處理TCP數據包的重發等功能,調用每個接口的Input函數接收到達的數據包。Timer函數必須在短時間(一般為20ms)內被調用一次,否則接收數據包和TCP定時等功能將停止。

             如圖4所示,程序主流程是一個大循環,在循環中處理發送數據包等應用層協議的同時,查詢變量bTimeOut,在定時中斷中將bTimerOut設置為真。應用層在程序流程中反復查詢bTimerOut是否為真,若為真則調用Timer(),然后設置bTimerOut為假。
         
             在使用嵌入式操作系統時,還要注意網絡設備驅動函數被重入的問題。以NE2K的以太網卡為例,拷貝數據包到網卡緩存前要先設置寄存器(如起始地址)。如果設置完寄存器以后中斷發生且放重入。則寄存器的設置被修改,中斷返回以后拷貝將出錯。
         
          2.3 嵌入式TCP/IP運行速度優化
           
          TCP/IP發送過程中主要的運算量集中在3部分:應用程序將數據拷貝到RAM;計算TCP校驗和;將RAM中的數據包拷貝到網絡設備的發送緩沖區。對于每個字節數據,兩次拷貝大致共使用12 linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        tcp/ip相關文章:tcp/ip是什么




        關鍵詞: TCP/IP 嵌入式

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乐亭县| 古田县| 佛山市| 永清县| 泗水县| 山东省| 赤城县| 邹平县| 岚皋县| 抚顺县| 和林格尔县| 日土县| 广西| 麟游县| 西藏| 南京市| 阜城县| 札达县| 华阴市| 辉县市| 北流市| 普兰店市| 乌兰县| 新密市| 保德县| 西平县| 湾仔区| 洞头县| 德保县| 鸡泽县| 马鞍山市| 镇康县| 阿克陶县| 江油市| 新乐市| 吉林市| 凉城县| 出国| 连山| 靖远县| 高雄县|