嵌入式TCP/IP的优化设计与硬件实现
时间:09-16
来源:互联网
点击:
随着计算机网络技术和电子信息技术的迅猛发展,Internet的使用越来越普及,信息家电和智能仪表等能够接入Iriternet的非PC设备越来越多,将各类电子设备接入Internet的需求也越来越大。
电子设备接入Internet。有多种解决方案:在51系列单片机上运行经过裁剪的TCP/IP协议栈;使用一些ASIC实现TCP/IP的芯片,如Analog Devices推出的Internet Modem;也可使用嵌入式操作系统自带的TCP/IP协议栈。在某些对网络速度要求不高的领域,可用单片机实现TCP/IP;在对性能要求高的场合,可选择后两种方案。
1 嵌入式TCP/IP的硬件结构
图1是嵌入式TCP/IP系统的硬件结构。其中CS8900A是Cirrus Logic的网络控制器,芯片内部已设置帧过滤器自动抛弃无效帧,减轻CPU负荷,提高CPU对网络的访问效率。CS8900A工作机制主要是通过设置好其内部各寄存器的值,然后就可以自动开始工作。在网络接口部分,由于是RJ45接口,所以须使用E2023传输线变压器对网络中的信号进行转换。
通常TCP/IP协议栈需要大量的RAM来存储需要被应答的TCP包。如果在规定时间内未被应答,则重发该TCP包;被应答以后释放。为了减小RAM的使用量,当数据包需要重新发送时,如果能够重新产生数据包所需的数据,则可不存储需要被应答的TCP包。
因为网络中数据非常多,如果把所有的数据都读到内存中再判断是否应丢弃帧,则显然效率不高。所以边读取数据边判断而没有一开始就把整个帧全部读到内存中。在程序里定义了帧中各部分的相对地址,可以方便地对帧的各字节寻址。这样的设计是基于提高访问速度考虑的。
在CPU中帧的存放方式,定义PacketRAM变量为存放帧的首地址。图2给出了CPU中TCP/IP的内存划分,以及内存中帧的各个字节的定义和相对位置。
2 嵌入式TCP/IP的优化设计
TCP/IP一般采用C语言或混合汇编。使用可重入函数和一般指针(gellerc pointer)使得程序代码增大,运行速度降低;使用函数指针时,需要手动重建调用树(calltree),或将函数指针调用的函数设置为可重入函数。
2.1 嵌入式TCP/IP输入输出流程
与PC机TCP/IP协议一样,嵌入式TCP/IP采用协议分层的结构:应用层、TCP层、IP层和网络设备接口层。图3描述了输入和输出数据包的流程以及需要调用的函数。
输出时,TCP层先查看unsend队列,发现非空,将数据包插入队列;发现为空,则查看对方窗口是否够大(能够接收这个数据包)。然后,填写TCP头部信息。IP层选择网络设备接口,目的IP和该接口的子网掩码相“与”是否等于子网掩码,然后调用这个接口的Output函数来发送。
输入时,Timer()函数调用每个接口的Input函数。IP层判断IP版本、IP校验和,以及是否应转发数据包,然后根据IP头部的protocol字段将包传给相应的高层处理。TCP层,须判断TCP校验和,并在现有的套接字中查找,判断是否有套接字可接收这个数据包,判断TCP序号是否为希望的,然后更新这个连接的状态(包括释放被应答的数据包和TCP状态机的转化等),调用该套接字的回调函数recv。
2.2 嵌入式TCP/IP的程序结构
Tliner函数功能是调用TCPTimer处理TCP数据包的重发等功能,调用每个接口的Input函数接收到达的数据包。Timer函数必须在短时间(一般为20ms)内被调用一次,否则接收数据包和TCP定时等功能将停止。
如图4所示,程序主流程是一个大循环,在循环中处理发送数据包等应用层协议的同时,查询变量bTimeOut,在定时中断中将bTimerOut设置为真。应用层在程序流程中反复查询bTimerOut是否为真,若为真则调用Timer(),然后设置bTimerOut为假。
在使用嵌入式操作系统时,还要注意网络设备驱动函数被重入的问题。以NE2K的以太网卡为例,拷贝数据包到网卡缓存前要先设置寄存器(如起始地址)。如果设置完寄存器以后中断发生且放重入。则寄存器的设置被修改,中断返回以后拷贝将出错。
2.3 嵌入式TCP/IP运行速度优化
TCP/IP发送过程中主要的运算量集中在3部分:应用程序将数据拷贝到RAM;计算TCP校验和;将RAM中的数据包拷贝到网络设备的发送缓冲区。对于每个字节数据,两次拷贝大致共使用12×2=24个指令周期;计算TCP校验和使用16个指令周期。采用12MHz晶振,最高网络传输速度为25KB/s。
为了提高速度可以采用快速CPU或提高晶振频率。另外,尽量避免使用Reentrant函数。Reentrant类型的函数比一般函数速度要慢很多,但某些时候为了程序结构的需要必须使用Reentrant,这就需要在速度和结构之间作一个选择。选择的方法有:使用“指定存储类型”的指针(memoryr-specific pointer);精简协议栈去除运算量大但是用处不大的功能,目前TCP定时重发时间是固定的,也没有拥塞窗口控制和IP层路由;防止数据包不必要的拷贝;优化计算校验和与内存拷贝函数。
电子设备接入Internet。有多种解决方案:在51系列单片机上运行经过裁剪的TCP/IP协议栈;使用一些ASIC实现TCP/IP的芯片,如Analog Devices推出的Internet Modem;也可使用嵌入式操作系统自带的TCP/IP协议栈。在某些对网络速度要求不高的领域,可用单片机实现TCP/IP;在对性能要求高的场合,可选择后两种方案。
1 嵌入式TCP/IP的硬件结构
图1是嵌入式TCP/IP系统的硬件结构。其中CS8900A是Cirrus Logic的网络控制器,芯片内部已设置帧过滤器自动抛弃无效帧,减轻CPU负荷,提高CPU对网络的访问效率。CS8900A工作机制主要是通过设置好其内部各寄存器的值,然后就可以自动开始工作。在网络接口部分,由于是RJ45接口,所以须使用E2023传输线变压器对网络中的信号进行转换。
通常TCP/IP协议栈需要大量的RAM来存储需要被应答的TCP包。如果在规定时间内未被应答,则重发该TCP包;被应答以后释放。为了减小RAM的使用量,当数据包需要重新发送时,如果能够重新产生数据包所需的数据,则可不存储需要被应答的TCP包。
因为网络中数据非常多,如果把所有的数据都读到内存中再判断是否应丢弃帧,则显然效率不高。所以边读取数据边判断而没有一开始就把整个帧全部读到内存中。在程序里定义了帧中各部分的相对地址,可以方便地对帧的各字节寻址。这样的设计是基于提高访问速度考虑的。
在CPU中帧的存放方式,定义PacketRAM变量为存放帧的首地址。图2给出了CPU中TCP/IP的内存划分,以及内存中帧的各个字节的定义和相对位置。
2 嵌入式TCP/IP的优化设计
TCP/IP一般采用C语言或混合汇编。使用可重入函数和一般指针(gellerc pointer)使得程序代码增大,运行速度降低;使用函数指针时,需要手动重建调用树(calltree),或将函数指针调用的函数设置为可重入函数。
2.1 嵌入式TCP/IP输入输出流程
与PC机TCP/IP协议一样,嵌入式TCP/IP采用协议分层的结构:应用层、TCP层、IP层和网络设备接口层。图3描述了输入和输出数据包的流程以及需要调用的函数。
输出时,TCP层先查看unsend队列,发现非空,将数据包插入队列;发现为空,则查看对方窗口是否够大(能够接收这个数据包)。然后,填写TCP头部信息。IP层选择网络设备接口,目的IP和该接口的子网掩码相“与”是否等于子网掩码,然后调用这个接口的Output函数来发送。
输入时,Timer()函数调用每个接口的Input函数。IP层判断IP版本、IP校验和,以及是否应转发数据包,然后根据IP头部的protocol字段将包传给相应的高层处理。TCP层,须判断TCP校验和,并在现有的套接字中查找,判断是否有套接字可接收这个数据包,判断TCP序号是否为希望的,然后更新这个连接的状态(包括释放被应答的数据包和TCP状态机的转化等),调用该套接字的回调函数recv。
2.2 嵌入式TCP/IP的程序结构
Tliner函数功能是调用TCPTimer处理TCP数据包的重发等功能,调用每个接口的Input函数接收到达的数据包。Timer函数必须在短时间(一般为20ms)内被调用一次,否则接收数据包和TCP定时等功能将停止。
如图4所示,程序主流程是一个大循环,在循环中处理发送数据包等应用层协议的同时,查询变量bTimeOut,在定时中断中将bTimerOut设置为真。应用层在程序流程中反复查询bTimerOut是否为真,若为真则调用Timer(),然后设置bTimerOut为假。
在使用嵌入式操作系统时,还要注意网络设备驱动函数被重入的问题。以NE2K的以太网卡为例,拷贝数据包到网卡缓存前要先设置寄存器(如起始地址)。如果设置完寄存器以后中断发生且放重入。则寄存器的设置被修改,中断返回以后拷贝将出错。
2.3 嵌入式TCP/IP运行速度优化
TCP/IP发送过程中主要的运算量集中在3部分:应用程序将数据拷贝到RAM;计算TCP校验和;将RAM中的数据包拷贝到网络设备的发送缓冲区。对于每个字节数据,两次拷贝大致共使用12×2=24个指令周期;计算TCP校验和使用16个指令周期。采用12MHz晶振,最高网络传输速度为25KB/s。
为了提高速度可以采用快速CPU或提高晶振频率。另外,尽量避免使用Reentrant函数。Reentrant类型的函数比一般函数速度要慢很多,但某些时候为了程序结构的需要必须使用Reentrant,这就需要在速度和结构之间作一个选择。选择的方法有:使用“指定存储类型”的指针(memoryr-specific pointer);精简协议栈去除运算量大但是用处不大的功能,目前TCP定时重发时间是固定的,也没有拥塞窗口控制和IP层路由;防止数据包不必要的拷贝;优化计算校验和与内存拷贝函数。
电子 单片机 嵌入式 Cirrus 变压器 C语言 ARM 相关文章:
- 变革电信网网络安全框架 (01-03)
- 浅谈IPv6技术的若干问题(01-09)
- LG电子低成本CDMA手机的设计原则剖析 (01-12)
- 专家教你做个病毒高手(04-30)
- 数据库归档要考虑的四大问题(05-26)
- 5个步骤成功加密电子邮件(07-18)