TCPIP协议栈lwip的移植.docx

上传人:lao****ou 文档编号:260778 上传时间:2023-07-04 格式:DOCX 页数:31 大小:65.43KB
下载 相关 举报
TCPIP协议栈lwip的移植.docx_第1页
第1页 / 共31页
TCPIP协议栈lwip的移植.docx_第2页
第2页 / 共31页
TCPIP协议栈lwip的移植.docx_第3页
第3页 / 共31页
TCPIP协议栈lwip的移植.docx_第4页
第4页 / 共31页
TCPIP协议栈lwip的移植.docx_第5页
第5页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《TCPIP协议栈lwip的移植.docx》由会员分享,可在线阅读,更多相关《TCPIP协议栈lwip的移植.docx(31页珍藏版)》请在第一文库网上搜索。

1、TCP/IP合同栈IWiPB移植新建几种头文献1c1ude/1wiPopts.hInc1uderchcc.h1nc1udearchperf.h1cIude/arch/sys_arch.h除头文献外还需要添加一种C文献:sVs_arch.Co阐明在CIOC/sys_arch,txt中。修改netifEtheretif.co构造对齐的几种宏对于一种构造下载下来的1WIP的通用定义如下:PACK.STRUCT_BEGINstructicmp_echo_hdraPACK_STRUCT_FIE1D(u8_ttype);PACK_STRUCT_FIE1D(u8_tcode);PACK_STRUCT_FIE

2、1D(u16_tchksum);PACK.STRUCT_FIE1D(u16_tid);PACK_STRUCT_FIE1D(u16_tseqno);a)PACK_STRUCT.STRUCT;PACK_STRUCT_EN#definePACK_STRUCT_FIE1D(x)这个宏是为了字节序的转换,由于是用的小端,就不用转换了直接定义为#CIefinePACK_STRUCT_FIE1D(x)X#definePACK_STRUCT_STRUCTA#definePACK_STRUCT_BEGIN#definePACK_STRUCT_END以上三个宏都是为了做构造体对苏用:对于gcc的编译器在构造体后跟

3、个核心字就OkAStrUCtip_hdr);attribute(_packed)A因此可以定义为a#definePACK_STRUCT_STRUCT_attribUte_(packed)A#definePACK_STRUCT_BEGIN#definePACK_STRUCT_END对于VC的编译器就郁闷了,VC做构造体对齐是这样做0#pragmapack(1)构造体按照1字节对齐Astructip_hdr;#pragmapack()构造体按照编译器默认值对齐但是VCrJ编译器不容许将预解决做为宏,也就是不容许这种宏替代生涯!迦PACKSTRUeTBEGIN#pragmaPaCka)A因此想靠宏替

4、代来完毕字节对齐是不行了,于是就动了大工夫做了如下解决# ifdefWIN32A#definePACK_STRUCT_STRUCT#definePACK_STRUCT_BEGINa#definePACK_STRUCT_ENDA#e1seA#definePACK_STRUCT_STRUCT_attribute_(_packed)# definePACK_STRUeT_BEG1N# definePACK_STRUCT_ENDendifPACK_STRUCT_BEGIN# ifdefWIN32# pragmapack(1)#endifstructicmp_echo_hdraPACK_STRUCT_F

5、IE1D(u8_ttype);PACK_STRUCT_FIE1D(u8_tcode);PACK_STRUCT_FIE1D(u16_tchksum);APACK_STRUCT_FIE1D(u16_tid);PACK_STRUCT_FIE1D(u16_tseqno);APACK_STRUCT_STRUCT;A#ifdefWIN32# pragmapack()A#endifAPACK_STRUCT_END这样一改在VC下和GCC都可以了,但是每个构造上都要修改一下,这个是黑郁闷黑郁闷啊“轻量级”保护1ightweightsynchroiztionmechanismsSYS_ARCH_DEC1_PR0

6、TECT(x)-decIareaprotectionstatevariab1e.SYS_ARCH_PROTECT(x)-eterprotectionmode.SYS_ARCH_UNPROTECT(x)-1eaveprotectionmode.这三个宏定义一种迅速的“保护”和“解除保护”操作。例如进入保护可以是屏蔽中断或使用一种信号量或mutex。注意:进入保护后还容许再次进入保护,旧的保护标志通过Iev返回,退出保护时再恢复。如果没有定义这三个宏,Sys.h中有一段代码进行了判断。#ifndefSYS_ARCH_PR0TECT如果没有定义SYS_ARCH,PROTECT,那么可以在IWiPOP

7、ts.h中定义宏SYS_1IGHTWEIGHT_PROT,并在sys_arch.c中定义函数syS_arch_protect()和Sys_arch_unprotect(1ev)#ifSYS_1IGHTWEIGHT.PROT#defineSYS_ARCH_DEC1_PROTECT(Iev)sys_prot_t1ev*SYS_ARCH_PROTECT*Performa,faStprotect.Thiscou1dbeimp1ementedbydisab1inginterruptsforanembeddedsystemorbyusingasemaphoreor*mutex.Theimp1ementat

8、ionshou1da11owca11ingSYS_ARCH_PROTECTwhen*a1readyprotected.Theo1dprotection1eve1isreturnedinthevariab1e* 1ev.Thismacrowi11defau1ttocaI1ingthesys_arch_protect()function* whichshou1dbeimp1ementedinsys_arch.c.Ifaparticu1arportneedsa* differentimp1ementation,thenthismacromaybedefinedinsys_arch.h*/#defin

9、eSYS_ARCH_PROTECT(Iev)1ev=sys_arch_protect()*SYS_ARCH_UNPROTECT* PerformafastsetoftheprotectionIeve1to,1evn.Thiscou1dbe* imp1ementedbysettingtheinterrupt1eve1to1evwithintheMACROorby* usingasemaphoreormutex.Thismacrowi11defau1ttoca11ingthe* sys_arch_unprotect()functionwhichshou1dbeimp1ementedin* sys_

10、arch.c.Ifaparticu1arportneedsadifferentimp1ementation,then* thismacromaybedefinedinsys_arch.h*/# defineSYS_ARCH_UNPROTECT(1ev)sys_arch_unprotect(1ev)sys_prot_tsys_arch_protect(void);voidsys_arch_unprotect(sys_prot_tpva1);# e1se# defineSYS_ARCH_DEC1_PROTECT(1ev)# defineSYS_ARCH_PROTECT(1ev)# defineSY

11、S_ARCH_UNPROTECT(1ev)# endif*SYSJ11GHTWEIGHT_PROT*/# endif/*SYSARCHPROTECT*/1WIPCOMPATMUTEX定义此宏表达用信号量来替代mteo1nit.c不定义NO_SYS禾口wdefineNO_SYS0”的效果是同样取下面这些宏对代码有影响:1WIP_SOCKET1WIP_ARP1WIP_UDP1WIP.TCP1WIP_SNMP1WIP_AUTOIP1WIP_IGMP1WIP_DNS1WIPJIMERSvoidIwip_init(void)(*Sanitycheckuserconfigurab1eVaIUeS*/Iwi

12、p_sanity_check();/*Modu1esinitia1ization*/stats_init();#if!NO_SYSsys_init();#endif/*!NO_SYS*/mem_init();memp_init();Pbuf_init();netiUnit();#if1WIP_SOCKETIwip_socket_init();#endif/*1WIP_SOCKET*/iPJnit();#if1WIP_ARPetharp_init();#endif/*1WIP_ARP*/#if1WIP_RAWraw_init();#endif*1W1P_RAW*/#if1WIP_UDPudp_i

13、nit();#endif/*1WIP_UDP*/#if1WIP.TCPtcp_init();#endif*1W1P_TCP*/#if1WIP_SNMPsnmp_init();#endif*1WIP_SNMP*/# if1WIP_AUTOIPautoip_init();# endif*1WIP_AUTOIP*/#if1WIP_IGMPigmp_init();# endif/*1WIP_IGMP*/#if1WIP_DNSdns_init();ttendif*1WIP_DNS*/#if1WIP_TIMERSsys_timeouts_init();#endif*1WIP.TIMERS*/net1dd函

14、数它添加一种网络接口到Iwip,一种网卡应当是一种网络接口。本地回环也是一种网络接口,它已经在tcpipjit中的IwiPnit调用netifJnit被添加。/* Addanetworkinterfacetothe1istofIwIPnetifs.* paramnetifapre-a11ocatednetifStructure* ParamipaddrIPaddressforthenewnetif*paramnetmasknetworkmaskforthenewnetif* Paramgwdefau1tgatewayIPaddressforthenewnetif* Paramstateopaq

15、uedatapassedtothenewnetif* Paraminitca11backfunctionthatinitia1izestheinterface* paraminputca1!backfunctionthatisca11edtopass* ingresspacketsupintheprotoco11ayerstack.* returnnetif,orNU11iffai1ed.* /structnetif*netiCadd(structnetif*netif,ip_addr_t*ipaddr,ipaddrt*netmask,ip_addr_t*gw,void*state,netifinit_fninit,netif,inputfninput)StructnetJf在初始化用neti1dd添加到IWiP中。/*IPaddressconfigurationinnetw

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服