lwIP1分析和总结分析和总结.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

lwIP(TCP/IP)协议栈移植(不包括网卡驱动)移植人员:侯光恩

一、lwIP概述

lwIP是瑞士计算机科学院(SwedishInstituteofComputerScience)的AdamDunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。Lwip既可以移植到操作系统上,又可以在无操作系统的情况下独立运行.

LwIP的特性如下:

支持多网络接口下的IP转发

支持ICMP协议

包括实验性扩展的的UDP(用户数据报协议)

包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议)

提供专门的内部回调接口(RawAPI)用于提高应用程序性能

可选择的Berkeley接口API(多线程情况下)

在最新的版本中支持ppp

新版本中增加了的IPfragment的支持.

支持DHCP协议,动态分配ip地址.以上内容摘自网络关于ucos上的lwip移植

二、移植介绍

整个移植过程主要参考网络上关于移植到ucos的说明和源码。

目录及文件介绍

原版的lwIP1.1.0包含两个目录src和doc

移植后增加如下文件和目录

[Arch]

Lib_arch.c本系统没用,系统中没有实现的C库函数可以写到这里Sys_arch.c移植的主要工作在这里,关于信号量、消息队列、任务创建[RX4000]项目目录

[Include]

和宏定义

[Arch]

cc.h类型定义大小端设置PACK定义等init.h

lib.h跟Lib_arch.c对应函数声明

perf.h没用

sys_arch.h跟Sys_arch.c对应的一些类型定义

[Netif]

[Netif]

Dm9000a.hNe2kif.h

[Init]

[Dns]

Dm_netif.c网卡驱动与系统关联的抽象层

Dm9000a.c网卡的硬件操作函数Ne2kif.c没用

Lwip.c协议栈初始化和DHCP初始化Lwipopts.h协议栈相关参数设置

Dns.c增加域名解析函数gethostbyname(非可重入函数)

Dns.h

移植相关函数介绍

sys_init

这个很简单,就是一些全局量的初始化

sys_thread_newsys_arch_timeouts

相关的三个全局变量如下

structsys_timeoutslwip_timeouts[LWIP_TASK_MAX];

为每一个由sys_thread_new创建的任务分配一个存放信号量超时信息的列表structsys_timeoutsnull_timeouts;

为一个超过任务上限数的任务和不是由sys_thread_new创建的任务取超时列表时返回使用。

MMAC_RTOS_TASK_IDLWIP_TASKS[LWIP_TASK_MAX];

任务id存放顺序与lwip_timeouts相对应

sys_thread_new用来创建一个新的任务,保存任务ID。sys_arch_timeouts

就是通过取得任务ID返回任务对应的timeouts结构,从而可以添加、删除和判断超时的功能

sys_sem_newsys_sem_freesys_sem_signalsys_arch_sem_wait

sys_sem_new创建一个信号灯并初始化灯的数量返回sys_sem_t类型的变量,定义是这样的typedefMMAC_RTOS_SEMAPHORE*sys_sem_t;由于返回失败要返回NULL值所以就定义了系统信号量的指针为抽象信号量类型。因此在sys_sem_new和sys_sem_free分别要进行内存申请和释放的工作。

sys_sem_signal释放一个灯,sys_arch_sem_wait等待信号,其中参数timeout

是以ms为单位的,若wei零则表示永远等待一直到信号的来临。

在这个信号系统中本人还存在一个疑问,具体在5”存在的问题”中进行说明

sys_mbox_newsys_mbox_freesys_mbox_postsys_arch_mbox_fetch

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

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档