版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
,.LWIP移植說(shuō)明及程序分析新哥NUAA(技術(shù)交流279141909)2015年8月說(shuō)在前面LWIP,這個(gè)輕量級(jí)的TCP/IP協(xié)議,說(shuō)來(lái)慚愧,把我虐得夠慘的,今天算是第三次接觸lwip了,第一次是認(rèn)真看了別人移植可以ping通的程序,后來(lái)我也參照野火的以太網(wǎng)文檔一步步的移植了一次,但不管怎么調(diào)都有bug!bug!bug!一氣之下就不想再碰了!!這兩天想想又很不甘心,于是乎,我又開(kāi)始移植起來(lái)~~~感謝閱讀移植要點(diǎn)這次也首先是基于無(wú)操作系統(tǒng)的移植,在后期再移植基于ucou2的網(wǎng)絡(luò)協(xié)議。那么在這里我就首先帶領(lǐng)那些炙熱于lwip協(xié)議但又因網(wǎng)上的移植資料殘缺不全而苦無(wú)移植良策的同志們來(lái)一次徹底的lwip移植吧(好長(zhǎng),說(shuō)的我好累)!精品文檔放心下載本文檔是基于stm32f103+ENC28J06的移植(如果是stm32f107就不是這種方法了,107處理器自帶MAC控制器,只需要外接一個(gè)PHY控制器和以太網(wǎng)變壓器就可以實(shí)現(xiàn)以太網(wǎng)功能。)我發(fā)現(xiàn)上一次移植是照葫蘆畫(huà)瓢,完全沒(méi)有理解移植的要點(diǎn),在這里我簡(jiǎn)單的總結(jié)一下移植要點(diǎn)和出現(xiàn)bug的原因吧。謝謝閱讀移植要點(diǎn)1:復(fù)制opt.h文件到新建的lwipopt.h文件,并按照處理器資源與實(shí)際需求修改。(雖然lwipopt.h是有opt.h文件修改得到的,但opt.h文件仍然有用,里面涉及到的條件編譯在協(xié)議的正常運(yùn)行中是必要的,在keil4中要同樣包含在路徑中。換句話(huà)說(shuō),只要在其他文件里沒(méi)有對(duì)opt.h中條件編譯的對(duì)象進(jìn)行重定義,那么就要以opt.h中的條件編譯為準(zhǔn),如果讀者刪掉opt.h后可以看到很多bug)。謝謝閱讀移植要點(diǎn)二:編寫(xiě)enc28j60的驅(qū)動(dòng)文件(含頭文件)。(函數(shù)模塊包括讀控制寄存器、向以太網(wǎng)控制器寫(xiě)入命令、讀取buff的數(shù)據(jù)、向buffer寫(xiě)入數(shù)據(jù)、選定將要操作的bank、讀取控制寄存器的內(nèi)容、寫(xiě)入數(shù)據(jù)到控制寄存器、向PHY寫(xiě)入控制參數(shù)、初始化以太網(wǎng)控制器、發(fā)送數(shù)據(jù)包函數(shù)、接收數(shù)據(jù)包函數(shù))。以上括號(hào)中的函數(shù)可以查看enc28j60的datasheet自己寫(xiě),也可以網(wǎng)上下載借鑒別人寫(xiě)好的。謝謝閱讀移植要點(diǎn)三:編寫(xiě)網(wǎng)絡(luò)處理函數(shù)netconfig.c(與對(duì)應(yīng)的netconfig.h)。主要是初始化lwip協(xié)議棧、以及做一些系統(tǒng)時(shí)鐘中斷等處理。這一句將enc28j6與lwip連接起來(lái):感謝閱讀netif_add(&enc28j60,&ipaddr,&netmask,&gw,NULL,ðernetif_init,ðernet_input);ethernetif_init,ethernet_input是lwip協(xié)議中neif與外設(shè)接口的函數(shù)。感謝閱讀移植要點(diǎn)四:修改路徑為\LWIP\lwip-1.3.2\lwip-1.3.2\src\netif中ethernetif.c文件。原協(xié)議棧中ethernetif.c只提供了一些子函數(shù)的模板,要實(shí)現(xiàn)通信功能還要根據(jù)網(wǎng)卡(enc28j60)進(jìn)一步修改。需修改的子函數(shù)有:網(wǎng)卡初始化函數(shù)(low_level_init)、底層發(fā)送數(shù)據(jù)函數(shù)謝謝閱讀low_level_output)、底層接收數(shù)據(jù)函數(shù)(low_level_input)、數(shù)據(jù)輸入處理函數(shù)精品文檔放心下載(ethernetif_input)。對(duì)以上四個(gè)要點(diǎn)進(jìn)行正確的配置后,就完成了移植步驟的一大半了。但移植的最大問(wèn)題往往不是出在這兒。往往是讀者對(duì)keil的不熟悉,比方說(shuō)頭文件路徑是不是正確的包含了,這往往是出現(xiàn)bug的根本原因所在。謝謝閱讀移植過(guò)程好了,說(shuō)完以上要注意的要點(diǎn)后,其實(shí)我們對(duì)lwip的移植過(guò)程也有一個(gè)大體的了解。那接下來(lái)我們就真正手把手去移植lwip吧,在移植的過(guò)程中呢,帶讀者簡(jiǎn)要分析一下程序,感謝閱讀,.就當(dāng)做學(xué)習(xí)一下嵌入式及編程咯。Step1:在移植的時(shí)候,我們也常常需要利用contrib-1.3.0.zip中的文件。解壓后,在\contrib-1.3.2_\contrib\ports目錄下有一些針對(duì)特定平臺(tái)移植時(shí)使用的文件,選擇進(jìn)入其中一個(gè)目錄,如\contrib-1.3.0_\contrib\portsold\6502\include\arch。感謝閱讀我們需要用到的是cc.h、perf.h(不需修改)和sys_arch.h(可以暫不移植,根據(jù)操作系統(tǒng)而定)文件,通常把它復(fù)制出來(lái)存放到自己工程中的arch文件夾中。cc.h包含了LwIP對(duì)于基本數(shù)據(jù)類(lèi)型的定義。perf.h文件是和系統(tǒng)統(tǒng)計(jì)和測(cè)量有關(guān)的頭文件,sys_arch.h定義了與系統(tǒng)有關(guān)的信號(hào)量、郵箱及線(xiàn)程(這里是基于無(wú)操作系統(tǒng)的移植暫時(shí)不需要對(duì)其進(jìn)行更改)。其中cc.h要根據(jù)編譯器平臺(tái)與處理器平臺(tái)等進(jìn)行修改。還有一個(gè)lwipopt.h文件也要根據(jù)\LWIP\lwip-1.3.2\lwip-1.3.2\src\include\lwip中的opt.h文件進(jìn)行修改。精品文檔放心下載(其實(shí)lwiopts.h起名無(wú)所謂,只要將opt.h中包含的頭文件lwipopts.h改為你新建的.h文件一致就可以了,但里面的內(nèi)容配置包含用戶(hù)對(duì)協(xié)議棧內(nèi)核的參數(shù)配置,要根據(jù)實(shí)際情況進(jìn)行更改,有時(shí)候嚴(yán)格按照文檔對(duì)應(yīng)來(lái)更改也會(huì)出錯(cuò),可能要?jiǎng)h除opt.t中的條件編譯,盡量簡(jiǎn)潔明朗一點(diǎn),其中精品文檔放心下載#defineNO_SYS1#defineLWIP_NETCONN0這兩個(gè)是很重要的!定義錯(cuò)了或不定義都會(huì)導(dǎo)致bug?。。┚肺臋n放心下載Step2:在完成以上的三個(gè)文件的移植后,就已經(jīng)完成一小部分工作量,雖然很簡(jiǎn)單,但一定要細(xì)心哦親!接下來(lái)看一下enc28j60的驅(qū)動(dòng)文件吧。這部分文件批量購(gòu)買(mǎi)的話(huà)芯片公司會(huì)提供源代碼,也可以通過(guò)論壇等途徑下載到的,需要考驗(yàn)讀者的信息搜索能力啦!精品文檔放心下載/****************************************************謝謝閱讀函數(shù)名:main.c描述:main輸入:無(wú)輸出:無(wú)****************************************************/感謝閱讀#include"include.h"__IOuint32_tLocalTime=0;intmain(void)精品文檔放心下載{uart_init(9600);//串口初始化為9600ENC_SPI_Init();謝謝閱讀SysTick_Init();//延時(shí)函數(shù)初始化/*初始化完成之后,通過(guò)下面的心跳函數(shù)直接通過(guò)結(jié)構(gòu)體neif->input(ethernet_input())進(jìn)行對(duì)函數(shù)的訪(fǎng)問(wèn)了說(shuō)明:謝謝閱讀ethernet_input()和ethernetif_input這兩個(gè)函數(shù)是有區(qū)別的,感謝閱讀ethernetif_input是調(diào)用ethernet_input函數(shù)的,但是初始化neif_add結(jié)構(gòu)體的時(shí)候還是ethernet_input這個(gè)函數(shù)。*/感謝閱讀LwIP_Init();,.httpd_init();while(1){/*輪詢(xún)*/LwIP_Periodic_Handle(LocalTime);感謝閱讀}}在以上程序LwIP_Init()中有一句程序語(yǔ)句為:精品文檔放心下載netif_add(&enc28j60,&ipaddr,&netmask,&gw,NULL,ðernetif_init,ðernet_input);感謝閱讀其中ethernetif_init,ethernet_input將LWIP協(xié)議與enc28j60結(jié)合起來(lái)了,實(shí)現(xiàn)了網(wǎng)卡的網(wǎng)絡(luò)功能。ethernetif_init中的low_level_init(netif)是網(wǎng)卡初始化函數(shù)(包括mac地址寫(xiě)入網(wǎng)卡及網(wǎng)卡的初始化。mac地址結(jié)構(gòu)為00:00:00:00:00:00:00,48位,其中前三個(gè)為芯片生產(chǎn)商定義的,后面三個(gè)可以認(rèn)為定義,如果前面的數(shù)據(jù)隨意改動(dòng)了再編譯的話(huà),結(jié)果一想而知:有bug?。。┫旅婢徒Y(jié)合enc28j60的datasheet分析一下以太網(wǎng)的初始化程序:謝謝閱讀/****************************************************感謝閱讀函數(shù)名:enc28j60Init描述:初始化以太網(wǎng)控制器輸入:MAC地址輸出:無(wú)****************************************************/感謝閱讀voidenc28j60Init(u8*macaddr)謝謝閱讀{/*CS端口為輸出*/01//ENC28J60_RSTH();/*禁止ENC28J60*/精品文檔放心下載02ENC28J60_CSH();/*ENC28J60軟件復(fù)位該函數(shù)可以改進(jìn)*/03enc28j60WriteOp(ENC28J60_SOFT_RESET,0,ENC28J60_SOFT_RESET);感謝閱讀/*設(shè)置接收緩沖區(qū)起始地址該變量用于每次讀取緩沖區(qū)時(shí)保留下一個(gè)包的首地址*/04NextPacketPtr=RXSTART_INIT;感謝閱讀/*設(shè)置接收緩沖區(qū)起始指針*/05enc28j60Write(ERXSTL,RXSTART_INIT&0xFF);謝謝閱讀06enc28j60Write(ERXSTH,RXSTART_INIT>>8);精品文檔放心下載/*設(shè)置接收緩沖區(qū)讀指針*/07enc28j60Write(ERXRDPTL,RXSTART_INIT&0xFF);謝謝閱讀08enc28j60Write(ERXRDPTH,RXSTART_INIT>>8);感謝閱讀/*設(shè)置接收緩沖區(qū)結(jié)束指針*/09enc28j60Write(ERXNDL,RXSTOP_INIT&0xFF);謝謝閱讀10enc28j60Write(ERXNDH,RXSTOP_INIT>>8);感謝閱讀/*設(shè)置發(fā)送緩沖區(qū)起始指針*/11enc28j60Write(ETXSTL,TXSTART_INIT&0xFF);精品文檔放心下載12enc28j60Write(ETXSTH,TXSTART_INIT>>8);感謝閱讀/*設(shè)置發(fā)送緩沖區(qū)結(jié)束指針*/13enc28j60Write(ETXNDL,TXSTOP_INIT&0xFF);感謝閱讀,.enc28j60Write(ETXNDH,TXSTOP_INIT>>8);精品文檔放心下載/*使能單播過(guò)濾使能CRC校驗(yàn)使能格式匹配自動(dòng)過(guò)濾*/謝謝閱讀enc28j60Write(ERXFCON,ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN);精品文檔放心下載16 enc28j60Write(EPMM0,0x3f); //格式匹配字節(jié)精品文檔放心下載enc28j60Write(EPMM1,0x30);//格式匹配字節(jié)謝謝閱讀enc28j60Write(EPMCSL,0xf9);//格式匹配字節(jié)精品文檔放心下載enc28j60Write(EPMCSH,0xf7);//格式匹配字節(jié)謝謝閱讀/*使能MAC接收允許MAC發(fā)送暫停控制幀當(dāng)接收到暫??刂茙瑫r(shí)停止發(fā)送*/謝謝閱讀enc28j60Write(MACON1,MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS);/*退出復(fù)位狀態(tài)*/感謝閱讀enc28j60Write(MACON2,0x00);謝謝閱讀/*用0填充所有短幀至60字節(jié)長(zhǎng)并追加一個(gè)CRC發(fā)送CRC使能幀長(zhǎng)度校驗(yàn)使能MAC全雙工使能*/謝謝閱讀/*提示由于ENC28J60不支持802.3的自動(dòng)協(xié)商機(jī)制,所以對(duì)端的網(wǎng)絡(luò)卡需要強(qiáng)制設(shè)置為全雙工*/謝謝閱讀enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,MACON3,MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN|MACON3_FULDPX);//MACON3_HFRMLEN謝謝閱讀/*填入默認(rèn)值*/enc28j60Write(MAIPGL,0x12);精品文檔放心下載/*填入默認(rèn)值*/enc28j60Write(MAIPGH,0x0C);/*填入默認(rèn)值*/精品文檔放心下載enc28j60Write(MABBIPG,0x12);/*最大幀長(zhǎng)度*/精品文檔放心下載enc28j60Write(MAMXFLL,MAX_FRAMELEN&0xFF);謝謝閱讀enc28j60Write(MAMXFLH,MAX_FRAMELEN>>8);/*寫(xiě)入MAC地址*/精品文檔放心下載enc28j60Write(MAADR5,macaddr[0]);謝謝閱讀enc28j60Write(MAADR4,macaddr[1]);精品文檔放心下載enc28j60Write(MAADR3,macaddr[2]);感謝閱讀enc28j60Write(MAADR2,macaddr[3]);感謝閱讀enc28j60Write(MAADR1,macaddr[4]);謝謝閱讀enc28j60Write(MAADR0,macaddr[5]);感謝閱讀/*配置PHY為全雙工 LEDB為拉電流*/enc28j60PhyWrite(PHCON1,PHCON1_PDPXMD);/*半雙工回環(huán)禁止*/精品文檔放心下載enc28j60PhyWrite(PHCON2,PHCON2_HDLDIS);/*返回BANK0*/感謝閱讀enc28j60SetBank(ECON1);/*使能中斷全局中斷接收中斷接收錯(cuò)誤中斷*/enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,EIE,EIE_INTIE|EIE_PKTIE);/*接收使能位*/精品文檔放心下載enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON1,ECON1_RXEN);謝謝閱讀},.程序分析:(以此為例帶讀者學(xué)習(xí)一下如何看datasheet編寫(xiě)驅(qū)動(dòng)程序)感謝閱讀02 ENC28J60_CSH();是一個(gè)宏定義,#define ENC28J60_CSH() (GPIOB->ODR|=1<<12),精品文檔放心下載表示將PB12置為高電平,因?yàn)樵谟布泳€(xiàn)時(shí)PB12接ENC28J60的CS端(片選),高電平表示禁止使用此網(wǎng)卡。精品文檔放心下載04~14設(shè)置接收/發(fā)送緩沖區(qū),根據(jù)datasheet的地址查詢(xún),分離出高低地址。精品文檔放心下載分離低地址:(以起始指針為例)enc28j60Write(ERXSTL,RXSTART_INIT&0xFF);保留低8位即可;分離高地址:enc28j60Write(ERXSTH,RXSTART_INIT>>8);將地址右移8位,保留高八位即可。其中,ERXSTL與ERXSTH都是宏定義,如下:謝謝閱讀#defineERXSTL(0x08|0x00)#defineERXSTH(0x09|0x00)Datasheet中bank0的地址映射如下圖所示。因?yàn)槭莃ank0所以(0x08|0x00)。若是bank1,則(0x08|0x20)。謝謝閱讀15 enc28j60Write(ERXFCON,ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN);請(qǐng)?jiān)敿?xì)謝謝閱讀看一下過(guò)濾器ERXFCON,后面幾個(gè)都是它的數(shù)據(jù)位,都宏定義了,查看后可知ERXFCON被賦值為10110000。具體表示什么意義可以詳細(xì)查看datasheet。如下圖所示:(ERXFCON的地址謝謝閱讀映射位于bank1的0x18h。)#defineERXFCON(0x18|0x20)其他的就不逐條解釋了,都大同小異,看datasheet就可搞定一切。在完成網(wǎng)卡的驅(qū)動(dòng)程序時(shí),將網(wǎng)卡和mcu相連接的程序也要寫(xiě)好。因?yàn)橛布窃趺催B接的也會(huì)影響驅(qū)動(dòng)程序怎么寫(xiě)的對(duì)吧!但在此重申一下,自己動(dòng)手寫(xiě)這部分的驅(qū)動(dòng)文件還是挺費(fèi)事的,建議小伙伴們發(fā)揮自己信息搜索能力盡量下載或拷貝吧!這都是用的比較成熟的了,好了廢話(huà)不多說(shuō)了,接下來(lái)我感謝閱讀,.們?cè)摳陕锬??讓我們進(jìn)入第三步吧!Step3:誠(chéng)如移植要點(diǎn)三所述:網(wǎng)絡(luò)處理函數(shù)netconfig.c(與對(duì)應(yīng)的netconfig.h)。主要是初始化lwip協(xié)議棧、以及做一些系統(tǒng)時(shí)鐘中斷等處理。這一句將enc28j6與lwip連接起來(lái):謝謝閱讀netif_add(&enc28j60,&ipaddr,&netmask,&gw,NULL,ðernetif_init,ðernet_input);ethernetif_init,ethernet_input是lwip協(xié)議中neif與外設(shè)接口的函數(shù)。精品文檔放心下載這部分的函數(shù)比較固定,在此附上源碼:(節(jié)選)/****************************************************精品文檔放心下載函數(shù)名:LWIP_Init描述:初始化LWIP協(xié)議棧,主要是把enc28j60與LWIP連接起來(lái)。包括IP、MAC地址,接口函數(shù)謝謝閱讀輸入:無(wú)輸出:無(wú)****************************************************/感謝閱讀voidLwIP_Init(void){structip_addripaddr;structip_addrnetmask;structip_addrgw;謝謝閱讀/*InitializesthedynamicmemoryheapdefinedbyMEM_SIZE.*/感謝閱讀/*內(nèi)存堆的初始化函數(shù),主要是告知內(nèi)存堆的起止地址,以及初始化空閑列表,由lwip初始化時(shí)自己調(diào)用,該接口為內(nèi)部私有接口,不對(duì)用戶(hù)層開(kāi)放*/mem_init();/*初始化由MEM_SIZE定義的動(dòng)態(tài)內(nèi)存堆*/感謝閱讀/*內(nèi)存池的初始化,主要是為每種內(nèi)存池建立鏈表memp_tab,其鏈表是逆序的,此外,如果有統(tǒng)計(jì)功能使能的話(huà),也把記錄了各種內(nèi)存池的數(shù)目。*/memp_init();/*初始化由MEMP_NUM_x定義的內(nèi)存池.*/精品文檔放心下載lwip_init();IP4_ADDR(&ipaddr,192,168,1,18);感謝閱讀IP4_ADDR(&netmask,255,255,255,0);謝謝閱讀IP4_ADDR(&gw,192,168,1,1);感謝閱讀/*初始化enc28j60與LWIP的接口,參數(shù)為網(wǎng)絡(luò)接口結(jié)構(gòu)體、ip地址、子網(wǎng)掩碼、網(wǎng)關(guān)、網(wǎng)卡信息指針、初始化函數(shù)、輸入函數(shù)*/謝謝閱讀/*傳入兩個(gè)函數(shù)的指針,這樣的話(huà),函數(shù)才能訪(fǎng)問(wèn)得到這兩個(gè)函數(shù)呢*/謝謝閱讀netif_add(&enc28j60,&ipaddr,&netmask,&gw,NULL,ðernetif_init,ðernet_input);謝謝閱讀/*把enc28j60設(shè)置為默認(rèn)網(wǎng)卡.*/netif_set_default(&enc28j60);精品文檔放心下載netif_set_up(&enc28j60); //使能enc28j60接口精品文檔放心下載}/*****************************************************函數(shù)名:LwIP_Periodic_Handle精品文檔放心下載,.描述:lwip協(xié)議棧要求周期調(diào)用一些函數(shù),LwIP的周期性任務(wù)精品文檔放心下載tcp_tmr etharp_tmr dhcp_fine_tmrdhcp_coarse_tmr精品文檔放心下載輸入:無(wú)輸出:無(wú)****************************************************/感謝閱讀voidLwIP_Periodic_Handle(__IOuint32_tlocaltime)感謝閱讀{if(localtime-INPUT_Timer>=INPUT_TMR_INTERVAL)感謝閱讀{/*一旦網(wǎng)卡接收到數(shù)據(jù),應(yīng)調(diào)用ethernetif_input函數(shù)調(diào)用該函數(shù)讓數(shù)據(jù)進(jìn)入LwIP協(xié)議棧。*/ethernetif_input(&enc28j60);//輪詢(xún)是否接收到數(shù)據(jù)精品文檔放心下載}/*TCP定時(shí)處理every250ms*/精品文檔放心下載if(localtime-TCPTimer>=TCP_TMR_INTERVAL)謝謝閱讀{TCPTimer= localtime;tcp_tmr(); //每250ms調(diào)用一次}/*ARP定時(shí)處理every5s*/if(localtime-ARPTimer>=ARP_TMR_INTERVAL)精品文檔放心下載{ARPTimer= localtime;etharp_tmr(); //每5s調(diào)用一次}}Step4:在對(duì)以上程序進(jìn)行編譯及移植后,其中netif_add(&enc28j60,&ipaddr,&netmask,&gw,NULL,ðernetif_init,ðernet_input);是一條非常重要的語(yǔ)句。ethernetif_init,是網(wǎng)卡初始化函數(shù),其由lwip協(xié)議棧已經(jīng)完全編好,代碼如下:精品文檔放心下載err_tethernetif_init(structnetif*netif)感謝閱讀{structethernetif *ethernetif;感謝閱讀ethernetif=mem_malloc(sizeof(structethernetif));精品文檔放心下載if(ethernetif==NULL){LWIP_DEBUGF(NETIF_DEBUG,("ethernetif_init:outofmemory\n\r"));returnERR_MEM;精品文檔放心下載}netif->state=ethernetif;謝謝閱讀netif->name[0]=IFNAME0;netif->name[1]=IFNAME1;netif->output=etharp_output;感謝閱讀,.netif->linkoutput=low_level_output;感謝閱讀ethernetif->ethaddr=(structeth_addr*)&(netif->hwaddr[0]);感謝閱讀low_level_init(netif);returnERR_OK;}但以上程序不是最底層的,low_level_init、low_level_output才是底層的驅(qū)動(dòng)函數(shù),lwip只提供了一個(gè)模板,需要讀者自己去完善。謝謝閱讀/*-----------------------------------------------------------*/謝謝閱讀staticvoidlow_level_init(structnetif*netif)精品文檔放心下載{/*setMAChardwareaddresslength*/感謝閱讀netif->hwaddr_len=6;/*setMAChardwareaddress*/謝謝閱讀/*MAC地址*/netif->hwaddr[0]=macaddress[0];感謝閱讀netif->hwaddr[1]=macaddress[1];感謝閱讀netif->hwaddr[2]=macaddress[2];感謝閱讀netif->hwaddr[3]=macaddress[3];謝謝閱讀netif->hwaddr[4]=macaddress[4];精品文檔放心下載netif->hwaddr[5]=macaddress[5];精品文檔放心下載/*最大傳輸單元*/netif->mtu=netifMTU;netif->flags=NETIF_FLAG_BROADCAST|NETIF_FLAG
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度車(chē)展場(chǎng)地租賃與媒體合作合同3篇
- 2025年度農(nóng)產(chǎn)品出口質(zhì)量保障合同3篇
- 2025年度個(gè)人環(huán)保項(xiàng)目貸款合同(含環(huán)保指標(biāo)達(dá)標(biāo))4篇
- 二零二五年度承包工地食堂員工心理健康關(guān)愛(ài)合同3篇
- 汕尾2025年廣東汕尾陸河縣第一批城鎮(zhèn)公益性崗位招聘筆試歷年參考題庫(kù)附帶答案詳解
- 數(shù)字化時(shí)代的學(xué)生管理與德育工作變革
- 二零二五年度倉(cāng)儲(chǔ)設(shè)施租賃與運(yùn)輸服務(wù)合同3篇
- 普洱2024年云南普洱市科學(xué)技術(shù)局城鎮(zhèn)公益性崗位工作人員招聘筆試歷年參考題庫(kù)附帶答案詳解
- 昭通2025年云南昭通巧家縣人力資源和社會(huì)保障局零星選調(diào)工作人員筆試歷年參考題庫(kù)附帶答案詳解
- 社交媒體時(shí)代孩子的行為模式與心理變化
- JT-T-496-2018公路地下通信管道高密度聚乙烯硅芯塑料管
- 人員密集場(chǎng)所消防安全管理培訓(xùn)
- 《聚焦客戶(hù)創(chuàng)造價(jià)值》課件
- PTW-UNIDOS-E-放射劑量?jī)x中文說(shuō)明書(shū)
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹(shù)脂耐腐蝕立式貯罐
- 保險(xiǎn)學(xué)(第五版)課件全套 魏華林 第0-18章 緒論、風(fēng)險(xiǎn)與保險(xiǎn)- 保險(xiǎn)市場(chǎng)監(jiān)管、附章:社會(huì)保險(xiǎn)
- 典范英語(yǔ)2b課文電子書(shū)
- 員工信息登記表(標(biāo)準(zhǔn)版)
- 17~18世紀(jì)意大利歌劇探析
- 春節(jié)工地停工復(fù)工計(jì)劃安排( 共10篇)
- 何以中國(guó):公元前2000年的中原圖景
評(píng)論
0/150
提交評(píng)論