皇8,4 t L*" } TOPICAL DISCUSS轻量级TCP/IP协坟钱 OpenTCP的移植与应用
.武汉科技学院田裕康摘要介绍一种轻量级的TCP/IP协议栈OpenTCP,重点讨论OpenTCP的功能特性和体系结构;以ARM处理器S3C44BOX和RTL8019 AS网络接口芯片为例介绍了协议的移植方法,以及对协议的部分算法的改进措施,并给出了该协议栈的系统应用实例。
关键词TCP/IP协议找OpenTCP嵌入式系统
引言 随着工业控制和计算机技术的发展,对数据的传输提出了更高的要求,各种总线技术的发展日新月异。其中,采用以太网技术完成数据的远程通信并连人Internet,已经成为工业和家用领域的重要发展方向,将来几乎所有工业设备和家电均需要具有Internet连接能力。目前,以MCU等构成的嵌人式系统已广泛应用于工业、家电等各个领域,嵌人式系统对网络应用的要求也越来越高,因此在嵌人式系统中实现TCP/ IP协议,已经成为嵌人式系统领域的研究热点。 传统的TCP/ IP协议在资源有限的嵌人式系统中实现起来很困难,必须把大量的资源花在保证数据传送的可靠性以及数据流量的控制上,因而在实时性要求比较高的嵌人式领域中,不能满足实时要求。因此,研究并改进嵌人式TCP/IP协议栈以满足嵌人式系统的高性能要求,具有重要的现实意义。
相、B相、C相电压和电流输人端;经ADE7758计算后,转换为有功功率、无功功率、视在功率、复功率等电能信息,数据通过ADE7758的SPI接口输出。MCU读出电能数据信息并处理后,送LCD显示和网络接口。硬件原理框图如图1所示。
1硬件平台和OpenTCP简介1.1硬件平台 该系统硬件部分由ADE7758高性能电能计量芯片、ARM处理器、2 MB NOR Flash, 64 MB SDRAM和以太网接口等组成。ADE7758内部集成了6路16位△一MADC,高性能DSP、电压基准及温度传感器等电路,在1000,1动态范围内误差小于0.100;提供有功、无功及视在电能,电压、电流有效值及波形采样等数据;三相三线/三相四线兼容;DSP内部对无功电能进行了补偿;提供独立的有功电能及无功电能脉冲输出,非常适合三相电能计量。被测三相电压、电流经传感器和调理电路后,送人ADE7758的A
图1硬件原理框图 为了通过计算机远程监控电能数据,软件部分采用了伽enTCP作为协议栈完成数据通信。OpenTCP是英国Vi-ola公司开发的用于8/16位MCU的源码开放的TCP/ IP协议栈。与通用的嵌入式TCP/ IP协议栈(如1WIP,UIP)相比,其代码更为精简,不需要操作系统的支持,可以根据需要进行裁剪,全部用ANSI C编写,支持Ethernet, SLIP,ARP, RARP, ICMP, TCP, UDP;应用层支持TFTP,TEL-NET, HTTP, SMTP, POP3, DNS等,对于应用层协议都提供callback接口,可方便用户的应用程序设计。1.2协议栈的特点
通用计算机上运行的TCP/IP协议栈过于复杂,需占用大量系统资源,而嵌人式应用系统的资源往往都非常有限。因此,需要将传统的TCP/IP协议栈加以简化。在设计中OpenTCP为提高协议栈的运行效率,在保持高性能的同时,针对嵌人式系统的要求对TCP/IP进行了部分精简和优化,使其能在各种MCU体系结构上实现,减少对资源的消耗,以满足嵌人式应用的要求。具体特点如下:
16《率片k"A""布象杭Ate》adv)mesnet. com. en(广告专用)
万方数据TOPICAL DISCUSS遗题 b丝 ①由于嵌人式系统对网络功能的要求各有不同,OpenTCP可以根据应用的要求选择必要的协议,缩减程序代码的大小和对数据存储器的占用。 ②根据嵌人式系统应用环境的特点,一般其作为服务器端,与之通信的都是实现了完整TCP/IP的设备,通信较为可靠,不需要复杂的路由选择、IP分片、重装、TCP流量控制、拥塞控制等。因此,在OpenTCP中简化了TCP, IP等协议的实现,取消了所有的IP选项和TCP选项(包括IP的分段);TCP的流量控制窗口长度为1,即报文传输是基于停止一等待方式。避免了复杂的流量控制和分段处理,可以满足嵌入式网络应用的要求。TCP状态机也进行了一定的简化处理。 ③OpenTCP针对TCP/ IP协议中对性能影响最大的部分—缓冲区的管理进行了优化,采用零拷贝技术,即在网卡驱动程序和协议之间没有数据拷贝的过程,以减少对系统资源的占用,简化缓冲区的管理,提高实时性。 TCP/IP具有层次性,每一层都有自己的数据格式。数据在各层之间传送时需要不断地进行打包和解包处理,以及数据的拷贝,会大大增加系统对存储器和运算能力的开销,降低系统的性能。在OpenTCP协议栈中,每一层都没有用于数据传输的缓冲区,协议栈之间传递的是数据指针。接收数据时,每一层将本层的数据处理完毕后,将处理过的数据指针指向上一层的数据的头部;发送数据时,也是以类似的过程来实现。 为了减小网络对系统存储器的需求,采用静态分配技术,在网络初始化时静态分配数据缓冲区,设置专门的发送和接收缓冲区,大小一般大于网络的MTU值。该值可根据网络环境调整,在本系统中采用的底层网络接口为以太网,设置接收缓冲区大小为1 500字节。当一个数据包来到时,网络设备驱动将其放在接收缓冲区里,调用TCP/IP协议栈。如果数据包里有数据,TCP/IP协议就会通知相应的应用程序。如果应用程序需要发送数据,OpenTCP的每一层协议都有自己的数据结构用于本层报文头部处理,发送缓冲区的只用来存放发送的数据。发送数据时,应用程序把数据写人缓冲区,设备驱动程序立即发送报文头部和数据到网络上。 . OpenTCP协议栈可以作为一个任务运行在多任务的系统里,也可以采用前后台方式作为一个主程序运行在一个单任务系统里。其主循环控制都在重复地做一件事:检查是否有数据帧到达,如果一个帧到来,则立即根据帧的类型调用对应的输人处理函数。 ⑤应用程序接口决定了应用程序和TCP/IP协议栈连接的方式。最常用的TCP/IP API是BSD SOCKETAPI,通常用在Unix系统中,它需要多任务操作系统的支持。OpenTCP使用了事件驱动接口来响应特定事件。应用程序作为C函数运行在协议栈上,被调用来响应特定事件。当数据被接收或者分配一个连接时,这些函数被调用。应用程序只需提供一个回调函数,因此用户应用程序的编写和调试非常方便。 ) OpenTCP提供非常方便的调试手段,在每一层协议的关键部分都可以通过串口输出,使用户及时了解协议的运行情况。由于TCP/ IP协议的复杂性,很难复现同一种错误,此时只需在编译程序时打开调试选项就可以实时监控协议栈的运行情况。调试完毕后,取消调试选项即可恢复协议的运行效率。
2软件移植过程和对协议栈的改进2.1校验和的改进 TCP/IP协议处理过程中主要的运算量集中在3个部分:应用程序将数据拷贝到RAM;将RAM中的数据包拷贝到网络设备的发送缓冲区;计算校验和。前两部分在该协议中通过零拷贝技术改进运行效率,最后一部分是利用C语言来实现的。TCP/IP协议中多处用到了对校验和的计算,在IP层需要对20字节的报头进行校验,在TCP/UDP处理中是对12个字节组成的伪首部和数据进行校验。OpenTCP中采用的是每一个字节逐个计算校验和的算法,虽然这样可以适应8/16位等多种不同的处理器体系结构,但是却极大地影响了校验的速度和效率。为了充分发挥ARM7处理器的性能,采用了ARM汇编语言的优化算法,借鉴Linux核心代码中处理校验和的源程序,将Linux gcc中AT&T格式的算法改写为ADS1. 2的标准写法,经过测试,大大提高了计算的效率。2.2定时器的设置 TCP/ IP协议中需要多种定时器来完成ARP缓存的刷新,TCP协议中也需要利用定时器实现重传等机制。OpenTCP采用的是统一的定时器处理方式,在协议初始化之前初始化一个定时器池,其中定时器的个数可以根据应用的要求来设置。当协议需要使用定时器时,首先在定时器池中申请一个定时器并设置超时时间,定时器的超时由硬件定时器中断处理函数完成。当检查到有超时的事件产生时,协议处理函数进行超时处理。S3 C44B0 X内部有6个定时器,这里选择定时器5作为该协议中与时间有关的事件的定时处理,定时器的周期为10 ms o2.3网卡驱动程序设计 OpenTCP协议栈具有很好的可移植性,只需要在软件中设计几个宏定义,分别实现以太网数据的收发等功能。该协议栈已经提供了CS8900的驱动程序,由于使用的是RTL8019网卡控制器,针对该芯片的特点编写了相应的驱动程序。将RTL8019内部的RAM分为几个习日卜
paper@mesnet. com. cn(投稿专用)Microcontrollers&Embedded Systems 1 7万方数据TOPICAL DISCUSS遗 05"t 图4已经包含了已经划分好的任务(8个)、任务链(3个)、任务链的优先级(3个)。那么现在按照速率单调调度算法RMS来安排优先级,结果如图5所示。 最终的产品结构清晰,稳定性好,可维护性高。可见,按照上述原则可以帮我们安排好软件构架,包括任务链的划分、任务的划分、任务的优先级安排等,有利于开发出更好的软件。
结语
优光级递减
优光级递减
优光级递减
图5每条任务链下的任务优先级安排响到产品的稳定性和可维护性。在实际操作时既要参考这些原则,又要根据实际任务的情况进行调整,必要时还需要在硬件上运行起来进行比较。服 本文主要讨论了在实时操作系统下设计软件时最需
要注意的3个问题:任务链的划分;任务划分的几个基本原则和划分后得到的几种结果;不伺调度算法下的任务优先级的分配。需要说明的是,本文所列的原则并不能包括任务划分和优先级分配的各个方面,许多方面还需要在实际开发实时系统时不断地总结。另外,在使用以上的原则时,应当根据系统的具体特点灵活考虑,不能死搬硬套,抱着某一条原则不放。比如在优先级安排时,就必须考虑到任务的关键性、紧迫性、设备依赖性等加权因素的影响。 总之,一个即将要设计的软件系统,能不能划分成一个好的多任务系统,能不能更合理地分配优先级,直接影
参考文献仁1]周航慈,吴光文.基于嵌人式实时操作系统的程序设计技术 仁M皿.北京:北京航空航天大学出版社,2006.[2〕王春铭,刘振华,郭云飞.实时操作系统中应用软件的任务 划分仁Jl.计算机工程,2000,26(7).[3〕张晓辉,罗毅.tic/OS - 11在应用系统中任务划分及优先级 设置[J]. T-业控制计算机,2005,18(7):40,44.[4]邵志勇,张学东,马丁.tic/OS一II实时操作系统任务调度的 改进[Jl.鞍山科技大学学报,2003,26(5).