freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于mcs-51單片機(jī)技術(shù)以太網(wǎng)接口設(shè)計(jì)-資料下載頁

2025-06-23 17:17本頁面
  

【正文】 4) 發(fā)送帶有一些數(shù)據(jù)的ICMP應(yīng)答。5) 等待ICMP應(yīng)答。在等待應(yīng)答的同時(shí),該工具也有可能應(yīng)答它所接收到得任何ICMP或ARP請(qǐng)求,這就允許存在兩個(gè)節(jié)點(diǎn)互相Ping。 傳輸控制協(xié)議TCP的實(shí)現(xiàn) TCP協(xié)議是一個(gè)面向連接的協(xié)議,傳遞一個(gè)TCP數(shù)據(jù)所要經(jīng)歷的三個(gè)階段分別是:建立連接、傳輸數(shù)據(jù)和斷開連接。TCP的實(shí)現(xiàn)過程可以用狀態(tài)機(jī)來描述。為了保證狀態(tài)機(jī)狀態(tài)的正確性,在其實(shí)現(xiàn)的時(shí)候,不同狀態(tài)的相關(guān)信息需要存儲(chǔ)下來。狀態(tài)機(jī)越復(fù)雜,維護(hù)的花費(fèi)就越大,對(duì)處理器的存儲(chǔ)能力和運(yùn)算能力的要求就越高。所以對(duì)于一個(gè)龐大的狀態(tài)機(jī),在存儲(chǔ)能力和運(yùn)算能力有限的單片機(jī)上實(shí)現(xiàn)是十分困難的。而嵌入式系統(tǒng)的開發(fā)設(shè)計(jì)都是針對(duì)某個(gè)特定的應(yīng)用進(jìn)行的,因而有必要對(duì)TCP協(xié)議的實(shí)現(xiàn)算法進(jìn)行適當(dāng)?shù)暮?jiǎn)化。 TCP報(bào)文的處理(接收) TCP狀態(tài)機(jī)處理接收的TCP段由TCP報(bào)文處理函數(shù)實(shí)現(xiàn),數(shù)據(jù)存放在TCP緩沖區(qū)中并置位相應(yīng)標(biāo)志。 接收到報(bào)文后的步驟:1) 搜索所有的套接字,匹配IP地址和端口號(hào)。2) 如果沒有找到匹配的套接字,就獲取第一個(gè)空閑的(關(guān)閉的)套接字。3) 如果還沒有,就發(fā)送復(fù)位信息。 已經(jīng)存在的連接的段在第一步中就會(huì)被處理,新建立的連接請(qǐng)求在第二步中處理,或者當(dāng)沒有更多的套接字時(shí)在第三步中被處理。 開 始正確的TCP報(bào)文?校驗(yàn)和正確否?讀入TCP選項(xiàng)(若有)有匹配的SOCKET?有空閑的SOCKET?復(fù)位連接結(jié) 束讀入TCP報(bào)文NNYYNN TCP報(bào)文接收處理流程協(xié)議棧接收到TCP報(bào)文并找到匹配端口后,就要轉(zhuǎn)到TCP的狀態(tài)機(jī)來實(shí)現(xiàn)后續(xù)處理。系統(tǒng)中的TCP狀態(tài)機(jī)實(shí)現(xiàn)采用了簡(jiǎn)單的模式,系統(tǒng)的TCP狀態(tài)機(jī)實(shí)現(xiàn)包含了所有可能的狀態(tài)。每次狀態(tài)變化都伴隨著一個(gè)函數(shù)的調(diào)用,使系統(tǒng)更新活動(dòng)時(shí)鐘。TCP狀態(tài)機(jī)函數(shù)不僅在打開TCP連接,收到TCP報(bào)文段時(shí)調(diào)用,還要被輪詢以保持TCP協(xié)議棧有效。為了實(shí)現(xiàn)TCP狀態(tài)機(jī)。 TCP狀態(tài)定義字段功能表述TCP_CLOSED關(guān)閉和監(jiān)聽狀態(tài)TCP_SYNR接收到SYN請(qǐng)求狀態(tài)TCP_EST連接已建立狀態(tài)TCP_CLWAIT關(guān)閉等待狀態(tài)TCP_LASTACK最后的確認(rèn)等待狀態(tài)TCP_RSTR復(fù)位狀態(tài)TCP_AOPEN主動(dòng)打開狀態(tài)TCP_SYNS發(fā)送SYN請(qǐng)求狀態(tài)TCP_ACLOSE主動(dòng)關(guān)閉狀態(tài)TCP_FINWT1關(guān)閉等待1狀態(tài)TCP_FINWT2關(guān)閉等待2狀態(tài)TCP_CLING關(guān)閉狀態(tài)TCP_TWAIT計(jì)時(shí)等待狀態(tài) 發(fā)送TCP報(bào)文TCP狀態(tài)機(jī)的調(diào)用不僅是在接收到報(bào)文時(shí),在發(fā)送報(bào)文時(shí)也要調(diào)用到TCP狀態(tài)機(jī)函數(shù),以便更新套接字的狀態(tài)。系統(tǒng)的TCP/IP協(xié)議棧實(shí)現(xiàn)了模塊化的機(jī)制,在發(fā)送TCP報(bào)文時(shí),TCP層把數(shù)據(jù)報(bào)文封裝好之后,交給IP層,即認(rèn)為報(bào)文已發(fā)送,至于報(bào)文的發(fā)送任務(wù)就由IP層處理[11]。TCP報(bào)文的發(fā)送步驟:1) 查看IP層有沒有空閑的發(fā)送緩沖區(qū),若有繼續(xù),若沒有發(fā)送等待。2) 將套接字中序號(hào)、確認(rèn)號(hào)、窗口號(hào)、源端口號(hào)、目的端口號(hào)寫入IP發(fā)送緩沖區(qū)。3) 若有數(shù)據(jù),寫入數(shù)據(jù)。4) 若有選項(xiàng),寫入選項(xiàng)。5) 寫入首部長(zhǎng)度,碼元位等標(biāo)志位。6) 計(jì)算校驗(yàn)和。7) 清緩沖區(qū)標(biāo)志8) 發(fā)送數(shù)據(jù)到IP發(fā)送緩沖區(qū)。開 始有無空閑的IP緩沖區(qū)?封裝TCP報(bào)文頭?有無數(shù)據(jù)?復(fù)制數(shù)據(jù)是起始連接幀?設(shè)置選項(xiàng)(MSS)計(jì)算校驗(yàn)和清標(biāo)志發(fā)送數(shù)據(jù)到IP層結(jié) 束NNYYNY TCP報(bào)文發(fā)送流程 應(yīng)用層(HTTP協(xié)議)的實(shí)現(xiàn)超文本傳輸協(xié)議(HTTP)定義了一種請(qǐng)求/應(yīng)答機(jī)制來從Web服務(wù)器獲取文檔。Web瀏覽器以多行字符串的形式發(fā)送一個(gè)請(qǐng)求給服務(wù)器,每行都以一個(gè)回車和一個(gè)換行子符結(jié)束。每一行指定了一個(gè)大寫字母表示的方法(也就是命令),后面跟著一串參數(shù)。最常用的方法是GET,后面的參數(shù)是請(qǐng)求的文件名和協(xié)議版本標(biāo)識(shí),接下來的幾行包含了關(guān)于瀏覽器配置的額外信息。當(dāng)瀏覽器有數(shù)據(jù)需要提交給服務(wù)器的時(shí)候,需要提交POST,所提交的表單或數(shù)據(jù)在請(qǐng)求的數(shù)據(jù)區(qū)發(fā)送[12]。系統(tǒng)的Web服務(wù)器實(shí)現(xiàn)了一下幾個(gè)函數(shù)[13]:1) 服務(wù)器處理。服務(wù)器處理函數(shù)負(fù)責(zé)解析URL,解析出請(qǐng)求的方法及請(qǐng)求文件,調(diào)用GET或POST處理函數(shù)。2) GET請(qǐng)求處理。根據(jù)所請(qǐng)求的文件名,查找匹配文件,配置應(yīng)答數(shù)據(jù)。3) POST請(qǐng)求處理。對(duì)于POST請(qǐng)求需要解析數(shù)據(jù),根據(jù)定義好的格式解析出所提交的數(shù)據(jù),交給應(yīng)用程序處理,再根據(jù)應(yīng)用程序的接收應(yīng)答來配置數(shù)據(jù)。4) 數(shù)據(jù)發(fā)送。接管在傳輸緩沖區(qū)中檢查空間的常規(guī)任務(wù),并發(fā)送下一個(gè)文件片段或下幾個(gè)目錄條目。數(shù)據(jù)發(fā)送函數(shù)的調(diào)用保持發(fā)送緩沖區(qū)加滿,它盡可能的把文件拷貝到空閑空間中。5) 文件管理。對(duì)存儲(chǔ)的文件進(jìn)行管理,提供文件查詢。 輕量級(jí)TCP/IP協(xié)議棧uIP的嵌入uIP由瑞典計(jì)算機(jī)科學(xué)學(xué)院(網(wǎng)絡(luò)嵌入式系統(tǒng)小組)的Adam Dunkels開發(fā)。其源代碼由C 語言編寫,并完全公開,所有代碼和相關(guān)說明文檔可以到 。uIP協(xié)議棧去掉了完整的TCP/IP中不常用的功能,簡(jiǎn)化了通訊流程,但保留了網(wǎng)絡(luò)通信必須使用的協(xié)議,設(shè)計(jì)重點(diǎn)放在了IP/TCP/ICMP/UDP/ARP 這些網(wǎng)絡(luò)層和傳輸層協(xié)議上,保證了其代碼的通用性和結(jié)構(gòu)的穩(wěn)定性[14]。由于uIP協(xié)議棧專門為嵌入式系統(tǒng)而設(shè)計(jì),因此還具有如下優(yōu)越功能:(1) 代碼非常少,其協(xié)議棧代碼不到6K,很方便閱讀和移植。(2) 占用的內(nèi)存數(shù)非常少,RAM 占用僅幾百字節(jié)。(3) 其硬件處理層、協(xié)議棧層和應(yīng)用層共用一個(gè)全局緩存區(qū),不存在數(shù)據(jù)的拷貝,且發(fā)送和接收都是依靠這個(gè)緩存區(qū),極大的節(jié)省空間和時(shí)間。(4) 支持多個(gè)主動(dòng)連接和被動(dòng)連接并發(fā)。(5) 其源代碼中提供一套實(shí)例程序:web服務(wù)器,web客戶端,電子郵件發(fā)送程序(SMTP 客戶端),Telnet服務(wù)器,DNS主機(jī)名解析程序等。通用性強(qiáng),移植起來基本不用修改就可以通過。(6)對(duì)數(shù)據(jù)的處理采用輪循機(jī)制,不需要操作系統(tǒng)的支持。由于uIP對(duì)資源的需求少和移植容易,大部分的8位微控制器都使用過uIP協(xié)議棧,而且很多的著名的嵌入式產(chǎn)品和項(xiàng)目(如衛(wèi)星,Cisco路由器,無線傳感器網(wǎng)絡(luò))中都在使用uIP協(xié)議棧。 uIP架構(gòu) uIP在系統(tǒng)中的位置uIP相當(dāng)于一個(gè)代碼庫,通過一系列的函數(shù)實(shí)現(xiàn)與底層硬件和高層應(yīng)用程序的通訊,對(duì)于整個(gè)系統(tǒng)來說它內(nèi)部的協(xié)議組是透明的,從而增加了協(xié)議的通用性。 uIP在系統(tǒng)中的位置從上圖可以看出,uIP協(xié)議棧主要提供了三個(gè)函數(shù)供系統(tǒng)底層調(diào)用。即uip_init(),uip_input()和uip_periodic()。其與應(yīng)用程序的主要接口是uip_appcall( )。uip_init()是系統(tǒng)初始化時(shí)調(diào)用的,主要初始化協(xié)議棧的偵聽端口和默認(rèn)所有連接是關(guān)閉的。當(dāng)網(wǎng)卡驅(qū)動(dòng)收到一個(gè)輸入包時(shí),將放入全局緩沖區(qū)uip_buf中,包的大小由全局變量uip_len約束。同時(shí)將調(diào)用uip_input()函數(shù),這個(gè)函數(shù)將會(huì)根據(jù)包首部的協(xié)議處理這個(gè)包和需要時(shí)調(diào)用應(yīng)用程序。當(dāng)uip_input()返回時(shí),一個(gè)輸出包同樣放在全局緩沖區(qū)uip_buf里,大小賦給uip_len。如果uip_len是0,則說明沒有包要發(fā)送,否則調(diào)用底層系統(tǒng)的發(fā)包函數(shù)將包發(fā)送到網(wǎng)絡(luò)上。uIP周期計(jì)時(shí)是用于驅(qū)動(dòng)所有的uIP內(nèi)部時(shí)鐘事件。當(dāng)周期計(jì)時(shí)激發(fā),每一個(gè)TCP連接都會(huì)調(diào)用uIP函數(shù)uip_periodic()。類似于uip_input()函數(shù),uip_periodic()函數(shù)返回時(shí),輸出的IP包要放到uip_buf中,供底層系統(tǒng)查詢uip_len的大小發(fā)送。由于使用TCP/IP的應(yīng)用場(chǎng)景很多,因此應(yīng)用程序作為單獨(dú)的模塊由用戶實(shí)現(xiàn)。uIP協(xié)議棧提供一系列接口函數(shù)供用戶程序調(diào)用,其中大部分函數(shù)是作為C的宏命令實(shí)現(xiàn)的,主要是為了速度、代碼大小、效率和堆棧的使用。用戶需要將應(yīng)用層入口程序作為接口提供給uIP協(xié)議棧,并將這個(gè)函數(shù)定義為宏uip_appcall()。這樣,uIP 在接受到底層傳來的數(shù)據(jù)包后,在需要送到上層應(yīng)用程序處理的地方,調(diào)用uip_appcall( )。在不用修改協(xié)議棧的情況下可以適配不同的應(yīng)用程序。 uIP協(xié)議棧提供的主要接口,為了減少函數(shù)調(diào)用造成的額外支出,大部分接口函數(shù)以宏命令實(shí)現(xiàn)的。1.初始化uIP協(xié)議棧:uip_init()2.處理輸入包:uip_input()3.處理周期計(jì)時(shí)事件:uip_periodic()4.開始監(jiān)聽端口:uip_listen()5.連接到遠(yuǎn)程主機(jī):uip_connect()6.接收到連接請(qǐng)求:uip_connected()7.主動(dòng)關(guān)閉連接:uip_close()8.連接被關(guān)閉:uip_closed()9.發(fā)出去的數(shù)據(jù)被應(yīng)答:uip_acked()10.在當(dāng)前連接發(fā)送數(shù)據(jù):uip_send()11.在當(dāng)前連接上收到新的數(shù)據(jù):uip_newdata()12.告訴對(duì)方要停止連接:uip_stop()13.連接被意外終止:uip_aborted() uIP在MCS51單片機(jī)上的調(diào)試 調(diào)試步驟[15]:1.為此項(xiàng)目建立一個(gè)keil C工程,建立src目錄存放源文件。2.\unix\,了解uIP 的的主循環(huán)代碼架構(gòu)。3.\unix\ 寫網(wǎng)卡驅(qū)動(dòng)程序,與具體硬件相關(guān)。這一步比較費(fèi)點(diǎn)時(shí)間,不過好在大部分網(wǎng)卡芯片的驅(qū)動(dòng)程序都有代碼借鑒或移植。驅(qū)動(dòng)需要提供三個(gè)函數(shù),以RTL9019AS 驅(qū)動(dòng)為例:etherdev_init():網(wǎng)卡初始化函數(shù),初始化網(wǎng)卡的工作模式。u16_t etherdev_read(void):讀包函數(shù)。將網(wǎng)卡收到的數(shù)據(jù)放入全局緩存區(qū)uip_buf 中,返回包的長(zhǎng)度,賦給uip_len。void etherdev_send(void):發(fā)包函數(shù)。將全局緩存區(qū)uip_buf 里的數(shù)據(jù)(長(zhǎng)度放在uip_len 中)發(fā)送出去。4.由于uIP協(xié)議棧需要使用時(shí)鐘,為TCP和ARP的定時(shí)器服務(wù)。因此使用單片機(jī)的定時(shí)器0用作時(shí)鐘,每20ms讓計(jì)數(shù)tick_t加1。這樣,25次計(jì)數(shù)()滿了后可以調(diào)用TCP的定時(shí)處理程序。10S后可以調(diào)用ARP老化程序。5.\uip\ 中,放到src 下。如果需要ARP協(xié)議, 也放到src 下。6.,用來設(shè)置本地的IP 地址、網(wǎng)關(guān)地址、MAC地址、全局緩沖區(qū)的大小、支持的最大連接數(shù)、偵聽數(shù)、ARP 表大小等。需要放在src下,并且根據(jù)需要配置。 版本中對(duì)配置做了如下修改:(1)配置IP 地址,默認(rèn)先關(guān)IP,在初始化中再設(shè)定。define UIP_FIXEDADDR 0define UIP_IPADDR0 192define UIP_IPADDR1 168define UIP_IPADDR2 1define UIP_IPADDR3 9define UIP_NETMASK0 255define UIP_NETMASK1 255define UIP_NETMASK2 255define UIP_NETMASK3 0define UIP_DRIPADDR0 192define UIP_DRIPADDR1 168define UIP_DRIPADDR2 1define UIP_DRIPADDR3 1(2)使能MAC地址define UIP_FIXEDETHADDR 1define UIP_ETHADDR0 0x00define UIP_ETHADDR1 0x4fdefine UIP_ETHADDR2 0x49define UIP_ETHADDR3 0x12define UIP_ETHADDR4 0x12define UIP_ETHADDR5 0x13(3)使能ping功能define UIP_PINGADDRCONF 1(4)關(guān)閉主動(dòng)請(qǐng)求連接的功能define UIP_ACTIVE_OPEN 0(5)將uip_tcp_appstate_t 定位u8_t類型。(6)由于單片機(jī)是大端結(jié)構(gòu),因此宏定義需要修改define UIP_CONF_BYTE_ORDER UIP_BIG_ENDIAN(7)暫時(shí)不移植打印信息,先關(guān)閉define UIP_CONF_LOGGING 0(8)定義數(shù)據(jù)結(jié)構(gòu)類型typedef unsigned char u8_t。typedef unsigned int u16_t。typedef unsigned long u32_t。7.如果使用keil C的小模式編譯,需要在大部分的RAM的變量前增加xdata。8.data為keil C的關(guān)鍵詞,代碼中所有出現(xiàn)data的地方(主要是參數(shù)、局部變量、結(jié)構(gòu)體成員)改為pucdata 或ucdata。9.解決編譯過程中的錯(cuò)誤。uIP協(xié)議棧為C語言編寫,編譯過程中的問題比較少,并且容易解決。 uIP的主控制循環(huán)(main函數(shù)[16])通過實(shí)際的代碼說明uIP協(xié)議棧的主控制循環(huán)。void main(void){/*省略部分代碼*//*設(shè)置TCP 超時(shí)處理時(shí)間和ARP 老化時(shí)間*/timer_set(amp。periodic_timer,
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1