TCPIP协议栈lwip的移植.doc

TCPIP协议栈lwip的移植.doc

ID:55955639

大小:103.50 KB

页数:27页

时间:2020-06-18

TCPIP协议栈lwip的移植.doc_第1页
TCPIP协议栈lwip的移植.doc_第2页
TCPIP协议栈lwip的移植.doc_第3页
TCPIP协议栈lwip的移植.doc_第4页
TCPIP协议栈lwip的移植.doc_第5页
资源描述:

《TCPIP协议栈lwip的移植.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、TCP/IP协议栈lwip的移植新建几个头文件Include/lwipopts.hInclude/arch/cc.hInclude/arch/perf.hInclude/arch/sys_arch.h 除头文件外还需要添加一个C文件:sys_arch.c。说明在doc/sys_arch.txt中。 修改netif/Ethernetif.c。结构对齐的几个宏对于一个结构下载下来的LWIP的通用定义如下:PACK_STRUCT_BEGINstructicmp_echo_hdr{  PACK_STRUCT_FIELD(u8_ttyp

2、e); PACK_STRUCT_FIELD(u8_tcode); PACK_STRUCT_FIELD(u16_tchksum); PACK_STRUCT_FIELD(u16_tid); PACK_STRUCT_FIELD(u16_tseqno);} PACK_STRUCT_STRUCT;PACK_STRUCT_EN#definePACK_STRUCT_FIELD(x)   这个宏是为了字节序的转换,由于是用的小端,就不用转换了直接定义为#definePACK_STRUCT_FIELD(x)   x#definePACK_STR

3、UCT_STRUCT#definePACK_STRUCT_BEGIN#definePACK_STRUCT_END以上三个宏都是为了做结构体对齐用:对于gcc的编译器在结构体后跟个关键字就okstructip_hdr{};__attribute__((__packed__))因此可以定义为#definePACK_STRUCT_STRUCT__attribute__((__packed__))#definePACK_STRUCT_BEGIN#definePACK_STRUCT_END对于vc的编译器就郁闷了,vc做结构体对齐是这样

4、做的#pragmapack(1)     //结构体按照1字节对齐structip_hdr{};#pragmapack()      //结构体按照编译器默认值对齐但是VC的编译器不允许将预处理做为宏,也就是不允许这种宏替代#definePACK_STRUCT_BEGIN#pragmapack(1) 所以想靠宏替换来完成字节对齐是不行了,于是就动了大工夫做了如下处理#ifdefWIN32#definePACK_STRUCT_STRUCT#definePACK_STRUCT_BEGIN#definePACK_STRUCT_END

5、#else#definePACK_STRUCT_STRUCT__attribute__((__packed__))#definePACK_STRUCT_BEGIN#definePACK_STRUCT_ENDendifPACK_STRUCT_BEGIN#ifdefWIN32#pragmapack(1)#endifstructicmp_echo_hdr{  PACK_STRUCT_FIELD(u8_ttype); PACK_STRUCT_FIELD(u8_tcode); PACK_STRUCT_FIELD(u16_tchksum)

6、; PACK_STRUCT_FIELD(u16_tid); PACK_STRUCT_FIELD(u16_tseqno);} PACK_STRUCT_STRUCT;#ifdefWIN32#pragmapack()#endifPACK_STRUCT_END这样一改在VC下和GCC都可以了,不过每个结构上都要修改一下,这个是黑郁闷黑郁闷啊  “轻量级”保护 "lightweight"synchronizationmechanisms-   SYS_ARCH_DECL_PROTECT(x)-declareaprotectionstat

7、evariable.   SYS_ARCH_PROTECT(x)     -enterprotectionmode.   SYS_ARCH_UNPROTECT(x)   -leaveprotectionmode. 这三个宏定义一个快速的“保护”和“解除保护”操作。例如进入保护可以是屏蔽中断或使用一个信号量或mutex。注意:进入保护后还允许再次进入保护,旧的保护标志通过lev返回,退出保护时再恢复。 如果没有定义这三个宏,Sys.h中有一段代码进行了判断。#ifndefSYS_ARCH_PROTECT 如果没有定义SYS_AR

8、CH_PROTECT,那么可以在lwipopts.h中定义宏SYS_LIGHTWEIGHT_PROT,并在sys_arch.c中定义函数sys_arch_protect()和sys_arch_unprotect(lev)#ifSYS_LIGHTWEIGHT_PROT #def

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。