1、。yi 357t92h ;g纠硕士学位论文(2006届)嵌入式TCPIP技术研究与应用The Research and Application of EmbeddedTCPIP Technology研究生姓名指导教师姓名专业名、称研究方向论文提交日期安峰陈小平副教授通信与信息系统信号与信息处理2006年5月嵌入式TCPIP技术研究与应用 中文提要嵌入式TCPIP技术研究与应用中文提要嵌入式TCPIP技术是指在嵌入式系统中集成TCPIP协议栈,实现嵌入式系统与基鼍:Te影lP协议栈的以太网之阅的互逡。曩前,应用比较广泛的嵌入式TCPIP协议栈有uIP和LwIP。它们是精简的协议栈,用c语言编写,
2、因此可移植性好,适用于816位单片枧。本文主要针对这两种携议栈的移植、应用进行分析和研究,另外还探讨了基于uClinux的嵌入式TCPIP技术的应用等问题。网络的基础是协议,协议描述了网络通信从物理层到应用层的趣范。TCPIP协议是局域网的基础,是由i00多个协议规范组成的集合。这些协议规范从不同角度对网络通信作了规定,因此只要是满足这些规范的系统就莓以在隧络上抟输数据。嵌入式系统中集成TCPIP协议栈使彳寻嵌入式系统也成为网络的一个节点,有效遗利用了网络资源,实现了嵌入式系统的网络化。我饲对嵌入式TCPIP技术的研究主要集中在两个方砸:嵌入式web server(基于HTTP协议)和远程文件
3、传输(基于TFTP协议)。在嵌入式系统中实现web server,用户就能在侄意台联网的计算机上,透过测览器访问我们的系统,这就使远程监控、网络测量成为现实,我们已将其应用在基于双频测导法的电导率测量中。在嵌入式系统中实现文传传输协议,我们可以通过网络来下载更新系统的程序,这在王控领域有着广阔的应用前景。本课题是嵌入式技术的综合应用,我们在给出协议移植方法的阍对也阐述了TCPIP协议栈的具体规范与运作流程。为了使系统运行稳定、满足实时响应的要求,我们需要嵌入式搡作系统来作为系统的软件平台,课题中我销采用uCOSII作为嵌入式实时操作系统(RTOS)。此外,本谋题的研究中还引入了PC机上的网络技
4、术公共网关接口(CGI),经过精简作为嵌入式系统的应用程序。关键词:TCPIP,嵌入式web server,嵌入式搡作系统,文件传输协议,电导率测量作 者:安峰指导老师:陈小平旦!圣!受!垒塑!兰!堡!望鲤!曼墼!三暨!竺!gZ 垒!竺!The Research and Application of EmbeddedTCPIP TechnologyAbstractWith the development of Internet and embedded system,there are more and morerequirements for instruments to be connec
5、ted to the InternetEmbedded TCP,翟orintegrating TCP口stacks into embedded system insures the connection between embeddedsystems and ethemet based 01“i鼍CPfIPAt present,the widly used TCPIP stacks forembedded systems are u礤and Lw譬both of which are written in C language,easy totransplant and suitable for
6、 816 bit MCUsIn this paper,We focus on the transplant andapplications ofembedded TCPIP technology弧e design ofuClinux is also referedProtocol stacks iS a set of many protocols each of which describes the special rule ofnetwrok communication from the physical layer to application layerTCP,狰stacks isma
7、de up of more than a hundred of protocols。uIP and LwIP mainly include TCP。IP andARPIn the application layer,HrrP and TFTP ale needed to be writtenIntegratingTCP佃stacks into embedded sysyterns makes the embedded system a node of Ethemetand greatlY extends the communication distance ofthe embedded sys
8、tem。In this paper,搬e research ofembedded TCPIPS mainly on chip Web server(based onHTTP)and remote file tranport(based on TFTP)With chip web server,embedded systemCan be monitored via Ethemet,which call be used in remote measurementFor example,in0121“system,chip web server is used in conductivity mea
9、surementRemote file transport isvery usful in embedded system design and debug,and its application is described in detailin section 4RTOS plays 8ll important role in embedded systemIn OUr systempCOSII ischoosed as the software platform because of its exceUect performance and free of chargeLwIP is im
10、planted into ttCOS-II as the TCPIP stacksCGI(Common Gateway Interface)used in PC iS introduced into embedded TCPIP technologyIn the near future,we aretrying to move幻anther famous operation systems:pClinuxtClinux is a completed OS,with its APIour work will be easierKey words:TCPIP,Embedded web server
11、,Embedded OS,TFTP,Water conductivitymeasurcnlentWritten by Feng AnSupervised by Xiaoping ChertII苏州大学学位论文独创性声明及使用授权的声明学位论文独创性声明本人郑重声明:所提交的学位论文是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明弓用的鹿容外,本论文不含箕他个人或集体已经发表或撰写过的研究成果,也不含为获得苏州大学或其它教育机构的学位证书而使用过的材料。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式标明。本人承担本声明的法律责任。研究生签名:经受 日期: 丝!生耋:
12、垒学位论文使用授权声明苏州大学、中国科学技术信息研究所、国家图书馆、清华大学论文合作部、中国社科院文献信息情报中心有权保留本人所送交学位论文的复印件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质论文的内容榴一致。除在保密期内的保密论文外,允许论文被套阅和借阅,可以公布(包括刊登)论文的全部或部分内容。论文的公布(包括刊登)授权苏州大学学位办办理。研究生签名:丝遗 日期:导师签名:皇牛目期: 型:坦嵌入式TCPIP技术研究与应用 第一章引言第一章 引言11课题的研究概况与意义嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、
13、成本、体积、功耗严格要求的专用计算机系统,可以很好地满足对实时性指标的要求。而引入实时操作系统(RTOS)更可以极大地提高系统的灵活性、规范性和扩展能力,并大大减小程序编写的工作量,减少了出错的可能,保证最终程序具有高可靠性。目前,Internet是覆盖率极广、联网设备众多、协议完善、功能强大的一种通信方式,已经成为社会重要的基础信息设施,是重要的信息流通渠道。具备互联网络的接入功能,己经成为嵌入式系统的发展方向之一,在嵌入式系统中引入网络技术,可以将处于不同地域的多个嵌入式系统节点组成一个统一的整体,实现数据共享和统一管理,大大提高了嵌入式系统的网络功能。 目前,嵌入式TCPIP技术主要分为
14、以下三种:(1)利用具备协议栈结构的MPU芯片01。在嵌入式系统开发时,利用具有协议栈结构的微控制器和PHY01(Phyceiver物理层的接收器)来实现网络接口。这类芯片提供商还提供相应的软件包,设计者只需要调用软件包中的函数就可以了,如同在台式机中做网络开发编程一样。这种方法的优点是软件设计简单,缺点是价格比较昂贵。(2)以软件的形式在微处理器内部构建TCPIP协议栈,通过移植或者编写协议栈来实现嵌入式TCPIP技术。本课题就是采用这种方法,它的优点显而易见,就是灵活性高,价格低廉,然而这需要较高的软件水平,对开发者的要求较高。(3)通过专用的WEB服务器实现“1。在现有的嵌入式系统中大量
15、使用的是8位或16位MCU(Micro Control Unit微控制器),并不要求每个设备都直接连接到Internet上,用户可以利用Internet+轻量级网络的方式实现嵌入式TCPIP技术。这里指的轻量级网络包括:电力线、RS-485和RS232等网络。比如EmWare公司专门为嵌入式微控制器设计的网络服务器“3就是一种专用WEB服务器。嵌入式TCPIP协议栈与我们所熟悉的PC机上的TCPIP协议栈也有较大的区别。TCPIP协议栈最先在UNIX系统上实现,随后在Linux、DOS、Windows上也实现了嵌入式TCPIP技术研究与应用 第章引言TCPIP协议”1。同样,TCPIP协议栈也
16、可以被移植到其它嵌入式系统上,8位的MC$51单片机、16位的AVR、32位的MIPS等芯片都可以做为嵌入式TCPIP协议栈的硬件平台。由于微处理器的资源有限,其可直接寻址的程序空间与数据空间都很小,处理速度较慢,这些都无法与台式机相比,所以嵌入式TCPIP与常规TCPIP的实现有很大不同。从操作系统层面来讲,无论是Linux、DOS、Windows,它们都是多任务操作系统,这使得协议代码编写简单化。而许多嵌入式系统,因为成本原因没有采用实时嵌入式操作系统,这就使得其代码结构变为无限循环+硬件查询+顺序执行的方式。从内存分配方面来讲,Windows或UNIX等操作系统的内存分配是动态的删,可根
17、据需要随时分配随时取消。在Linux、UNIX操作系统中,它们都是mbuf的存储结构。mbuf是一个存储链,这个链可以动态的增加和减小。例如,在数据包很少的情况下,UNIX分配一个2K字节的缓冲区可能就够用了,但如果数据包较多,很可能要分配64K字节甚至更大的缓冲区,可分配的内存要根据CPU的可用内存来调整。但是在嵌入式系统中却不能这样做,因为一个最大的以太网数据包有1514个字节,分配一包的缓冲区就要15K字节,而嵌入式系统的数据存储空间较小,且不仅仅只存放收发的数据包。因此在嵌入式系统中,是根据实际情况分配一个固定字节缓冲区来存放接收到的以太网数据包,收到一包就处理一包。从参数传递层面来讲
18、,在UNIX上实现的TCPIP源代码中,一般有很多的参数传递,而在单片机里允许传递的参数是有限的,同时参数传递的过程要浪费程序代码空间,同时也降低单片机的运行速度。所以在嵌入式系统的实现里,一般不做太多的参数传递,而更多是使用全局变量来实现参数传递a现实生产中,存在着许多诸如油田、矿井等具有较大分散性的场合,在生产过程中要求对其基本信息进行记录和汇总,而由于生产现场大都远离工业区,交通不便,同时地域分散性较强,其基本生产信息的采集成本很高。因此,随着计算机技术和网络技术的发展,利用嵌入式计算机系统和网络技术,组成嵌入式网络化测量仪器,可以使分散的采集点连入网络,极大地提高生产效率。本课题所阐述
19、的嵌入式TCPIP技术可以单独在微控制器上运行,也可以在嵌入式操作的支持下运行。操作系统我们选择uCl inux和pCOSII,uClinux在无MMU(内存管理单元)的嵌入式系统中具有较好的技术优势,在应用网络方面它内嵌有完备的协议栈,我们在其基础上开发各种应用程序。“COS-II虽然只是一个实时的操作系统内核,但是我们通过给其添加协议栈,使得我们的系统能够在实时性要求苛刻的壁垒蔓!丝!茎查竺壅皇壁望环境可靠运行。第一章引言本课题所探讨的嵌入式TCPIP技术就是将嵌入式系统、Internet技术融合在一起,并应用在测量仪器需要实时数据采集与远程数据通信的系统。组建嵌入式网络化仪器,可以采用3
20、2位微处理器(如ARM),外加RTOS;也可以由低档的八位机组成嵌入式仪器,采用专用的网络(如RS485、CAN BUS等)把若干个嵌入式仪器连接在一起,再与PC机相连;还可以利用八位单片机组成直接接入Internet的嵌入式网络仪器。在本系统中,以32位ARM处理器为核心,在此基础上开发网络功能,使其能够直接接入Internet,实现数据的网络共享。12课题内容本文主要分析研究如何在嵌入式系统上实现TCPflP协议栈,目前在嵌入式系统上实现TCPIP协议栈可以有以下几种方法:(1) 移植精简的TCPIP协议栈,如:uIP;(2) 在微处理器上集成TCPflP协议栈+实时操作系统,如:LWIP
21、+“COSIh(3) 在3264位处理器上采用完备的操作系统,如:uClinux。本课题采用基于ARM核的S3C44BOX芯片作为集成TCPIP协议栈的硬件平台。S3C44BOX是SAMSUNG公司推出的32位处理器,它为手持设备和一般类型应用提供了高性价比和高性能的微控制器解决方案。它有丰富的内置部件和8KB Cache,可寻址范围4G。我们给它添加的外围设备包括:8MB SDRAM,地址从0xoc0000000xoc800000。4MB FLASH,内部存放启动代码Bootloader等。在TCPIP协议栈的基础上,我们编程实现应用层协议HTTP以及TFTP。将嵌入式系统接入实验室局域网的
22、方法是通过一根直连网线直接连接PC,或者通过普通9网线连接到HUB上。TCPIP协议栈移植完毕后,检验移植是否成功的方法有以下3种:(1)PC机发送ping指令给嵌入式系统,观察是否可以ping通;(2) 在浏览器地址栏输入嵌入式系统的网址(服务器的IP地址)观察是否可以访问嵌入式web server;(3) 在PC端DOS下输入TFTPi 192168148 put led,观察是否可以将ledc的HEX文件下载到系统存储器中。嵌入式TCPIP技术广泛应用在测量领域,本课题将TCPIP协议栈应用在电导率3-rII壁垒茎!型!垫查堡壅兰些旦 墨二兰!i测量仪上,仪器所测得的数据通过网络传送到监
23、控端,以网页的形式显示被测物理量,即电导率和温度。嵌入式TCPIP技术的另一个应用是文件在线更新,采用TFTP协议,通过网口更新嵌入式系统的程序,不打断程序的运行,这给嵌入式系统的调试、开发带来极大的便利。13论文结构本文第一章概述了嵌入式TCPIP技术的研究概况和意义。给出了嵌入式TCPIP协议栈的3种实现方法和2个应用。第二章讲述了嵌入式系统与以太网的接口。我们采用REALTEK公司的RTL8019AS作为网络接口芯片,在硬件方面我们重点介绍了网卡芯片RTL8019AS的内部构造和驱动程序设计,这也同样适用于其它的NE2000网络芯片。第三章重点讲述了嵌入式TCPIP协议栈的的工作原理和C
24、语言描述,并针对协议栈的移植做了细致讨论。其中,ulP协议栈的移植没有RTOS(实时操作系统)的参与,即只考虑TCPIP协议栈本身的特征。LwlP协议栈的移植是在实时操作系统u cosII平台上进行的,TCPIP协议栈作为一个任务,通过内核调用工作。uClinux本身集成了TCPIP协议栈,因此,我们更多考虑如何在嵌入式系统上进行linux的设计。第四章介绍了嵌入式TCPIP协议栈的两个应用:基于嵌入式TCPIP技术的电导率测量和文件在线更新。利用第三章中讲到的嵌入式web server技术,将测量仪器所测量到的数据以网页的形式通过以太网发给监控端;利用TFTP协议,通过网口给嵌入式系统更新程
25、序,给系统调试及开发带来极大的便利。在第五章里,我们总结了课题当中的一些难点,并结合自己的实际经验和心得体会对以后的研究与应用作了展望。嵌入式TCPIP技术研究与应用 第二章嵌入式系统的以太网接口第二章 嵌入式系统的以太网接口21以太网构成在叙述嵌入式TcPIP协议栈连接以太网之前,有必要先简要介绍一下以太网的构成和工作原理以及嵌入式系统与以太网的接口问题。以太网是现有局域网采用的最通用的通信协议标准,组建于七十年代早期。本课题涉及到的以太网(Ethernet)例均是指传输速率为lOMbps的常用局域网(LAN)标准,嵌入式系统连接lOOMbps及1000Mbps的以太网是本课题在不久的将来所
26、要达到的目的。在以太网中,所有计算机被连接到一条双绞线或同轴电缆上,采用具有冲突检测的载波感应多路访问(CS】IAcD)“”方法,采用竞争机制和总线拓朴结构。以太网由共享传输媒体,如双绞线电缆或同轴电缆和多端口集线器、网桥或交换机构成。我们使用非屏蔽双绞线(UTP)+水晶插座(RJ45)将嵌入式系统连入以太网,如果是直接与Pc机相连就采用直连网线,如果是连接HUB就采用普通网线。 RJ45(水晶插座)的引脚排列如图2-i所示:管脚号 信号l TX+2 TX-3 RX+6 RX一图21 RJ45的引脚排列在以太网中,数据是以帧的形式在网络中流动的。根据IEEE8023规定,以太网数据帧的格式如图
27、22所示。标准的IEEE 8023数据包由以下几个部分组成:前导位(preamble)、帧起始位(SFD)、目的地址(destination)、源地址(source)、数据长度(1ength)、数据(data)、帧校验字(FCS)。数据场的大小可从46B(Bytes)1500B(Bytes),如一组要传送的数据不足46Bytes,就用零补足;超过1500Bytes时,需要拆成多个帧传送。前导位、帧起始位和帧校验字仅供控制器本身用,主处理器收到的数据帧的组成依次包括:接收状态(iByte)、下一帧的页地址指针(IByte)、目的地址(6Bytes)、源地址(6Bytes)、数据长度帧类型(2By
28、tes)、数据场。数据长嵌入式TCP,IP技术研究与应用 第二章嵌入式系统的以太网接口度帧类型的值小于或等于1500Bytes时,表示数据场的长度;反之,表示数据帧的类型。如值为Ox08,Ox00,表示数据场为IP包:值依次为Ox08,Ox06,表示数据场为ARP包。Preamble SFD 目的地址源地址Length 数据 FCS图22 IEEE8023帧的组成22以太网接口芯片RTL8019AS221网卡芯片RTL8019AS主要性能由台湾ReMtek公司生产的RTL8019AS“”以太网控制器,由于其优良的性能、低廉的价格,使其在市场上10Mbps网卡中占有相当大的比例。它由如下主要性能
29、:(1) 适应于Ethernet II、IEEE8023、lOBase5、lOBase2、lOBaseT;(2) 支持8位、16位数据总线;(3) 全双工,收发可同时达到lOMbps的速率,具有睡眠模式,以降低功耗;(4) 内置16KB的SRAM,用于收发缓冲,降低对主处理器的速度要求:(5) 可连接同轴电缆和双绞线,并可自动检测所连接的介质;(6) 100脚的TQFP封装,缩小PCB尺寸。222内部结构按数据链路的不同,可以将RTL8019AS内部划分为远程DMA(remote DMA)021通道和本地DMA(10cal DMA)通道两个部分。本地DMA完成控制器与网线的数据交换,主处理器收
30、发数据只需对远程DMA操作。当主处理器要向网上发送数据时,先将一帧数据通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令aRTL8019AS在完成了上一帧的发送后,再完成此帧的发送。RTL8019AS接收到的数据通过MAC比较、CRC校验后,由FIFO存到接收缓冲区,收满一帧后,以中断或寄存器标志的方式通知主处理器。RTL8019AS原理框图如图23所示。在图2-3中,接收逻辑在接收时钟的控制下,将串行数据拼成字节送到FIFO和CRC;发送逻辑将FIFO送来的字节在发送时钟的控制下逐步按位移出,并送到CRC;CRC逻辑在接收时对输入的数据进行CRC校验,将结果与帧尾的CR
31、C比较,如不同,一l嵌入式TCPIP技术研究与应用 第二章嵌入式系统的以太网接口该帧数据将被拒收,在发送时CRC对帧数据产生CRC,并附加在数据尾传送:地址识别逻辑对接收帧的目的地址与预先设置的本地物理地址进行比较,如不同且不满足广播地址的设置要求,该帧数据将被拒收;FIFO逻辑对收发的数据作16个字节的缓冲,以减少对本地DMA请求的频率。内部总线图2-3 gTLSOlgAS原理框图223 RTL8019AS的D姒操作RTL8019AS是针对Pc机的ISA总线设计的。如运用于嵌入式设备中,则在硬件和软件的设计上有一些特殊性。嵌入式设备的主处理器可通过其映射到16个Io地址上的寄存器来完成对RT
32、L8019AS的操作。需要指明的一点是,RTL80IgAS的DMA与平时所说的DMA有点不同。RTL8019AS的local DMA操作是由控制器本身完成的,而其Remote DMA并不是在无主处理器的参与下,数据能自动移到主处理器的内存中,它的操作机制是这样的:主处理器先赋值于Remote DMA的起始地址寄存器RSARO、RSARI和字节计数器RBCRO及RBCRI,然后在ERTL8019AS的DMA IO地址上读写指定地址上的数据。RTLSOl9AS内置的16KB(有的网卡芯片可以内置多达64KB的RAM)的SRAM可划分为接收缓冲和发送缓冲两个部分。缓冲以页为单位,每页256个字节,1
33、6KB的S删的页范围规定在Ox40一Ox80,由PSTART和PSTOP寄存器来设定接收缓冲页的范围;由RSARO、l和RBCRO、1寄存器来设定发送缓冲页的范围。CURR指向接收到的帧的起始页,Boundary指向还未读的帧的起始页。当CURR到达了接收缓冲页的底部,即与PSTOP相等时,CURR又会自动指向到PSTART处。与DMA有关的寄存器如图24所嵌入式TCPIP技术研究与应用 第二章嵌入式系统的以太网接口不。图2-4与D姒有关的寄存器224 RTL8019AS与处理器之间的连接目前局域网常见的是采用双绞线为通信介质。图2-5是ARM和8019的连接图,读数据时,D0:15数据经74
34、F163245反相后传给单片机;写数据时,DO:15送到RTL8019AS。RTLSOl9AS在复位的上升沿锁定IOCSl6脚的电平,其值决定数据总线的宽度:高电平时为16位总线方式,低电平时为8位总线方式。如挂接到8位主设备上,用电阻下拉置地,D E8:15空悬。为提高收发速度,我们采用16位数据总线方式。由于RTL8019AS没有外接初始化的EPROM,故其复位时命令寄存器(CR)的io地址的值为缺省值OX300,所以,为满足RTL8019AS的ISA时序,A5A19的连接必须使其地址锁定在OX300。All:5】 A0:4 A5浇 fORA6盹 10WA7 VlCSBO AENA8ARM
35、 U2 RTL8019AS A9 _J堕生再丽研里型l篮s!一:堕0)( 收到数据判断BUF里的数据包类型f是1吨一)uIP-input();是矾P包一)uIP_arp_arpin0:)另一个需要驱动程序支持的函数是ulP_periodic O。这个函数用于uIP内核对各连接的定时轮询,因此需要一个硬件支持的定时程序周期性地用它轮询各连接,一般用于检查主机是否有数据要发送,如有,则构造IP包。使用示例如下。程序32 ulP_periodic函数示例uIP_periodic(j):如果“IP len0)【uIParp_out 0:echernetdevicedriyer_sendO:1从本质上来
36、说,uIPinputO和uIP_periodicO在内部是一个函数,即uI啮rocess(u8一t flag),uIP的设计者将uIP_process(uIPDATA)定义成uIPinput 0,而将uIP_process(uIP_TIMER)定义成uIP periodic 0,因此从代码实现上来说是完全复用的。2uIP的应用程序接口(web server)将用户的应用程序挂接到ulP中时,必须将宏uIP_APPCALL0定义成实际的应用程序函数名,这样每当某个uIP事件发生时,内核就会调用该应用程序进行处理。如果要加入应用程序状态的话,必须将宏uIP_APPSTATE SIZE定义成应用程序
37、状态结构体的长度。在应用程序函数中,依靠uIP事件检测函数来决定处理的方法,另外可以通过判断当前连接的端口号来区分处理不同的连接。下面的示例程序是我们实现的一个服务器应用的框架。,r,rPLr:嵌入式TCPIIP技术研究与应用 第三章嵌入式TCPIP协议栈的实现程序33 uIP APPCALL函数示咧#define UIP_APPCALL httpdappcall:fdefine UIP_APPSTATE SIZE(sizeof(struct httpdstate)如果(uIP connected0)如果(uPnewdataOluIP rexmlt0)收到新数据或需要重发如果(uIP conn
38、-Iport=80)(收到获得H丌P请求uIP_APPCALL0:)juIP_closed0 1【客户机关闭了连接uIP_aborted0)f客户机中断连接)主程序采用中断加轮询的方式,用中断触发的方式接收网络数据,并设置了一个接收队列暂存这些数据。在程序中轮询有无网络数据包输入,如有则调用uIP的相关处理函数(如上uIPinput0使用示例):如无则检测定时轮询中断是否发生。这里设T2设为uIP的定时轮询计数器,在T2中断中设置轮询标志,一旦主程序检测到这一标志就调用ulP_periodic 0轮询各连接(如上ulP_periodic 0使用示例)。如图3-4所示,程序在初始处首先打开80端
39、口的监听,一旦有客户机要求连上,uIP内部会给它分配一个连接项, 接着等收到客户机IE浏览器发出的“获得HTTP”请求后, 将数据队列中的数据填入网页模板,生成一幅新的网页发给客户机。因为这幅网页的大小已经超过uIP的最大段长(Max Segment Size,MSS),因此在uIP内核第一次实际只发出了MSS个字节,在等到下一次轮询到该连接并且收到上次数据包的正确应答时,发送剩下的网页数据。图3-4 uIP的总体程序结构图嵌入式TCPIP技术研究与应用 第三章嵌入式TCPIP协议栈的实堡在连接处于空闲的时候(ulPpoll0),应用程序可以从串口队列中读出原始数据,经格式处理后再存到状态数据
40、队列中,而在这个队列中保存着当前1分钟的设备工作数据,以便下次更新网页时使用。如果ulP接收正确应答超时,它会自动设置重发标志,应用程序中可以用uIP_rexmit 0来检测这个标志,重新生成网页并发送。一旦用户关闭了浏览器,uIP也会自动检测到这一事件(应用程序中可以用ulP_closed()来检测),并且释放掉这个连接项。3嵌入式网关接口EGI(Embedded Gateway Interface)嵌入式web server大多应用在测试控制领域,因此,server与外界的交互通信必不可免,传统的web server是在客户端请求时发送相应的静态HTML页面,只是起到一个文件服务器的功能。
41、在PC领域,人们的解决办法是引入CGI“”。即公共网关接口(Common Gateway Interface,CGI)。CGI是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序运行在网络服务器上。绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。CGI处理步骤:(1) 通过Internet把用户请求送到服务器。(2) 服务器接收用户请求并交给CGI程序处理。(3) CGI程序把处理结果传送给服务器。(4) 服务器把结果送回到用户。CGI适用于PC机上,一般都是运行在某种多任务操作系统当中
42、,用优秀的字符处理语言Perl编写,然而在嵌入式系统中很难支持Perl语言。因此人们提出了一种新的技术:EGI(Embeded Gateway Interface)H6。我们结合本课题,具体说明EGI是如何让嵌入式web server具有交互功能的。HTTP协议规定,浏览器首先发送HTTP请求,服务器返回indexhtm页面;如果用户点击某个按键,浏览器就发送EGI请求,例如“AD”按键对应的的HTML语言如下:AD与此形成对比的是不具有EGI功能的HTML语言如下:4嵌入式TCPIP技术研究与应用 第三章嵌入式TCPIIP协议栈的实现About因此,在发送HTTP请求时,发送数据如图a-2(
43、附录2)所示(“getegifiles”),而不是如图a-l(附录2)所示(getHTTP)。egi文件包括3部分:标志符(I)+文件头;EGI标志(a,b,c):标志符(I)+文件尾。e画文件的具体内容见附录3 HTML文档2:AD EGI。I就是包含文件头或文件尾,c就是EGI处理,我们有a,b,c三种EGI处理方法。服务器在接到请求后,判断出是EGI请求后,进行如下处理步骤:(1) 判断客户端申请的页面,并发出HTML页面头;服务器的文件组织是以一个队列的结构形式,以我们编写的HTTP协议为例,文件服务器包括indexhtm、abouthtm、contr01htm等静态页面,也包括fil
44、e headr htralhtm、file_egi、filefoothtmlplain等动态页面。(2) 协议栈通过字符处理找出请求“:雕Jegi后的字符串,也就是”files”,然后以这个字符串在队列中的文件名中进行查找,如果匹配,就对该文件进行字符处理,即对file 进行处理。 。egi(3) 处理完e西文件里第一部分后,进入第二部分,即EGI处理部分。在这里我们可以进行电导率的测量,得到新的数据后发送出去。见附录2的图a-4HTTP EGI请求帧。(4) 处理e舀文件里第三部分,发送文件尾,即filefoothtmlplain。具体内容见附录3 HTML文档3:AD Footer。EGI
45、技术的出现使我们可以根据客户端请求,即时构造新的页面,这在数据采集、实时监控领域有着广阔的应用。图57是本课题中应用EGI技术,在浏览器里实时显示采集到的模拟量(温度和电导率)。客户端每隔一段时间就自动刷新显示,发送EGI请求,服务器端发送不变的头和尾,但是在EGI处理部分把最新的数据发送过来。3。3基-Tpcos-II+LwlP的嵌入式TCPIP协议栈331嵌入式实时操作系统:1tCOS一本节我们介绍另外一种嵌入式TCPIP协议栈:LwlP(Light Weight IP)。LwIP同样是用于嵌入式系统的开放源代码的TCPIP协议栈。LwIP支持的铷议比较完整,一般需要多任务环境支持,需要几
46、十K的RAM以及40K左右的ROM。本课题采用15,P,1rr,嵌A式TCPIP技术研究与应用 第三章嵌入式TCPIP怫议栈的实堡uCOSiih7+LwlP的方式来研究嵌入式TCPIP协议栈的实现。嵌入式操作系统(Embedded Operating System)u cosI I是专为微控制器系统和软件开发而设计的公开源代码的抢占式实时多任务操作系统内核,是微控制器启动后首先执行的背景程序,作为整个系统的框架贯穿系统运行的始终。对实时性和稳定性要求很高的数据采集系统来说,引入u cosII无疑将大大改善其性能。u cosII的特点可以概括为以下几个方面:公开源代码,代码结构清晰、明了,注释详
47、尽,组织有条理,可移植性好,可裁剪,可固化。内核属于抢占式,最多可以管理60个任务。u cos-II自1992年的第一版(u C0S)以来已经有很多的应用,是一个经实践证明好用且稳定可靠的内核。目前国内对p C0SII的研究和应用也较多。p cosII是硬件相关的,不同的硬件平台需要做一些移植“”。本课题是将肚cosII移植到ARM处理器上。“cosII在特定处理器上的移植工作绝大部分集中在多任务切换的实现上,因为这部分代码主要用来保存和恢复处理器现场,许多操作如读写寄存器操作不能用C语言,只能使用特定处理器的汇编语言来完成。移植过程中,大部分的修改工作集中在三个和体系结构相关的文件中。这三个
48、文件是0SCPUCc、0SCPUCh以及OSCPU_As。1OS CPUh的移植:(1)数据类型定义数据类型的定义取决于编译器和CPU的具体类型,比如int,同样在x86上,如果用GNU的gcc编译器,则编译为4 bytes,而使用MS Vc+则编译为2 bytes本课题采用gcc编译器,移植u C0SII到ARM上时我们定义如下的数据类型:typedef unsigned char BOOLEANjtypedef unsigned char INTSU; +无符号8位整数 +,typedef 3igned char INT8S; +有符号8位整数 +typedef unsigned int INTl6U; 。无符号16位整数 +tvDedef signed int INTl6S, +有符号16位整数 +,typedef unsigned long INT32U; +无符号32位整数 +7cypedef 3igned long INT32S; +有符号32位整数 +typedef float FP32; *单精度浮点数+typedef double FP64 j -双精度浮点数 +嵌入式TCPIP技术研究与应用 第三章嵌入式TcPIP协议栈的实现(2)堆栈单位定义堆栈单位定义了在处理器现场保存和恢复时所使用的数据类型,它必须和