您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页基于LwIP的嵌入式以太网系统的设计与实现

基于LwIP的嵌入式以太网系统的设计与实现

来源:意榕旅游网
・自动化技术・ 基于LwIP的嵌入式以太网系统的设计与实现 胡龙腾 田雨 (电子科技大学自动化工程学院 四川成都 611 731) [摘要】针对uC/OS-II操作系统没有TCP/IP通信功能,本文给出一种将LwlPl ̄栈移植到 uC/OS—II的方法,使其具有TCP/IP通信功能,并通过测试,实际应用效果良好。 [关键词]uC/OS-II操作系统[中图分类号]TP316 TCP/IP LwIP协议 [文献标识码]A 【文章编号]l007—9416(2010)07-0044-01 1 I.wIP协议栈简介 务创建函数封装成此线程创建函数。还需 LwIP是瑞士计算机科学院的Adam 要注意的地方是创建时要为线程分配好优 Dunkels等开发的一套用于嵌入式系统的 先级。 开放源代码TCP/IP协议栈。I w/P既可移 (2)定时器函数sys—arch timeouts() 植到操作系统上。LwIP实现了较为完备的 LwIP的每个与外界网络连接的线程都 lP、ICMP、UDP、TCP协议,具有超时时间估 有自己的超时等待属性,并为每个线程都 计、快速恢复和重发、窗口调整等功能。还 分配一个sys—timeout数据结构,并把这个数 有一个重要的特点就是协议栈只需要几十 据结构存放在链表sys—timeouts中。如果一 K的RAM和40K左右的R0M就可以运行, 个线程对应的sys—timeout为空(NULL),说 这样我们就可以在一些低端的嵌入式系统 明该线程对连接做永久的等待。超时等待 中使用LwIP协议栈。 的数据结构包括指向链表下个sys—timeout 结构的指针、线程的超时时间长度,以及超 2 uC/OS-,操作系统简介 时后应调用的time0ut函数。 uC/OS-II是一个开源的占先式多任务 (3)进程间通信的函数 的实时操作系统 它的执行时间可确定,内 sys~sem t信号量:sys seIll—new(), 核可剪裁,可移植,可固化,代码量小,这对 sys—sere—free(),sys—serlf—signal(),sys 于嵌入式有限的资源是非常重要的。它支 archsem_wait()。因为uC/OS-II已经实现了 持x86、ARM、PowerPC、MIPS等众多体系 信号量OS—EVENT的各种操作,这些功能完 结构,其稳定性和可用性是经过实验验证 全可以用uC/OS-II里一些函数封装实现。 的,因此被广泛应用于各种嵌入式设备中。 sys~mbox t消息:sys—mbox—new(), sys—mb0Xfree(),sys—mboX—P0st(), 3 LwlP协议栈移植到uC/OS-, sys—arc~mboxfetch()。这些函数基本都能 操作系统的实现方法 在UC/oS—II中实现,但要注意mbOX需用 整个嵌入式系统主要由ARM微处理 UC/OS-II中消息队列实现。uC/OS-II没有 器、网卡芯片、网络设备驱动、1wiP、UC/ 对消息队列中的消息进行管理,因此不能 OS—II和应用程序组成。 直接使用,必须存uC/0S-II的基础上重新 LwIP在设计时就充分考虑了移植的问 实现。 题,因此把与操作系统、硬件、编译器相关 3.3编写与硬件的接口函数 的部分都放在源码的/src/arch目录下,所 主要编写ethernetif.c文件,实现底层的 以我们主要修改这目录里面的文件。 数据接收发送。数据包的发送可以采用中 3.1编写和CPU及编译器相关的头文件 断处理程序执行,每接收到一个数据包,向 这些头文件包括CC.h、cpu.h、perf.h tcpiPthread进程发送一消息。系统调度 等,在这里都定义了和使用的CPU以及编 tcpipthread进程对消息进行处理,并根据 译器相关的内容,如数据类型,存储模式的 数据包的类型转向相应的协议处理程序。 选择等。 本次使用的是RealVJew MDK编译器。 4 LwlP在uC/OS-.上应用测试 LPC2148是32位微处理器,int和long类型长 系统运行时,首先调用OSInit()初始化 度为32位,short类型长度为16位,char类型 操作系统的变量和结构,再调用TargetInit() 长度为8位,处理器内核为小端存储系统, 设置处理器外设时钟等,然后创建一个测 定义为 试任务1wip—test(),优先级设为2,再调用OS #d e f i n e B Y T E—O R D E R Start()启动系统,进入测试任务。 LITTLE—ENDIAN 测试任务中先进行调用1wip_init0函数对 3.2编写与操作系统相关的函数 sys,mem,memp,pbuf,Faw,tcpip进行初始化, 按协议栈要求,需要在操作系统中实 特别地,在对tcpip初始化过程中需要创建前 现以下函数: 面提到的tcpip—thread()进程,优先级设为4。 (1)线程创建函数sys—thread—new() Lwip初始化完成后,需要对1wip进行设 在uC/0S—II中没有线程概念,只有任 置,即调用1wip—set()函数,执行网卡初始 务,故可把uC/OS-II中的0STaskCreate0任 化,网络接口链表初始化(Fietif结构体链 44 数字技术与应用 表),这罩需要创建测试的最后一个进程 ethernetifinput(),优先级设为5,此进程负 责底层的数据接收与发送。 测试使用1wip自带的API函数,先调用 netconnnew()函数建立一个TCP连接,再 调用netconn—bind()绑定到80端口,接着调 用n et C 0 n n—l i St e n()进入监听调用 netconn accept()阻塞测试进程直到等到外 界的连接。如果连接成功,则可调用 netconn recv()和netconn—write()进行数据 收发工作。本次测试上位机使用TCP测试 工具软件,要求PC端的IP地址与下位机网 卡IP地址存同一网段。当PC端与下位机连 接成功时,上位机发送一组数组给下位机, 下位机收到数据后不做处理直接把数据发 回上位机,通过上位机检查发送和接收到 的数据是否一致来判断协议栈是否移植成 功。也可以在连接后,在PC命令提示符里输 入ping—t 192.168.1.25,可看到ICMP replyPl ̄l应,得出time=1ms,说明本次移植成 功,且效果良好。 5结语 本设计详细阐述了LwIP协议栈移植到 uC/0S-II操作系统的方法,提出较为方便 的测试方法,并且选用了成本较为低廉的 硬件平台,测试结果较为满意,达到预期效 果。本设计已成功应用于实验室传感器网 络项目。 【参考文献】 [1】LABROSSE JJ.嵌入式实时操作系 统uC/OS一1I[M].2版.邵贝贝,译.北京:北 京航空航天大学出版社,2005. 【2]李鸿强,苗长云.LwlP移植到UC/ OSII中的实现[J】.天津工业大学学报, 2006,25(4):38.40. [3]刘冬明,李正明,刘军良.电网远程 监控的实现[J】.电力自动化设备,2005,8. [4]刘健康,焦海波.嵌入式网络系统 设计:基于Atmel ARM7系列[M】.北京:北 京航空航天大学出版社,2008. 【作者简介】 胡龙腾(1985-),男,四JII安岳人,硕士研 究生,主要从事嵌入式网络系统研究。 田雨(1 9 80-),男,四川I成都人,讲师, 主要从事微波测量,无线传感器网络研究。 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务