最新lwip范文模板 17页.docx
- 文档编号:25933789
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:17
- 大小:24.01KB
最新lwip范文模板 17页.docx
《最新lwip范文模板 17页.docx》由会员分享,可在线阅读,更多相关《最新lwip范文模板 17页.docx(17页珍藏版)》请在冰豆网上搜索。
最新lwip范文模板17页
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
==本文为word格式,下载后可方便编辑和修改!
==
lwip
篇一:
LwIP协议栈开发嵌入式网络的三种方法分析
LwIP协议栈开发嵌入式网络的三种方法分析
摘要轻量级的TCP/IP协议栈LwIP,提供了三种应用程序设计方法,且很容易被移植到多任务的操作系统中。
本文结合μC/OS-II这一实时操作系统,以建立TCP服务器端通信为例,分析三种方法以及之间的关系,着重介绍基于rawAPI的应用程序设计。
最后在ST公司STM32F107微处理器平台上验证,并给出了测试结果。
关键词LwIP协议栈;μC/OS-II;嵌入式网络;STM32F107;
随着嵌入式系统功能的多样化以及网络在各个领域的中的广泛应用,具备网络功能的嵌入式设备拥有更高的使用价值和更强的通用性。
然而大部分嵌入式设备使用经济型处理器,受内存和速度限制,资源有限,不需要也不可能完整实现所有的TCP/IP协议,有时只需要满足实际需求就行。
LwIP是由瑞典计算机科学研究院开发的轻量型TCP/IP协议栈,其特点是保持了以太网的基本功能,通过优化减少了对存储资源的占用。
LwIP是免费、开源的,任何人可以使用,能够在裸机的环境下运行,当然设计的时候也考虑了将来的移植问题,可以很容易移植到多任务操作系统中。
本文介绍了以ARM微处理器STM32F107和PHY接口DP83848为平台,构建的嵌入式系统中,采用LwIP和嵌入式操作系统μC/OS-II,使用协议栈提供的三种应用程序接口,实现嵌入式设备的网络通信功能。
1LwIP和μC/OS-II介绍
1.1LwIP协议栈
LwIP协议是瑞士计算机科学院的AdamDunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。
LwIP含义是lightweight(轻型)IP协议,在实现时保持了TCP协议的主要功能基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈很适合在低端嵌入式系统中使用。
LwIP协议栈的设计才用分层结构的思想,每一个协议都作为一个模块来实现,提供一些与其它协议的接口函数。
所有的TCP/IP协议栈都在一个进程当中,这样TCP/IP协议栈就和操作系统内核分开了。
而应用程序既可以是单独的进程也可以驻留在TCP/IP进程中,它们之间利用ICP机制进行通讯。
如果应用程序是单独的线程可以通过操作系统的邮箱、消息队列等,与协议栈进程通讯。
如果应用程序驻留在协议栈进程中,则应用程序可以通过内部回调函数和协议栈进程通讯。
1.2μC/OS-II实时操作系统
μC/OS-II是一个源码公开、可移植、可固化、可裁剪及占先式的实时多任务操作系统,是专门为嵌入式应用设计的实时操作系统内核,已广泛的应用在各种嵌入式系统中。
μC/OS-II是多任务系统,内核负责管理各个任务,每个任务都有其优先级,μC/OS-II最多可以管理64个任务,其每个任务都拥有自己独立的堆栈。
μC/OS-II提供了非常丰富的系统服务功能,比如信号量、消息邮箱、消息队列、事件标志、内存管理和时间管理等,这些功能可以帮助用户实现非常复杂的应用。
1.3LwIP协议栈移植到μC/OS-II
LwIP协议栈在设计的时候就考虑到了将来的移植问题,因此把所有与硬件、操作系统、编译器有关的部分都全部独立起来,形成了一个操作系统模拟层。
操作系统模拟层用进程间的信号量、邮箱机制处理通信问题,而μC/OS-II是一个基于任务调度的嵌入式实时操作系
统,因此移植LwIP协议栈到μC/OS-II,是很容易实现的。
2LwIP开发嵌入式网络应用程序
LwIP提供了三种应用程序接口:
(1)低水平的,基于内核/回调函数的API(后面称RAWAPI)
(2)高水平的,连续的API(后面称LwIPAPI)(3)BSD风格的套接字API(后面称BSDsocket)
可以在协议栈中通过对宏定义的不同配置,来决定使用哪种方式。
其中BSDsocket方式不是很成熟,RAWAPI需要编写回调函数,协议栈推荐使用LwIPAPI这种方式,但是三种方式到了底层都是通过回调函数实现的。
本文直接从RAWAPI入手,以建立TCP服务器端通信为例,详述底层的调用,然后再讲述后面的两种是如何封装而成的。
2.1基于RAWAPI的应用程序设计步骤
使用RAWAPI进行TCP/IP编程,可以使应用程序的代码和协议栈的代码很好地结合起来。
程序的执行机制是以回调函数为基础的事件驱动的,同时回调函数也是被TCP/IP代码直接调用的,回调函数、数据发送函数都需要自己编写。
这种方式是唯一的一种支持设备裸机运行,又可以完成网络通信完成系统功能。
裸机运行实际相当于是一个线程,而协议栈代码和应用程序代码通过先后次序处理,完成数据流转。
图1是使用RAWAPI方式,多任务系统实现TCP服务器端通信的步骤。
图1RAWAPI方式应用程序设计
LwIP协议栈中的tcp块结构有两种TCP_PCB和TCP_PCB_LISTEN,前者在内存池中的默认个数是5,后者是8,其中listen型的结构占用少量的内存,专门用于处理在侦听状态的tcp块结构。
tcp_listen函数中,释放tcp_new创建的块结构,而是返回一个listen型的tcp块结构。
客户端连接,到达TCP层,在tcp_listen_input函数中,重新创建一个TCP_PCB块结构,专门用于和客户端通信。
侦听到客户端连接,完成三次握手后,回调自己编写的接收函数,然后将全局的指针指向与客户端通信的块结构,在数据发送时,
使用这个指针,就是在用这个块结构与客户端通信。
由上面看出,这种方式最大的特点是减少了任务之间的切换,只要数据来到协议栈线程,通过回调的方式就可以完成数据的处理。
2.2基于LwIPAPI的应用程序设计
LwIPAPI方式的编程,是基于上面的RAWAPI的,封装了一个netconn的结构,所有操作不在针对TCP块结构,而变成了netconn型的结构变量。
操作都需要协议栈去处理,应用程序与协议栈通信,通过发送消息方式进行,因此这种方式会造成频繁的任务切换,速度相比RAWAPI慢了许多,使用步骤如图2所示。
图2LwIPAPI方式应用程序设计
2.3基于BSDsocket的应用程序设计
BSDsocket相当于对LwIPAPI做了一层封装,而netconn结构有一个变量是socket,这样两者很容易结合起来。
Socket方式很容易被理解,编写应用程序也较为容易,但是效率低,消耗的资源更多,使用步骤如图3所示。
图3BSDsocket方式应用程序设计
3实际应用与验证
本次验证中使用的开发板,微处理器采用ST公司推出的STM32F107,以太网PHY芯片采用DP83848.STM32F107是一款基于ARMCortex-M3内核的32位处理器,是面向网络互连型应用的,最大工作频率为72MHz,内置了MAC控制器,可以方便地与以太网PHY芯片连接,构成以太网接口。
以太网PHY芯片DP83848采用RMII模式与STM32F107连接。
RMII模式可以减少接口之间的引脚连接,降低了绘制电路板的复杂性,同时空闲的引脚可用作其它用途,以太网接口如图4所示。
图4STM32F107MAC与DP83848连接图
在开发板上,移植好LwIP协议栈和μC/OS-II操作系统,应用程序中创建一个Web服务器,绑定本地IP地址192.168.1.241、端口80。
在自己编写的数据接收函数中,利用两个字符型数据分别保存HTTP1.0响应消息的相关信息和要在客户端网页中显示的信息。
侦听到客户端连接后,判断接收到数据的前5个字节,解析HTTP报头,如果请求方不是GET请求就中断连接,否则将那两个字符型数据的内容一次传送给客户端。
在客户端PC机浏览器的地址栏中输入http:
//192.168.1.241/后,PC的显示结果如图5所示。
图5开发板web服务器验证图
篇二:
uCOS平台下的LwIP移植(非常详细)
uC/OS-IILwIP
1下载LwIP.................................................................................................................................................................
2
2建立一个最基本的工程.........................................................................................................................................2
3把LwIP加入工程.....................................................................................................................................................2
4编写操作系统模拟层相关代码.............................................................................................................................3
4.1操作系统模拟层移植说明――中文翻译.................................................................................................3
4.2编写操作系统模拟层.................................................................................................................................6
4.2.1准备工作――建立文件、定义数据类型及其它.........................................................................6
4.2.2信号量操作函数.............................................................................................................................8
4.2.3邮箱操作函数...............................................................................................................................13
4.2.4实现sys_thread_new()函数.......................................................................................................20
4.2.5实现sys_arch_timeouts()函数.................................................................................................22
4.2.6实现临界保护函数.......................................................................................................................25
4.2.7扫尾――结束操作系统模拟层的编写.......................................................................................26
5LwIP接口――初始设置及网络驱动...................................................................................................................28
5.1准备工作――建立LwIP入口函数文件...................................................................................................28
5.2ilvInitLwIP().....................................................................................................................................29
5.3ilvSetLwIP().......................................................................................................................................30
5.4ethernetif_init()――初始化底层界面.............................................................................................35
5.4.1ethernetif_init()函数分析.....................................................................................................35
5.4.2low_level_output()――链路层发送函数...............................................................................36
5.4.3low_level_init()――网卡初始化函数...................................................................................38
5.4.4EMACInit()――网卡初始化工作的实际完成者.......................................................................40
5.4.5ethernetif_input()――实现接收线程...................................................................................47
5.4.6low_level_input()――得到一整帧数据.................................................................................49
5.4.7GetInputPacketLen()――获得帧长.........................................................................................50
5.4.8EMACReadPacket()――复制,从接收缓冲区到pbuf...............................................................53
5.4.9EMACSendPacket()――发送一帧资料.......................................................................................55
5.4.10编译――ethernetif.c及lib_emac.c......................................................................................56
6ping――结束LwIP的移植...................................................................................................................................57
6.1编译、链接整个工程...............................................................................................................................57
6.2ping测试...................................................................................................................................................59
后记...............................................................................................................................................................................62
本文将指导读者一步步完成LwIP在ADS1.2开发环境下的移植工作,包括底层驱动的编写。
本文使用的硬件平台是AT91SAM7X256+RTL8201BL(PHY),至于软件平台,读者从本文标题即可看出。
我们使用uC/OS-II作为底层操作系统,而LwIP的移植亦将主要围绕uC/OS-II展开。
好了,不再多说,开始吧?
?
uC/OS-IILwIP
1下载LwIP
很简单,到LwIP的官方网站即可:
http:
//savannah.nongnu.org/projects/lwip/。
如果你不想看看其它内容(可能对你会很重要),就只是想得到源码,好的,直接到这个地址下载:
http:
//download.savannah.nongnu.org/releases/lwip/。
目前官方发布的最新版本是
1.1.1,找到lwip-1.1.1.zip,然后下载、解压缩,第一项工作完成。
2建立一个最基本的工程
要想完成移植工作,我们必须要有一个包含uC/OS-II的工程才行,这一步我们就是要建立这个工程。
工程建立完毕后,编译链接没有问题,那么,第二项工作也完成了。
关于如何建立一个包含uC/OS-II的
ADS工程的问题,不在本文描述范围之内,这里不做讲述。
随本笔记一同发布的源码文档中LwIPPortingTest_2档夹下包含了这个最基本工程的源码,读者可以直接使用。
我的基本工程建立的路径是D:
\work\LwIPPortingTest,下文将以相对路径进行讲述,不再提供绝对路径。
3把LwIP加入工程
首先,在\src\活页夹下,建立LwIP活页夹,即:
\src\LwIP;然后将下载的LwIP源码文件中api、
core、include、netif文件复制到\src\LwIP\活页夹下,如下图所示:
图3.1
然后,用ADS打开工程文件,按照LwIP源码文件的实际存放路径建立LwIP的工程结构,如下图所示:
uC/OS-II平台下的LwIP移植笔记――作者:
焦海波201X-9-1
图3.2
这里需要特别说明的是,源码中的IPV6、SLIP及PPP部分我们没有添加进来,主要是考虑我及大多数读者的网络还是V4,而SLIP、PPP暂时不在我的考虑范围之内。
另外,在移植层面V6也和V4相差不多,这里就不再讲解这部分内容了。
现在基础工程结构建立完毕,可以把LwIP源码添加进来了。
这一步很容易,按照文件存放路径,将源码文件添加到相应的工程结构下即可。
源码添加完成后的工程参见所附源码档的LwIPPortingTest_3活页夹。
4编写操作系统模拟层相关代码
LwIP的作者为操作系统模拟层提供了较为详细的说明,文件名为sys_arch.txt,在LwIP的doc文件夹下。
我们的编写工作根据这个说明进行。
4.1操作系统模拟层移植说明――中文翻译
事先声明,之所以笔者要翻译该文档,主要是笔者在撰写这篇笔记时亦没有通读该文档。
笔者先前使用的模拟层源码是杨晔大侠的。
为了真正弄懂LwIP,笔者决定自己重新实现LwIP的移植,本笔记是跟随移植同步进行的,因此,翻译的文档也放在了这篇笔记中,使读者能够真正了解笔者的移植历程。
另外再说一句,这个文档是为LwIP0.6++版编写,笔者搜遍了整个LwIP官方网站,没有发现比这更新的,笔者只好认为操作系统模拟层在0.6++之后没有任何改动,如果有谁发现了更新的,一定通知笔者,先谢谢了。
好的,言归正传,下面就是译文:
篇三:
LWIP用户手册
DevelopingApplicationsusinglwIPTCP/IPstackonADI-BF533,andADI-BF537processors
Tableofcontents
1.Introduction.................................................................................................................2
2.DevelopinganetworkapplicationwithlwIPandVDK.............................................3
2.1.UsethesocketAPIheaderfile............................................................................4
2.2.Ensuringthatsemaphorescanbecreated...........................................................4
2.3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新lwip范文模板 17页 最新 lwip 范文 模板 17
![提示](https://static.bdocx.com/images/bang_tan.gif)