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