文档介绍:1LwIP协议栈的学习与应用前言LWIP(Protoco1)是瑞士计算机科学院(puterScience)AdamDunkels等人开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LWIP的含义是LightWeight(轻型)IP协议。LWIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LWIPTCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用。一般它只需要几十KB的RAM和40KB左右的ROM就可以运行,这使LWIP协议栈适合在小型嵌入式系统中使用。LwIP的主要特性如下:(1)支持多网络接口下的IP转发;(2)支持ICMP协议;(3)包括实验性扩展的的UDP(用户数据报协议);(4)包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议);(5)提供专门的内部回调接口(RawAPI)用于提高应用程序性能;(6)可选择的Berkeley接口API(多线程情况下);(7)在最新的版本中支持ppp;(8)新版本中增加了的IPfragment的支持;(9)支持DHCP协议,动态分配ip地址。第一部分协议栈的移植第一章准备工作本文的硬件环境采用LPC2468作为主控MCU,LPC24xx是NXP半导体公司(由Philips公司创建)推出的基于ARM7TDMI-S内核的微控制器,它在片上集成了10Mbps/100Mbps以太网控制器。PHY芯片采用DM9161AEP。操作系统方面,我们选用的μC/。。第二章操作系统适配层为了使lwIP便于移植,与操作系统有关的功能函数调用和数据结构没有在代码中直接使用。而是当需要这样的函数时,操作系统适配层将加以使用。操作系统适配层向诸如定时器、处理同步、消息传送机制等的操作系统服务提供一套统一的接口。原则上,移植lwIP到其他操作系统时,仅仅需要实现适合该操作系统的操作系统模拟层。操作系统适配层提供了由TCP使用的定时器功能。操作系统适配层提供的定时器是一次性的定时器,当超时发生时,调用一个已注册函数至少要200ms的间隔。进程同步机制仅提供了信号量。即使在操作系统底层中信号量不可用,也可以通过其他信号原语像条件变量或互锁来模拟。信息传递的实现使用一种简单机制,用一种称为“邮箱”的抽象方法。邮箱做两种操作:邮寄和提取。邮寄操作不会阻塞进程;邮寄到邮箱的消息由操作系统模拟层排入队列直到另一个进程来提取它们。即使操作系统底层对邮箱机制不支持,也容易用信号量实现。信号量多用于任务间同步和互斥。邮箱用于大数据的传送。队列多用于处理有序的事件。做比较“粗俗”的比喻,信号量就是中央政府发给官人做一方大员的官印,有很多种官印但是不能一印多发,得到官印者才能掌权鱼肉一方百姓(任务得到信号量才能运行),否则你就只要等官跑官。邮箱,就好给比当差的下达的抄家、拆房、收监等红头文件,拿到啥样的文件就干啥。消息队列,就是给任务发了一连串的邮件,官员(任务)拿到这一大摞文件,可以从底部或者顶部(LIFOorFIFO)一个一个拆开处理。(注:,主要有以下几部分:信号量相关:sys_sem_tsys_sem_new(u8_tcount)创建一个新的信号量,并给信号量赋予初值count。voidsys_sem_signal(sys_sem_tsem)向指定的信号量发送信号。voidsys_sem_free(sys_sem_tsem)释放指定的信号量u32_tsys_arch_sem_wait(sys_sem_tsem,u32_ttimeout)邮箱(MailBox)相关:sys_mbox_tsys_mbox_new(intsize)函数建立一个空的邮箱,如果创建成功,则返回邮箱的地址,如果创建失败则返回为空。voidsys_mbox_free(sys_mbox_tmbox)函数voidsys_mbox_post(sys_mbox_tmbox,void*msg)函数err_tsys_mbox_trypost(sys_mbox_tmbox,void*msg)函数u32_tsys_arch_mbox_fetch(sys_mbox_tmbox,void**msg,u32_ttimeout)u32_tsys_arch_mbox_tryfetch(sys_mbox_tmbox,void**msg),第二章网卡驱动层3网卡的驱动层主要分为2个方面:MAC和PHY的初始化,数据的收发控制。下面先介绍MAC和PHY的初始化:以太网接口的自适应能力由DM9161AEP的自动协商功能体现出来。自动协商功能提供了一种在网络连接的两端之间交换配置信息的机制,在该机制下,这两端