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

正文內(nèi)容

單片機(jī)與以太網(wǎng)接口設(shè)計(jì)(參考版)

2025-07-03 13:17本頁(yè)面
  

【正文】 define UIP_FIXEDADDR 0define UIP_IPADDR0 192define 。需要放在src下,并且根據(jù)需要配置。如果需要ARP協(xié)議, 也放到src 下。10S后可以調(diào)用ARP老化程序。因此使用單片機(jī)的定時(shí)器0用作時(shí)鐘,每20ms讓計(jì)數(shù)tick_t加1。將全局緩存區(qū)uip_buf 里的數(shù)據(jù)(長(zhǎng)度放在uip_len 中)發(fā)送出去。將網(wǎng)卡收到的數(shù)據(jù)放入全局緩存區(qū)uip_buf 中,返回包的長(zhǎng)度,賦給uip_len。驅(qū)動(dòng)需要提供三個(gè)函數(shù),以RTL9019AS 驅(qū)動(dòng)為例:etherdev_init():網(wǎng)卡初始化函數(shù),初始化網(wǎng)卡的工作模式。3.\unix\ 寫(xiě)網(wǎng)卡驅(qū)動(dòng)程序,與具體硬件相關(guān)。1.初始化uIP協(xié)議棧:uip_init()2.處理輸入包:uip_input()3.處理周期計(jì)時(shí)事件:uip_periodic()4.開(kāi)始監(jiān)聽(tīng)端口: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ī)上的移植 移植步驟[15]:1.為此項(xiàng)目建立一個(gè)keil C工程,建立src目錄存放源文件。在不用修改協(xié)議棧的情況下可以適配不同的應(yīng)用程序。用戶需要將應(yīng)用層入口程序作為接口提供給uIP協(xié)議棧,并將這個(gè)函數(shù)定義為宏uip_appcall()。由于使用TCP/IP的應(yīng)用場(chǎng)景很多,因此應(yīng)用程序作為單獨(dú)的模塊由用戶實(shí)現(xiàn)。當(dāng)周期計(jì)時(shí)激發(fā),每一個(gè)TCP連接都會(huì)調(diào)用uIP函數(shù)uip_periodic()。如果uip_len是0,則說(shuō)明沒(méi)有包要發(fā)送,否則調(diào)用底層系統(tǒng)的發(fā)包函數(shù)將包發(fā)送到網(wǎng)絡(luò)上。同時(shí)將調(diào)用uip_input()函數(shù),這個(gè)函數(shù)將會(huì)根據(jù)包首部的協(xié)議處理這個(gè)包和需要時(shí)調(diào)用應(yīng)用程序。uip_init()是系統(tǒng)初始化時(shí)調(diào)用的,主要初始化協(xié)議棧的偵聽(tīng)端口和默認(rèn)所有連接是關(guān)閉的。即uip_init(),uip_input()和uip_periodic()。由于uIP對(duì)資源的需求少和移植容易,大部分的8位微控制器都使用過(guò)uIP協(xié)議棧,而且很多的著名的嵌入式產(chǎn)品和項(xiàng)目(如衛(wèi)星,Cisco路由器,無(wú)線傳感器網(wǎng)絡(luò))中都在使用uIP協(xié)議棧。通用性強(qiáng),移植起來(lái)基本不用修改就可以通過(guò)。(4) 支持多個(gè)主動(dòng)連接和被動(dòng)連接并發(fā)。(2) 占用的內(nèi)存數(shù)非常少,RAM 占用僅幾百字節(jié)。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]。 輕量級(jí)TCP/IP協(xié)議棧uIP的嵌入uIP由瑞典計(jì)算機(jī)科學(xué)學(xué)院(網(wǎng)絡(luò)嵌入式系統(tǒng)小組)的Adam Dunkels開(kāi)發(fā)。5) 文件管理。接管在傳輸緩沖區(qū)中檢查空間的常規(guī)任務(wù),并發(fā)送下一個(gè)文件片段或下幾個(gè)目錄條目。對(duì)于POST請(qǐng)求需要解析數(shù)據(jù),根據(jù)定義好的格式解析出所提交的數(shù)據(jù),交給應(yīng)用程序處理,再根據(jù)應(yīng)用程序的接收應(yīng)答來(lái)配置數(shù)據(jù)。根據(jù)所請(qǐng)求的文件名,查找匹配文件,配置應(yīng)答數(shù)據(jù)。服務(wù)器處理函數(shù)負(fù)責(zé)解析URL,解析出請(qǐng)求的方法及請(qǐng)求文件,調(diào)用GET或POST處理函數(shù)。當(dāng)瀏覽器有數(shù)據(jù)需要提交給服務(wù)器的時(shí)候,需要提交POST,所提交的表單或數(shù)據(jù)在請(qǐng)求的數(shù)據(jù)區(qū)發(fā)送[12]。每一行指定了一個(gè)大寫(xiě)字母表示的方法(也就是命令),后面跟著一串參數(shù)。開(kāi) 始有無(wú)空閑的IP緩沖區(qū)?封裝TCP報(bào)文頭?有無(wú)數(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ī)制來(lái)從Web服務(wù)器獲取文檔。6) 計(jì)算校驗(yàn)和。4) 若有選項(xiàng),寫(xiě)入選項(xiàng)。2) 將套接字中序號(hào)、確認(rèn)號(hào)、窗口號(hào)、源端口號(hào)、目的端口號(hào)寫(xiě)入IP發(fā)送緩沖區(qū)。系統(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]。為了實(shí)現(xiàn)TCP狀態(tài)機(jī)。每次狀態(tài)變化都伴隨著一個(gè)函數(shù)的調(diào)用,使系統(tǒng)更新活動(dòng)時(shí)鐘。 開(kāi) 始正確的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ī)來(lái)實(shí)現(xiàn)后續(xù)處理。3) 如果還沒(méi)有,就發(fā)送復(fù)位信息。 接收到報(bào)文后的步驟:1) 搜索所有的套接字,匹配IP地址和端口號(hào)。而嵌入式系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)都是針對(duì)某個(gè)特定的應(yīng)用進(jìn)行的,因而有必要對(duì)TCP協(xié)議的實(shí)現(xiàn)算法進(jìn)行適當(dāng)?shù)暮?jiǎn)化。狀態(tài)機(jī)越復(fù)雜,維護(hù)的花費(fèi)就越大,對(duì)處理器的存儲(chǔ)能力和運(yùn)算能力的要求就越高。TCP的實(shí)現(xiàn)過(guò)程可以用狀態(tài)機(jī)來(lái)描述。在等待應(yīng)答的同時(shí),該工具也有可能應(yīng)答它所接收到得任何ICMP或ARP請(qǐng)求,這就允許存在兩個(gè)節(jié)點(diǎn)互相Ping。4) 發(fā)送帶有一些數(shù)據(jù)的ICMP應(yīng)答。2) 發(fā)送ARP請(qǐng)求。3) 將數(shù)據(jù)幀放至發(fā)送數(shù)據(jù)幀緩沖區(qū)。 開(kāi)始正確的ICMP報(bào)文?校驗(yàn)和正確否?ICMP請(qǐng)求?ICMP應(yīng)答?結(jié)束發(fā)送ICMP應(yīng)答應(yīng)答處理NNYYNYYN ICMP報(bào)文接收處理流程圖ICMP報(bào)文發(fā)送步驟如下:1) 復(fù)制數(shù)據(jù)到IP緩沖區(qū)中適當(dāng)?shù)奈恢?。接收到ICMP報(bào)文后,判斷報(bào)文是不是正確的ICMP報(bào)文,并且計(jì)算校驗(yàn)和是否正確,再根據(jù)ICMP報(bào)文中類型和代碼字段判斷是什么類型的報(bào)文,并做相應(yīng)的應(yīng)答處理。開(kāi) 始本網(wǎng)段內(nèi)報(bào)文?存在MAC地址映射?有網(wǎng)關(guān)MAC地址映射?保存發(fā)送狀態(tài)更新ARP表更新網(wǎng)關(guān)ARP表發(fā)送ARP請(qǐng)求清發(fā)送緩沖區(qū)標(biāo)志清發(fā)送緩沖區(qū)標(biāo)志發(fā)送網(wǎng)關(guān)ARP請(qǐng)求調(diào)用IP打包函數(shù)發(fā)送IP報(bào)文調(diào)用IP打包函數(shù)發(fā)送IP報(bào)文結(jié) 束保存發(fā)送狀態(tài)NYNYYN IP報(bào)文發(fā)送流程 差錯(cuò)控制報(bào)文ICMP的實(shí)現(xiàn)ICMP包處理函數(shù)負(fù)責(zé)處理接收到得ICMP報(bào)文,若該報(bào)文為Ping請(qǐng)求則調(diào)用Ping應(yīng)答函數(shù)響應(yīng),若為Ping應(yīng)答則做相應(yīng)的應(yīng)答處理。若存在地址映射關(guān)系,則更新ARP緩存表,清除發(fā)送緩沖區(qū)標(biāo)志后即可發(fā)送報(bào)文,若沒(méi)有地址映射關(guān)系,則要保存該報(bào)文的發(fā)送狀態(tài),之后發(fā)送相應(yīng)的ARP請(qǐng)求。 發(fā)送IP報(bào)文IP報(bào)文發(fā)送函數(shù)負(fù)責(zé)把需要發(fā)送的報(bào)文封裝成IP數(shù)據(jù)報(bào),其中就要判斷報(bào)文的目的地在不在本網(wǎng)段內(nèi),以及ARP緩存表中是否存在地址映射關(guān)系,以此來(lái)選擇是立即發(fā)送報(bào)文還是計(jì)時(shí)等待。7) 判斷IP報(bào)文封裝的上層協(xié)議類型,調(diào)用相應(yīng)處理程序。6) 去掉IP選項(xiàng)。因?yàn)槭盏絀P數(shù)據(jù)報(bào)文就意味著本系統(tǒng)可能在短期內(nèi)會(huì)與此IP地址再次通訊。若是可識(shí)別的IP報(bào)文,則進(jìn)行ARP緩存表的更新。校驗(yàn)時(shí)計(jì)算以字為單位的反碼和的反碼,將對(duì)方的校驗(yàn)和計(jì)算在內(nèi),若校驗(yàn)后的值為0則說(shuō)明校驗(yàn)正確,否則出錯(cuò),丟棄該報(bào)文。2) 計(jì)算校驗(yàn)和。正確的IP報(bào)文?校驗(yàn)和正確否?合法的IP報(bào)文?更新ARP表去掉IP選項(xiàng)ICMP報(bào)文?TCP報(bào)文開(kāi)始結(jié)束ICMP處理程序TCP處理程序NYYNNNYYY IP報(bào)文處理流程圖其步驟如下:1) 判斷是否IP報(bào)文及報(bào)文是否正確。注:本課題不實(shí)現(xiàn)IP分片和重組功能[10]。若為本網(wǎng)段內(nèi)主機(jī),而且ARP緩存表中沒(méi)有該地址的映射關(guān)系,則在本網(wǎng)段內(nèi)發(fā)送ARP請(qǐng)求,請(qǐng)求該主機(jī)的物理地址與IP地址映射;若判斷出該主機(jī)不在本網(wǎng)段內(nèi),就要把目的物理地址設(shè)置為網(wǎng)關(guān)的物理地址來(lái)發(fā)送IP報(bào)文,相應(yīng)的ARP請(qǐng)求也是發(fā)送給網(wǎng)關(guān)的ARP請(qǐng)求。在發(fā)送IP報(bào)文的時(shí)候,IP發(fā)送程序要判斷目的IP地址是否在本網(wǎng)段內(nèi),這就要涉及到子網(wǎng)掩碼和網(wǎng)關(guān)的IP地址。參數(shù)包括本機(jī)的IP地址、本機(jī)的物理地址、子網(wǎng)掩碼、網(wǎng)關(guān)的IP地址、自定義端口號(hào)、基于TCP應(yīng)用的目的IP地址與目的端口號(hào)以及協(xié)議類型的設(shè)置。程序不主動(dòng)學(xué)習(xí)不是發(fā)給自己IP地址的MAC地址信息,因?yàn)閱纹瑱C(jī)可以擴(kuò)展的資源有限,ARP表占用的內(nèi)存的容量不能太大,所以只有頻繁用到的地址才應(yīng)該放在ARP表中,否則一旦出現(xiàn)“顛簸”,ARP表就失效了。5) ARP包處理函數(shù)完成對(duì)接收到的ARP應(yīng)答包的信息處理,主要是進(jìn)行ARP表的學(xué)習(xí)和更新,以及喚醒IP層的等待發(fā)送報(bào)文調(diào)度函數(shù)。開(kāi)始合法ARP字段ARP請(qǐng)求?ARP應(yīng)答處理ARP應(yīng)答?更新ARP表喚醒IP發(fā)送函數(shù)結(jié)束NNNYY ARP報(bào)文處理流程圖3) ARP應(yīng)答函數(shù)比較簡(jiǎn)單,除目的端硬件的所有其他的字段都有填充值。ARP協(xié)議要求程序根據(jù)子網(wǎng)掩碼判斷IP地址是否屬于同一子網(wǎng),如果在同一子網(wǎng)內(nèi),ARP請(qǐng)求目的MAC地址,否則請(qǐng)求默認(rèn)網(wǎng)關(guān)的MAC地址。各函數(shù)功能如下:1) ARP初始化函數(shù)完成ARP表的初始化,概括的說(shuō)就是ARP表Timer字段清0。整個(gè)ARP處理過(guò)程,主要分為五個(gè)函數(shù),包括ARP初始化、ARP請(qǐng)求、ARP應(yīng)答、ARP包處理、IP包接收預(yù)處理。下面將分別介紹這些協(xié)議的實(shí)現(xiàn)方法。我們保留四個(gè)主要的協(xié)議,即ARP協(xié)議、IP協(xié)議、ICMP協(xié)議、TCP協(xié)議。否則丟棄該報(bào)文。3) 接收到正確的報(bào)文后,讀出報(bào)文到系統(tǒng)緩沖區(qū),否則丟棄。2) 若有報(bào)文到達(dá),判斷報(bào)文是否正確。系統(tǒng)中接收數(shù)據(jù)報(bào)采用查詢方式,具體步驟如下:1) 由CURR和BNRY這兩個(gè)寄存器來(lái)判斷是否有新的報(bào)文到達(dá)。初始化時(shí)使BNRY=CURR1。CURR是網(wǎng)卡寫(xiě)緩沖區(qū)的指針,指向此時(shí)要寫(xiě)的頁(yè)(正在寫(xiě)的頁(yè)的下一頁(yè))。接收到得第一個(gè)數(shù)據(jù)包由CURR決定。Length=60選定發(fā)送緩沖區(qū)起始地址NY寫(xiě)入源物理地址更新發(fā)送緩沖區(qū)標(biāo)志N開(kāi) 始 指定發(fā)送長(zhǎng)度向發(fā)送緩沖區(qū)拷貝數(shù)據(jù)上次發(fā)送完畢?重 發(fā) 6 次發(fā)送數(shù)據(jù)結(jié) 束 以太網(wǎng)發(fā)送報(bào)文流程圖 報(bào)文的接收。6) 發(fā)送報(bào)文。將數(shù)據(jù)拷貝到RTL8019AS發(fā)送緩沖區(qū),即芯片內(nèi)部RAM中。3) 設(shè)置發(fā)送長(zhǎng)度。由于系統(tǒng)定義了兩個(gè)發(fā)送緩沖區(qū),以便可以同時(shí)發(fā)送數(shù)據(jù)和向芯片拷貝數(shù)據(jù),所以在發(fā)送報(bào)文時(shí)要選定緩沖區(qū)。若長(zhǎng)度過(guò)小則添加字段,保證長(zhǎng)度為最小報(bào)文長(zhǎng)度,而最大報(bào)文長(zhǎng)度則由上層應(yīng)用控制。其步驟大致可分為:1) 長(zhǎng)度判斷。這樣就可以做到不斷地進(jìn)行數(shù)據(jù)發(fā)送。這兩個(gè)發(fā)送緩沖區(qū)的作用是,用戶可以將數(shù)據(jù)包放在發(fā)送緩沖區(qū)1,然后啟動(dòng)發(fā)送命令。發(fā)送報(bào)文時(shí)在RTL8019AS里面定義了兩個(gè)能存儲(chǔ)最大以太網(wǎng)報(bào)文的緩沖區(qū),把前6頁(yè)0x40~0x45定義為發(fā)送緩沖區(qū)1,接下來(lái)的6頁(yè)0x46~0x4B定義為發(fā)送緩沖區(qū)2。系統(tǒng)中使用0x40~0x4B為發(fā)送緩沖區(qū),共12頁(yè),剛好可以存儲(chǔ)2個(gè)最大的以太網(wǎng)包。6) TCR=0xE0,設(shè)置發(fā)送配置寄存器,啟用CRC自動(dòng)生成和自動(dòng)校驗(yàn),工作在正常模式;7) DCR=0xC8,設(shè)置數(shù)據(jù)配置寄存器,使用FIFO(Final Input Final Output)緩存,普通模式,8位數(shù)據(jù)傳輸,字節(jié)順序?yàn)楦呶蛔止?jié)在前,低位字節(jié)在后;8) IMR=0x00,設(shè)置中斷屏蔽寄存器,屏蔽所有中斷;9) CR=0x61,選擇頁(yè)1的寄存器;10) CURR=0x4D,CURR是RTL8019AS寫(xiě)內(nèi)存的指針,指向當(dāng)前正在寫(xiě)的頁(yè)的下一頁(yè),初始化時(shí)指向0x4C+1=0x4D;11) 設(shè)置多址寄存器MAR0~MAR5,均設(shè)置為0x00;12) 設(shè)置網(wǎng)卡地址寄存器PAR0~PAR5;13) CR=0x22,選擇頁(yè)1的寄存器,進(jìn)入正常工作狀態(tài)。然后開(kāi)始RTL8019AS的初始化操作。 RTL8019AS的初始化[8]初始化函數(shù)用于對(duì)RTL8019AS進(jìn)行初始化操作。驅(qū)動(dòng)程序包括3個(gè)部分,用3個(gè)函數(shù)實(shí)現(xiàn)即:芯片初始化函數(shù)、報(bào)文發(fā)送函數(shù)、報(bào)文接收函數(shù)。簡(jiǎn)言之就是8019完成數(shù)據(jù)包和電信號(hào)之間的相互轉(zhuǎn)換:數(shù)據(jù)包===電信號(hào)。 RTL8019AS驅(qū)動(dòng)程序設(shè)計(jì)從程序員的角度看,8019工作流程非常簡(jiǎn)單,驅(qū)動(dòng)程序?qū)⒁l(fā)送的數(shù)據(jù)包按指定格式寫(xiě)入芯片并啟動(dòng)發(fā)送命
點(diǎn)擊復(fù)制文檔內(nèi)容
數(shù)學(xué)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1