少妇高潮久久久久久久久-亚洲精品乱码中文字幕-国产精品一区二区熟女91-尹人香蕉网在线观看视频-国产成人精选在线不卡-少妇一区二区三区精品-日韩色久悠悠婷婷综合-韩国毛片免费全部播放完整-又大又色又爽的视频

單片機TCP/IP

ZLMCU網(wǎng)

摘要:本文結合作者使用單片機TCP/IP的經(jīng)驗為廣大單片機TCP/IP技術的愛好者提供一個拋磚引入的作用,文章從TCP/IP講到了單片機TCP/IP的特點,針對這些特點在單片機上實現(xiàn)TCP/IP最好使用現(xiàn)有的TCP/IP協(xié)議棧,接著本文列出了8個常見的單片機TCP/IP協(xié)議棧。最后介紹了如何使用這些單片機TCP/IP協(xié)議棧實現(xiàn)用戶所需的單片機上網(wǎng)項目的需求。

關鍵詞:單片機;TCP/IP;協(xié)議棧;

1  TCP/IP簡介

TCP/IP指傳輸控制協(xié)議/網(wǎng)際協(xié)議 (Transmission Control Protocol / Internet Protocol)。在互聯(lián)網(wǎng)發(fā)展的今天,TCP/IP協(xié)議棧實際上已經(jīng)成為網(wǎng)際互連的代名詞。TCP/IP協(xié)議棧并不符合ISO的7層模型結構,它分為4層即:

1.  應用層:它是根據(jù)應用的不同編寫的不同的協(xié)議,例如超文本傳輸協(xié)議( HTTP)、簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡遠程訪問協(xié)議(Telnet)等。

2.  傳輸層:傳輸層負責數(shù)據(jù)在點與點之間的正確傳送,保證數(shù)據(jù)包的順序和數(shù)據(jù)的正確,一般來說主要指面向連接的傳輸控制協(xié)議(TCP),有時面向非連接的用戶數(shù)據(jù)報協(xié)議(UDP)也包括在這里。

3.  互連網(wǎng)絡層:也就是IP協(xié)議,它負責數(shù)據(jù)報如何在網(wǎng)絡之間傳遞,例如選擇路由等。

4.  網(wǎng)絡接口層:由于網(wǎng)絡物理介質的不同,需要選擇不同的管理方式,例如以太網(wǎng)(Ethernet)和通過Modem上網(wǎng)的方式需要不同的管理方法。

2    單片機TCP/IP的特點

在單片機上實現(xiàn)TCP/IP與在PC機上實現(xiàn)TCP/IP是有所不同的,參考《TCP/IP在51單片機上的實現(xiàn)特點和方法》我們可以了解到:

1.  速度慢:根據(jù)該文檔的介紹12M的51單片機的最快網(wǎng)絡傳送速度為25KB/s。其中的關鍵在于TCP/IP需要對傳送的每個字節(jié)進行校驗和計算,以及必要的拷貝。這樣51單片機的處理速度就不夠了。為了提高單片機TCP/IP的速度一般的方法是要對協(xié)議棧進行精簡。

2.  程序存儲空間和外部RAM空間不大:一般的單片機的最大程序和數(shù)據(jù)空間為64KB。TCP/IP協(xié)議一般需要對發(fā)送的數(shù)據(jù)進行緩存,而一個最大的數(shù)據(jù)包就有1500B,當網(wǎng)絡速度很大的時候內存消耗將很大。對于非嵌入式TCP/IP協(xié)議棧,64KB的程序和數(shù)據(jù)空間是完全不夠的。

3.  編譯器:實際上和51單片機的體系結構有關,因為它是8位機,所以對于需要完成同一個數(shù)據(jù)操作,32位的PC機可能只需要10條指令,而51單片機可能需要幾百條。

3    已有的單片機TCP/IP協(xié)議棧

       由于TCP協(xié)議棧的程序流程較為復雜,因為程序中需要處理對方法送過來的數(shù)據(jù)、發(fā)起的連接,而我方并不知道對方會何時進行什么樣的操作,這就使得協(xié)議處理起來較為復雜。另外一個原因是單片機TCP/IP協(xié)議棧的穩(wěn)定性是以非常重要的問題,一個穩(wěn)定的協(xié)議棧需要在實際應用中經(jīng)過長時間的測試,所以編寫一個穩(wěn)定的單片機TCP/IP協(xié)議棧更加困難。為此另外一種選擇就是使用現(xiàn)有的TCP/IP協(xié)議棧。

1.  eCos單片機TCP/IP協(xié)議棧eCos TCP/IP棧是涉及與eCos操作系統(tǒng)/內核一起運行的。eCos(和TCP/IP棧)由大量處理其結構支持。eCos TCP/IP棧當前發(fā)布了一個測試版,作為一個單獨的模塊。

2.  ZLIP 51單片機TCP/IP協(xié)議棧ZLIP是專門為51單片機設計的嵌入式TCP/IP協(xié)議棧,可以在有操作系統(tǒng)和沒有操作系統(tǒng)情況下運行,具有代碼量適中、運行速度快、用戶接口簡單、兼容BSD socket接口的特點。實現(xiàn)了TCP、UDP、ICMP、ARP協(xié)議,ZLWeb實現(xiàn)了HTTP協(xié)議。支持多TCP連接、多UDP連接同時運行,支持在uc/os-II操作系統(tǒng)下多任務運行數(shù)據(jù)收發(fā)?梢杂糜51單片機TCP/IP上網(wǎng)解決方案。

3.  uc/ip 單片機TCP/IP協(xié)議棧:uC/IP(mew-kip)是為為控制其設計的一個TCP/IP協(xié)議棧。代碼基于BSD(很像所有其它棧)但對非常小的覆蓋范圍功能有所減少。它當前為Linux和DOS目標而建。

4.  BSD 單片機TCP/IP協(xié)議棧BSD棧歷史上是其他商業(yè)棧的開始點,大多數(shù)專業(yè)TCP/IP棧(如帶Wind-River VxWorks內核的)是BSD棧派生的。這是因為BSD在BSD許可協(xié)議下提供了他們的棧,它們的許用證使你能以修改或未修改的形式結合它們的代碼而無須向創(chuàng)建者付版稅。與GPL許用證相比,如果你結合GPL源代碼,后者要求你的GPL中公開你的源代碼。

5.  lwIP 單片機TCP/IP協(xié)議棧lwIP(輕型)TCP/IP棧是TCP/IP協(xié)議棧的一個小型實現(xiàn)。它包括帶IP和ICMP的TCP和UDP傳輸層。還提供一個可選的BSD套結籽API。為了性能,還包括一個零拷貝API。LwIP協(xié)議棧是為嵌入式系統(tǒng)設計的并能適合40KB的ROM和幾百字節(jié)的RAM。為了可移植性它用C編寫。

6.  uIP 單片機TCP/IP協(xié)議棧uIP是專門為8位和16單片機設計的一個非常小的TCP/IP協(xié)議棧。uIP完全用C編寫,以此可以移植到各種不同的結構和操作系統(tǒng)上。一個編譯的?梢杂袔譑B ROM或幾百字節(jié)RAM中運行。uIP還包括一個HTTP服務器作為服務內容。

7.  TinyTCP 單片機TCP/IP協(xié)議棧:TinyTCP棧是TCP/IP的一個非常小的簡單的實現(xiàn),它包括一個FTP客戶。TinyTCP是為燒入ROM設計的并且現(xiàn)在開始對大端結構似乎是有用的(初始目標是68000芯片)。TinyTCP也包括一個簡單的以太網(wǎng)驅動器用于3Com多總線卡。

8.  WATTCP 單片機TCP/IP協(xié)議棧:WATTCP是為嵌入基于DOS的系統(tǒng)而設計的一個小型TCP/IP棧。它包括一個Real Mode DOS版本和另一個32位擴展環(huán)境版本。

4    如何使用單片機TCP/IP協(xié)議棧

       用戶在拿到一個單片機TCP/IP協(xié)議棧以后該如何處理呢。其中的處理分為兩個部分:上層接口和下層接口。

4. 1 上層接口

       用戶使用單片機TCP/IP的目的實際非常明了,就是要實現(xiàn)數(shù)據(jù)的傳送,即從PC機(或者另一個單片機)上傳送過來的數(shù)據(jù)能夠在本地單片機上接收,反之亦然。所以如果屏蔽底層的話,單片機TCP/IP協(xié)議棧就是一個傳輸數(shù)據(jù)的手段。所以最后歸結到了使用send()、recv()函數(shù)即可。這就是使用單片機TCP/IP協(xié)議棧的核心所在。

       但是事實上并沒有這么簡單,因為對于TCP需要有發(fā)起連接、接受連接、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、關閉連接等操作以配合數(shù)據(jù)的傳輸。TCP/IP協(xié)議棧一般為用戶提供如下的接口:

1.  初始化協(xié)議棧和釋放協(xié)議棧的函數(shù)接口,類似Init(), Release()之類的函數(shù)。

2.  提供類似BSD socket的socket, sendto, recvfro, connect, bind, listen, accept, send, recv, closesocket, shutdown, getpeername, getsockname, htonl, htons, ntohl, ntohs, inet_addr,inet_ntoa,ioctlsocket,setsockopt, getsockopt,select等API函數(shù),用戶調用此類函數(shù)進行發(fā)起連接、接受連接、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、關閉連接等操作。

3.  接受連接、接收數(shù)據(jù)、被動關閉的處理:由于此類操作是上位機發(fā)起的,所以TCP/IP協(xié)議棧必須提供一套機制來處理此類事件的發(fā)生。一般來說有兩種方法:

a)         主動等待:例如使用BSD的recv()函數(shù)等待數(shù)據(jù)的到來。

b)        回調機制:采用類似MFC的OnReceive()函數(shù)的回調機制,也即是說在接收到數(shù)據(jù)的時候會自動調用OnReceive()函數(shù)。

那么用戶如何使用以上的接口來實現(xiàn)遠程控制、遠程數(shù)據(jù)采集呢?方法很簡單。

例如現(xiàn)在需要實現(xiàn)一個對LED燈的亮和滅的遠程控制應用。首先PC機使用TCP/IP發(fā)送工具例如SocketDlgTest程序發(fā)送一個字節(jié)的“1”到開發(fā)板(根據(jù)開發(fā)板的IP地址發(fā)送)。開發(fā)板在OnReceive函數(shù)中發(fā)現(xiàn)收到的是“1”,那么就通過P1端口將燈打開;反之如果收到的是“0”則將燈熄滅。

如果是實現(xiàn)一個遠程數(shù)據(jù)采集的應用,例如定時進行溫度采集。首先PC機使用SocketDlgTest程序等待發(fā)來數(shù)據(jù)。開發(fā)板每隔一段時間采集一個數(shù)據(jù),然后通過send()函數(shù)將數(shù)據(jù)發(fā)送給PC機(根據(jù)PC機的IP地址發(fā)送),這樣PC就接收到了當前的遠程溫度數(shù)據(jù)。

4. 1 下層接口

下層接口是一個比較復雜的部分,實際上是TCP/IP協(xié)議棧和底層硬件的對接問題。如果用戶將TCP/IP協(xié)議棧移植到自己的單片機系統(tǒng)上。由于硬件上存在一定的差異,就需要修改底層代碼。這里需要包括:

1.網(wǎng)卡驅動:如果TCP/IP協(xié)議棧已經(jīng)提供了網(wǎng)卡驅動,并且驅動和用戶使用的網(wǎng)卡芯片一樣,那么就相對容易一些。這里只需要修改網(wǎng)卡的基地址即可。否則需要自己動手寫驅動程序。如果網(wǎng)卡采用RTL8019AS可以參考老古開發(fā)網(wǎng)的單片機與TCP/IP網(wǎng)絡。如果網(wǎng)卡采用CS8900,可以參考《嵌入式 TCP/IP 協(xié)議單片機技術在網(wǎng)絡通信中的應用

2.TCP/IP底層接口。一般單片機TCP/IP需要底層為其提供定時中斷、網(wǎng)卡中斷處理的入口。底層需要做相應的處理。