TCPIP协议栈lwip的移植_第1页
TCPIP协议栈lwip的移植_第2页
TCPIP协议栈lwip的移植_第3页
TCPIP协议栈lwip的移植_第4页
TCPIP协议栈lwip的移植_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TCP/IP协议栈lwip的移植新建几个头文件Include/lwipopts.hInclude/arch/cc.h包括/拱/性能hInclude/arch/sys_arch.h除头文件外还需要添加一个C文件:sys_arch.c .说明在doc/sys_arch.txt中。修改netif/Ethernetif.c .结构对齐的几个宏对于一个结构下载下来的LWIP的通用定义如下:PACK_STRUCT_BEGINstruct icmp_echo_hdr PACK_STRUCT_FIELD(u8_t类型);PACK_STRUCT_FIELD(u8_t代码);PACK _ STRUCT _ FIELD(u16 _ t chk总和);PACK _ STRUCT _ FIELD(u16 _ t id);PACK _ STRUCT _ FIELD(u16 _ t序号); PACK _ STRUCT _ STRUCTPACK_STRUCT_EN#定义PACK_STRUCT_FIELD(x)这个宏是为了字节序的转换,由于是用的小端,就不用转换了直接定义为#定义PACK_STRUCT_FIELD(x)x#定义PACK_STRUCT_STRUCT#定义PACK_STRUCT_BEGIN#定义PACK_STRUCT_END以上三个宏都是为了做结构体对齐用:对于gcc的编译器在结构体后跟个关键字就好的结构ip_hdr ;_属性_ _(_ _打包_ _)因此可以定义为# define PACK _ STRUCT _ STRUCT _ _ attribute _ _(_ _ PACKED _ _)#定义PACK_STRUCT_BEGIN#定义PACK_STRUCT_END对于风险投资的编译器就郁闷了,vc做结构体对齐是这样做的#pragma包(1) /结构体按照1字节对齐结构ip_hdr ;#pragma pack()/结构体按照编译器默认值对齐但是风险投资的编译器不允许将预处理做为宏,也就是不允许这种宏替代# define PACK _ STRUCT _ BEGIN # pragma PACK(1)所以想靠宏替换来完成字节对齐是不行了,于是就动了大工夫做了如下处理#ifdef WIN32#定义PACK_STRUCT_STRUCT#定义PACK_STRUCT_BEGIN#定义PACK_STRUCT_END#其他# define PACK _ STRUCT _ STRUCT _ _ attribute _ _(_ _ PACKED _ _)#定义PACK_STRUCT_BEGIN#定义PACK_STRUCT_ENDendifPACK_STRUCT_BEGIN#ifdef WIN32#pragma包(1)#endifstruct icmp_echo_hdr PACK_STRUCT_FIELD(u8_t类型);PACK_STRUCT_FIELD(u8_t代码);PACK _ STRUCT _ FIELD(u16 _ t chk总和);PACK _ STRUCT _ FIELD(u16 _ t id);PACK _ STRUCT _ FIELD(u16 _ t序号); PACK _ STRUCT _ STRUCT#ifdef WIN32#pragma包()#endifPACK_STRUCT_END这样一改在风险投资下和海湾合作委员会都可以了,不过每个结构上都要修改一下,这个是黑郁闷黑郁闷啊轻量级保护轻量级同步机制-DECL保护系统(x)声明保护状态变量。SYS_ARCH_PROTECT(x) -企业保护模式。退出保护模式。这三个宏定义一个快速的保护和解除保护操作。例如进入保护可以是屏蔽中断或使用一个信号量或互斥体。注意:进入保护后还允许再次进入保护,旧的保护标志通过lev返回,退出保护时再恢复。如果没有定义这三个宏,系统中有一段代码进行了判断。#ifndef SYS_ARCH_PROTECT如果没有定义系统保护,那么可以在lwipopts.h中定义宏PROT轻量级系统公司,并在sys_arch.c中定义函数sys_arch_protect()和sys_arch_unprotect(杠杆)#如果系统_轻量级_PROT#定义系统_拱门_ ARCH _保护(杠杆)系统_保护_t杠杆/* SYS_ARCH_PROTECT*执行快速保护。这可以通过以下方式实现*禁用嵌入式系统中断或使用信号量或*互斥。实现应该允许在以下情况下调用系统保护*已经受到保护。变量中返回旧的保护级别*“杠杆”.该宏将默认调用sys_arch_protect()函数*如果特定端口需要一个*不同的实现,那么这个宏可以在sys_arch.h中定义*/#定义系统保护(杠杆)杠杆=sys_arch_protect()/* SYS_ARCH_UNPROTECT*将保护级别快速设置为级别 .这可能是*通过在巨中将中断级别设置为 lev 来实现,或者通过*使用信号量或互斥量。该宏将默认调用* sys_arch_unprotect()函数,应该在如果特定端口需要不同的实现,那么*该宏可以在sys_arch.h中定义*/#定义SYS_ARCH_UNPROTECT(杠杆)sys_arch_unprotect(杠杆)sys_prot_t sys_arch_protect(无效);void sys _ arch _ unprotect(sys _ prot _ t pval);#其他#定义系统_拱门_ ARCH _保护(杠杆)#定义系统保护(杠杆)#定义SYS_ARCH_UNPROTECT(杠杆)# endif/* SYS _轻量级_PROT */#endif /* SYS_ARCH_PROTECT */LWIP_COMPAT_MUTEX定义此宏表示用信号量来代替互斥体。Init.c不定义无系统和 #定义无_系统0 的效果是一样的。下面这些宏对代码有影响:LWIP_SOCKETLWIP_ARPLWIP_RAWLWIP联合民主党LWIP_TCPLWIP_SNMPLWIP _奥地利IGMPLWIPLWIP域名系统LWIP _定时器空的lwip_init(void)/*健全性检查用户可配置值*/lwip _健全性_检查();/*模块初始化*/stats _ init();#如果!无系统sys _ init();#endif /*!否_系统*/mem _ init();memp _ init();pbuf _ init();netif _ init();#如果LWIP_SOCKETlwip _ socket _ init();# endif/* LWIP套接字*/初始知识产权();#如果LWIP_ARPethep _ init();#endif /* LWIP_ARP */#如果LWIP _劳raw _ init();# endif/* LWIP原始*/#如果LWIP _联合民主党UDP _初始化();#endif /* LWIP_UDP */#如果LWIP_TCP初始化();#endif /* LWIP_TCP */#如果LWIP_SNMPSNMP _ init();#endif /* LWIP_SNMP */#如果LWIP _奥地利autoip _ init();# endif/* LWIP _ AUTIP */#如果IGMPLWIPigmp _ init();#endif /* LWIP_IGMP */#如果LWIP域名系统域名系统初始化();#endif /* LWIP域名系统*/#如果LWIP _定时器sys _ time out _ init();# endif/* LWIP定时器*/netif_add函数它添加一个网络接口到lwip,一个网卡应该是一个网络接口。本地回环也是一个网络接口,它已经在tcpip_init中的lwip_init调用netif_init被添加。/*将网络接口添加到lwIP网络列表中。* param netif预分配的netif结构* 新网络的参数知识产权地址* 新netif的参数网络掩码网络掩码* 参数新网络的默认网关知识产权地址* param状态不透明数据传递给新的netif* param init初始化接口的回调函数* 被调用以传递的参数输入回调函数*进入协议栈的数据包。* 返回netif,如果失败则返回空.*/struct netif *netif_add(struct netif *netif,ip_addr_t *ipaddr,ip_addr_t *netmask,ip_addr_t *gw,void *state,netif_init_fn init,netif_input_fn input)结构网络_if在初始化用netif_add添加到lwip中。/*用于所有lwIP网络接口的通用数据结构。*初始化时应填写以下字段*设备驱动程序: hwaddr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论