lwIP(TCPIP)协议栈移植(不包括网卡驱动)

lwIP(TCPIP)协议栈移植(不包括网卡驱动)

ID:46682055

大小:67.00 KB

页数:13页

时间:2019-11-26

lwIP(TCPIP)协议栈移植(不包括网卡驱动)_第1页
lwIP(TCPIP)协议栈移植(不包括网卡驱动)_第2页
lwIP(TCPIP)协议栈移植(不包括网卡驱动)_第3页
lwIP(TCPIP)协议栈移植(不包括网卡驱动)_第4页
lwIP(TCPIP)协议栈移植(不包括网卡驱动)_第5页
资源描述:

《lwIP(TCPIP)协议栈移植(不包括网卡驱动)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、IwiP(TCIVIP)协议栈移植(不包括网卡驱动)—、IwIP概述IwIP是瑞士计算机科学院(SwedishInstituteofComputerScience)的AdamDunkels等开发的—發用丁•诙入式系统的开放源代码TCP/IP协议栈。Lwip既可以移植到操作系统上,乂可以在无操作系统的情况下独立运行.LwIP的特性如下:(1)支持多网络接口下的IP转发(2)支持ICMP协议⑶包括实验性扩展的的UDP(用户数据报协议)⑷包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议)⑸提供专门的内部回调接口(RawA

2、PI)用于提高应用程序性能(6)可选择的Berkeley接口API(多线程情况F)(7)在最新的版木中支持ppp⑻新版本中増加了的IPfragment的支持.(9)支持DHCP协议,动态分配ip地址.以上内容摘ft网络关于ucos.k的lwip移植二、移植介绍整个移植过程主要参考网络上关于移植剑ucos的说明和源码。1.目录及文件介绍原版的IwIPl.I.O包含两个目录src和doc移植后増加如下文件和目录[Arch]Lib.arch.c本系统没用,系统中没冇实现的C库函数可以写到这里Sys.arch.c移植的主要工作在这里,关于信

3、号量、消息队列、任务创建

4、RX40(X)

5、项目目录[Include]lArch]cc.h类型定义大小端设置PACK定义等init.h1ib.h跟Lib_arch.c对hV西数声明perf.h没用sys_arch.h跟Sys_arch.c对应的一些类型定义和宏定义[Netif]Dm9000a.hNe2kif.h[Netif]Drn_netif.c网卡驱动与系统关联的抽彖层Dm90(X)a.c网卡的硬件操作函数Ne2kif.c没用Unit!Lwip.c协议栈初始化和DHCP初始化Lwipopts.h协议栈相关参数设趕[Dns]Dns.c

6、增加域名解析函数gethostbyname(非口J連入廉

7、数)Dns.h1.移植和关函数介绍1)sys_init这个很简单,就是一些全局量的初始化2)sys_thread_newsys_arch_tinieouts相关的三个全局变最如下structsys_timeoutslwip_timeouts[LWIP_TASK_MAX];为每一个由sys_thread_new创建的任务分配一个存放信号量超时信息的列表structsys_timcoutsnull_timcouts;为一个超过任务上限数的任务和不是由SyS_thread_new创

8、建的任务取超时列表时返回使用。MMAC_RTOS_TASK」DLWIP_TASKS[LWIP_TASK_MAX];任务id存放顺序与lwip_timeouts相对应sys_lhread_new用来创建一个新的任务,保存任务ID。sys_arch_timeouts就是通过収得任务ID返冋任务对应的timeouts结构,从而可以添加、删除和判断超时的功能3)sys_sem_newsys_sem_freesys_sem_signalsys_arch_sem_waitsys_sem_new创建一个信号灯并初始化灯的数量返回sys_sem_t

9、类型的变量,定义是这样的typedefMMAC_RTOS_SEMAPHORE*sys_scm_t;由于返回失败要返回NULL值所以就定义了系统信号量的指针为抽彖信号量类型。因此在sys_sem_new和sys_sem_free分別要进行内存申请和释放的工作。sys_sem_signal释放一个灯,sys_arch_sem_wait等待信号,其中参数timeout是以ms为单位的,若wei零则表示永远等待一直到信号的來临。在这个信号系统中本人还存在一个疑问,具体在5”存在的问题”屮进行说明4)sys_mbox_newsys_mbox_

10、freesys_mbox_postsys_arch_mbox_fetch同上原因在类型的定义成指针的。那sys_mbox_new和sys_mbox_free同样要进行内存的申请和释放。在系统中消息队列发送和接收的都是指向数据的指针,因为在发送前所有的数据都已经存放在一个全局的用來管理内存的变量中。所以发送的内容就是四个字节。发送是还要判断发送msg是否为NULL。因为发送的是msg的指针,而不是内容还要取一下地址,NULL明显不能収址,所以有一个专门的staticint*msg_null=NULL(这里的=NULL并不重要可以使任何

11、值*也可以不要,因为要的是变量的地址在内存中的唯一性)用来发送“NULL”信息,使msg=&msg_null再发送。接收到后也要进行*msg==&msg_null的判断。接收时也要进行msgNULL的判断,若msg为NULL就需耍零时

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

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

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