色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于單片機ARM實現(xiàn)TCP/IP協(xié)議棧的設(shè)計

電子設(shè)計 ? 來源:單片機與嵌入式系統(tǒng)應(yīng)用 ? 作者:廖日坤,紀越峰, ? 2021-05-26 11:24 ? 次閱讀

作者:廖日坤,紀越峰,黃小迅

隨著計算機網(wǎng)絡(luò)技術(shù)和電子信息技術(shù)的迅猛發(fā)展,Internet的使用越來越普及,信息家電和智能儀表等能夠接入Iriternet的非PC設(shè)備越來越多,將各類電子設(shè)備接入Internet的需求也越來越大。

電子設(shè)備接入Internet。有多種解決方案:在51系列單片機上運行經(jīng)過裁剪的TCP/IP協(xié)議棧;使用一些ASIC實現(xiàn)TCP/IP的芯片,如Analog Devices推出的Internet Modem;也可使用嵌入式操作系統(tǒng)自帶的TCP/IP協(xié)議棧。在某些對網(wǎng)絡(luò)速度要求不高的領(lǐng)域,可用單片機實現(xiàn)TCP/IP;在對性能要求高的場合,可選擇后兩種方案。

1 嵌入式TCP/IP的硬件結(jié)構(gòu)

圖1是嵌入式TCP/IP系統(tǒng)的硬件結(jié)構(gòu)。其中CS8900A是Cirrus Logic的網(wǎng)絡(luò)控制器,芯片內(nèi)部已設(shè)置幀過濾器自動拋棄無效幀,減輕CPU負荷,提高CPU對網(wǎng)絡(luò)的訪問效率。CS8900A工作機制主要是通過設(shè)置好其內(nèi)部各寄存器的值,然后就可以自動開始工作。在網(wǎng)絡(luò)接口部分,由于是RJ45接口,所以須使用E2023傳輸線變壓器對網(wǎng)絡(luò)中的信號進行轉(zhuǎn)換。

pIYBAGCtwJWAaajIAADRxKleIs0466.png

通常TCP/IP協(xié)議棧需要大量的RAM來存儲需要被應(yīng)答的TCP包。如果在規(guī)定時間內(nèi)未被應(yīng)答,則重發(fā)該TCP包;被應(yīng)答以后釋放。為了減小RAM的使用量,當數(shù)據(jù)包需要重新發(fā)送時,如果能夠重新產(chǎn)生數(shù)據(jù)包所需的數(shù)據(jù),則可不存儲需要被應(yīng)答的TCP包。

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

在CPU中幀的存放方式,定義PacketRAM變量為存放幀的首地址。圖2給出了CPU中TCP/IP的內(nèi)存劃分,以及內(nèi)存中幀的各個字節(jié)的定義和相對位置。

pIYBAGCtwUOAOiSUAABw3J5dJLA484.png

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

TCP/IP一般采用C語言或混合匯編。使用可重入函數(shù)和一般指針(gellerc pointer)使得程序代碼增大,運行速度降低;使用函數(shù)指針時,需要手動重建調(diào)用樹(calltree),或?qū)⒑瘮?shù)指針調(diào)用的函數(shù)設(shè)置為可重入函數(shù)。

2.1 嵌入式TCP/IP輸入輸出流程

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

o4YBAGCtwUmATBBuAABu158xsIA842.png

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

輸入時,Timer()函數(shù)調(diào)用每個接口的Input函數(shù)。IP層判斷IP版本、IP校驗和,以及是否應(yīng)轉(zhuǎn)發(fā)數(shù)據(jù)包,然后根據(jù)IP頭部的protocol字段將包傳給相應(yīng)的高層處理。TCP層,須判斷TCP校驗和,并在現(xiàn)有的套接字中查找,判斷是否有套接字可接收這個數(shù)據(jù)包,判斷TCP序號是否為希望的,然后更新這個連接的狀態(tài)(包括釋放被應(yīng)答的數(shù)據(jù)包和TCP狀態(tài)機的轉(zhuǎn)化等),調(diào)用該套接字的回調(diào)函數(shù)recv。

2.2 嵌入式TCP/IP的程序結(jié)構(gòu)

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

如圖4所示,程序主流程是一個大循環(huán),在循環(huán)中處理發(fā)送數(shù)據(jù)包等應(yīng)用層協(xié)議的同時,查詢變量bTimeOut,在定時中斷中將bTimerOut設(shè)置為真。應(yīng)用層在程序流程中反復(fù)查詢bTimerOut是否為真,若為真則調(diào)用Timer(),然后設(shè)置bTimerOut為假。

pIYBAGCtwU-AZrXjAAA7AiMb5tc898.png

在使用嵌入式操作系統(tǒng)時,還要注意網(wǎng)絡(luò)設(shè)備驅(qū)動函數(shù)被重入的問題。以NE2K的以太網(wǎng)卡為例,拷貝數(shù)據(jù)包到網(wǎng)卡緩存前要先設(shè)置寄存器(如起始地址)。如果設(shè)置完寄存器以后中斷發(fā)生且放重入。則寄存器的設(shè)置被修改,中斷返回以后拷貝將出錯。

2.3 嵌入式TCP/IP運行速度優(yōu)化

TCP/IP發(fā)送過程中主要的運算量集中在3部分:應(yīng)用程序?qū)?shù)據(jù)拷貝到RAM;計算TCP校驗和;將RAM中的數(shù)據(jù)包拷貝到網(wǎng)絡(luò)設(shè)備的發(fā)送緩沖區(qū)。對于每個字節(jié)數(shù)據(jù),兩次拷貝大致共使用12×2=24個指令周期;計算TCP校驗和使用16個指令周期。采用12MHz晶振,最高網(wǎng)絡(luò)傳輸速度為25KB/s。

為了提高速度可以采用快速CPU或提高晶振頻率。另外,盡量避免使用Reentrant函數(shù)。Reentrant類型的函數(shù)比一般函數(shù)速度要慢很多,但某些時候為了程序結(jié)構(gòu)的需要必須使用Reentrant,這就需要在速度和結(jié)構(gòu)之間作一個選擇。選擇的方法有:使用“指定存儲類型”的指針(memoryr-specific pointer);精簡協(xié)議棧去除運算量大但是用處不大的功能,目前TCP定時重發(fā)時間是固定的,也沒有擁塞窗口控制和IP層路由;防止數(shù)據(jù)包不必要的拷貝;優(yōu)化計算校驗和與內(nèi)存拷貝函數(shù)。

3 TCP/IP的嵌入式實現(xiàn)

TCP/IP協(xié)議實現(xiàn)一般以軟件方式嵌人到ROM中,然后通過網(wǎng)絡(luò)通信技術(shù)與專用嵌入式網(wǎng)關(guān)連接,運行TCP/IP協(xié)議,并提供TCP/IP到用戶的輕型網(wǎng)絡(luò)的連接和路由功能。

3.1 內(nèi)存管理方法和無多余數(shù)據(jù)包拷貝的實現(xiàn)

嵌入式TCP/IP的內(nèi)存管理可用鏈表方法,即根據(jù)數(shù)據(jù)包大小分配相應(yīng)大小的內(nèi)存塊。如圖5所示,鏈表將內(nèi)存塊鏈接起來,used字段表示該內(nèi)存塊是否正在使用,pStart和pEnd表示數(shù)據(jù)部分有效數(shù)據(jù)的開始地址和結(jié)束地址。

o4YBAGCtwVWASuzgAAA-f1F44bQ610.png

分配時,搜索內(nèi)存鏈表找到一個沒有分配的比所需空間大的內(nèi)存塊,截取所需的大小。該內(nèi)存塊被截取以后可能還有較多剩余,這時將剩余部分從原內(nèi)存塊中分離出來,成為一個新的內(nèi)存塊,并插入鏈表。釋放時,將used置為假。如果pNext或pPre指向的鏈表單元也是空閑的,則將其與自己合并。以防止內(nèi)存分片。在協(xié)議層之間傳送數(shù)據(jù)包只要傳送內(nèi)存塊的起始地址即可。這種內(nèi)存管理方法空間浪費小,但運算量相對較大。

3.2 整序、重發(fā)與窗口控制的實現(xiàn)

使用隊列緩存的方式來實現(xiàn)整序、重發(fā)和窗口控制。隊列的一個元素指向一個數(shù)據(jù)包,隊列的最大長度沒有限制。

對于整序,使用ooSeq隊列,如果發(fā)現(xiàn)接收的TCP包序號并不是希望的,但序號在接收窗口內(nèi),此時不能立刻接收這個包也不應(yīng)丟棄,先將這個包放入ooSeq隊列。當一個希望的TCP包被接收以后,再查看ooseq隊列現(xiàn)在是否有TCP包成為了希望的數(shù)據(jù)包,如果有則將其取出并處理。

對于重發(fā),使用unacked隊列,每個需要被應(yīng)答的TCP數(shù)據(jù)包發(fā)送以后都要放入unacked隊列,直到被應(yīng)答后才從隊列中刪除。TCP重發(fā)定時只針對unacked隊列第一個TCP包。如果定時超出,則重新發(fā)送;如果重發(fā)次數(shù)超出規(guī)定值,則報錯。

對于窗口控制,使用unsend隊列,如果發(fā)現(xiàn)對方的窗口過小無法接收這個數(shù)據(jù)包,則只發(fā)送部分數(shù)據(jù),將多余部分放入unsend隊列,等待對方發(fā)來TCP包通知新的窗口大小時,再次判斷是否可以發(fā)送。在unsend隊列不為空的情況下,須發(fā)送的數(shù)據(jù)包都應(yīng)插入unsend隊列。

3.3 捎帶應(yīng)答的實現(xiàn)

捎帶應(yīng)答是指,當對方一個需要應(yīng)答的TCP包到達時,不馬上給予應(yīng)答,而是等待一段較短的時間。如果在這段時間內(nèi)有數(shù)據(jù)發(fā)送,則會捎帶給予應(yīng)答,從而減少了包的發(fā)送數(shù)量。

若暫時沒有數(shù)據(jù)須發(fā)給對方或數(shù)據(jù)還未準備好,則等待一定的時間;如果在該時間內(nèi)準備好了數(shù)據(jù),則可使用捎帶應(yīng)答。使用捎帶應(yīng)答就不可能對每個幀都作確認,可用對某個幀的確認來代替對該幀之前所有幀的確認。

4 總 結(jié)

嵌入式系統(tǒng)中大量存在的是8/16位低速處理器,在進行Internet接入時,由于本身資源的限制,很難實現(xiàn)完整的TCP/IP協(xié)議。本文從既實現(xiàn)相應(yīng)的功能又節(jié)省系統(tǒng)資源角度出發(fā),對協(xié)議進行有針對性的模塊化裁剪和優(yōu)化設(shè)計,可以在單片機ARM上嵌入TCP/IP協(xié)議簇實現(xiàn)嵌入式Internet接入。

經(jīng)過優(yōu)化設(shè)計的嵌入式TCP/IP,支持套接字形式的多個TCP連接;支持多個網(wǎng)絡(luò)設(shè)備;支持通過網(wǎng)關(guān)發(fā)送數(shù)據(jù)包和數(shù)據(jù)包轉(zhuǎn)發(fā)功能,響應(yīng)ping命令;支持TCP包的整序、重發(fā)和窗口控制流量控制。實踐證明,這種設(shè)計方式靈活,能按用戶需求實現(xiàn)很多復(fù)雜的功能。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 變壓器
    +關(guān)注

    關(guān)注

    159

    文章

    7462

    瀏覽量

    135135
  • 單片機
    +關(guān)注

    關(guān)注

    6035

    文章

    44554

    瀏覽量

    634651
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16332

    瀏覽量

    177808
收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式TCP/IP協(xié)議單片機技術(shù)在網(wǎng)絡(luò)通信中的應(yīng)用

    介紹了嵌入式TCP/IP協(xié)議單片機在網(wǎng)絡(luò)通信中的數(shù)據(jù)傳輸技術(shù)。將TCP/IP
    發(fā)表于 05-13 11:17 ?5500次閱讀

    基于 51 系列單片機TCP/ip協(xié)議C程序

    基于 51 系列單片機TCP/ip協(xié)議C程序
    發(fā)表于 01-06 21:28

    一種uIP TCP/IP協(xié)議在51系列單片機上的實現(xiàn)

    單片機,被應(yīng)用在各個領(lǐng)域內(nèi)。因此使用uIP這種免費的TCP/IP協(xié)議解決由51內(nèi)核的單片機構(gòu)建
    發(fā)表于 08-08 09:27

    協(xié)議介紹--TCP/IP

    協(xié)議介紹本協(xié)議開發(fā)人:楊文斌,聯(lián)系方式:qq:2929422782.參數(shù)說明1)本協(xié)議完全
    發(fā)表于 09-03 15:03

    怎么實現(xiàn)TCPIP協(xié)議單片機上的移植?

    本文實現(xiàn)TCPIP協(xié)議單片機上的移植,完成了系統(tǒng)的硬件電路和相關(guān)嵌入式軟件的設(shè)計,應(yīng)用V
    發(fā)表于 06-03 07:08

    基于ARMTCP/IP協(xié)議LwlP是如何實現(xiàn)的?

    嵌入式網(wǎng)絡(luò)通信系統(tǒng)的硬件平臺由哪幾個部分組成?基于ARMTCP/IP協(xié)議LwlP是如何實現(xiàn)
    發(fā)表于 06-04 06:37

    TCP/IP協(xié)議單片機在網(wǎng)絡(luò)通信中的數(shù)據(jù)傳輸技術(shù)

    介紹了嵌入式TCP/IP協(xié)議單片機在網(wǎng)絡(luò)通信中的數(shù)據(jù)傳輸技術(shù)。將TCP/IP
    發(fā)表于 04-16 22:04 ?4429次閱讀
    <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>單片機</b>在網(wǎng)絡(luò)通信中的數(shù)據(jù)傳輸技術(shù)

    51+單片機TCP-IP+協(xié)議ZLIP源碼

    單片機上網(wǎng)技術(shù),是當前的一個熱門技術(shù)。單片機上網(wǎng)技術(shù)中的一個重要部分是在單片實現(xiàn) TCP/IP
    發(fā)表于 12-17 16:11 ?9次下載

    Microchip TCP/IP協(xié)議

    在Microchip單片機實現(xiàn)傳輸控制協(xié)議/網(wǎng)際協(xié)議(Transmission Control ProtocoUlnternet Protocol,
    發(fā)表于 04-20 16:04 ?4次下載
     Microchip <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>

    Microchip的TCPIP協(xié)議的詳細中文資料免費下載

    在 Microchip 單片機實現(xiàn)傳輸控制協(xié)議 / 網(wǎng)際協(xié)議(Transmission Control Protocol/Internet Protocol,
    發(fā)表于 06-15 08:27 ?35次下載
    Microchip的<b class='flag-5'>TCP</b>和<b class='flag-5'>IP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>的詳細中文資料免費下載

    Microchip TCP/IP精簡協(xié)議

    閃存 (僅 UDP)和集成 ≥ 16 KB 閃存(TCP/IP)的單片機提供更優(yōu)化的(占用的閃存和 RAM空間較小)TCP/IP
    發(fā)表于 04-01 15:36 ?17次下載
    Microchip <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b>精簡<b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>

    Microchip TCP/IP協(xié)議

    在 Microchip 單片機實現(xiàn)傳輸控制協(xié)議 / 網(wǎng)際協(xié)議(Transmission Control Protocol/Internet Protocol,
    發(fā)表于 04-02 14:28 ?22次下載
    Microchip <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>

    基于PIC單片機TCP/IP協(xié)議實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于PIC單片機TCP/IP協(xié)議實現(xiàn).ppt》資料免費下載
    發(fā)表于 10-20 10:03 ?2次下載
    基于PIC<b class='flag-5'>單片機</b>的<b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b><b class='flag-5'>實現(xiàn)</b>

    TCP/IP協(xié)議的設(shè)計與實現(xiàn)_中文

    電子發(fā)燒友網(wǎng)站提供《TCP/IP協(xié)議的設(shè)計與實現(xiàn)_中文.pdf》資料免費下載
    發(fā)表于 07-03 11:28 ?4次下載

    LwIP協(xié)議源碼詳解—TCP/IP協(xié)議實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《LwIP協(xié)議源碼詳解—TCP/IP協(xié)議實現(xiàn).pdf》資料免費下載
    發(fā)表于 07-03 11:22 ?3次下載
    主站蜘蛛池模板: 在线va无卡无码高清| 男女牲交大战免费播放| 国产喷水1区2区3区咪咪爱AV| 成人小视频在线免费观看| www.黄色| 抽插嫩B乳无码漫| ebc5恐怖5a26房间| 9420高清完整版在线电影免费观看| 一级毛片免费下载| 最美女人体内射精一区二区| 97ganmeizi| 成人国产精品玖玖热色欲| 国产成人精品免费视频下载| 国产福利不卡在线视频| 九九热在线视频精品店| 老司机亚洲精品影院在线观看| 两个人的视频日本在线观看完整| 蜜芽在线播放免费人成日韩视频| 年轻的女职工在线观看| 色欲国产麻豆精品AV免费| 亚洲精品在线网址| 92电影网午夜福利| 国产69精品久久久久乱码韩国| 国产精品亚洲电影久久成人影院 | 2018高清国产一区二区三区| www.亚洲天堂| 精品国产品国语在线不卡| 牛牛在线(正)精品视频| 偷拍亚洲制服另类无码专区| 一级做a爰片久久免费| 国产ts在线| 免费毛片在线视频| 午夜免费福利| 中文字幕在线观看| 国产精品一区二区免费| 美国大臿蕉香蕉大视频| 午夜国产精品免费观看| 99热久久视频只有精品6国产| 国产在线公开视频| 日本工口生肉全彩大全| 姉调无修版ova国语版|