微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于精简TCP/IP协议栈的信息家电网络服务器

基于精简TCP/IP协议栈的信息家电网络服务器

时间:02-11 来源:不详 点击:

,并且对TCP和ICMP报文实行分流。因为不考虑IP的分片和重组,uIP中IP层的代码非常的精简。

(3)网间报文控制协议ICMP

在uIP中,仅有一种类型的ICMP信息被实现:ICMP ECHO主要用于应用程序ping,检查网络是否连通。在uIP中,ICMP ECHO通常以一种很简单的方式进行处理;将ICMP类型由"ECHO"改为"REPLY",同时调整ICMP校验,交换发送方和接收方的IP地址。

(4)传送控制协议TCP

为了减少对内存的使用,在uIP中,TCP并不使用滑动窗口来接收和发送数据,到达的TCP报文并不进行缓冲而是立刻交给应用程序处理。但是应用程序本身可以对要发送的程序本身可以对要发送的数据进行缓冲,因为每次连接中通常有若干的TCP报文要发送。uIP网络通信模块结构如图4所示。

网络通信需要要底层RTL8019AS驱动程序的支持,参考RTL8019AS与S1C33209的资料说明文档,编写出针对此系统的RTL8019AS驱动。

uIP并不缓存到达的数据包,当网络上有数据包(在这里专指出太帧)到达网卡时,网卡驱动程序将暂存在网卡缓存中的数据包,一次一个的以DMA形式传送到目标板上的RAM中。这时将会有一段代码将到达目标板RAM中的数据包复制到全局数组uip_buf[]中,uIP协议栈程序随后对uip_buf[]中的数据进行操作。

当上层应用程序或协议栈程序产生了向网络上发送的数据包时,也将数据包放入uip_buf[]。然后调用网卡驱动程序,将uip_buf[]中的数据读到网卡的缓存中,随后发送到网络中。

在此要说明一下协议栈与网卡驱动程序、应用程序之间的同步机制问题。在系统初始化的时候,通过操作系统提供的系统调用vcre_tsk()创建三个任务:任务一(task1),uIP协议栈;任务二(task2),家电监控程序;任务三(idle_task),空闲任务。而网卡驱动程序则作为硬件中断,由"检测到网络上传过来数据包"事件激发。

整个协议栈程序流程图如图5所示。

任务一的优先级最高,任务二次之,任务三的优先级最低。当系统开始运行时,任务一首先进入RUN状态,在任务一中加入系统调用wai_flg(),由于没有网络请求,任务一随后进入WAIT状态。此时任务二进入RUN状态。当网络上有数据包到达,网卡驱动程序作为硬件中断开始执行。在退出中断前,通过系统调用set_flg(),将任务一期望的标志位置位。当中断返回后,由于任务一的等待条件已经满足,任务一的优先级又高于任务二,因此任务一进入RUN状态,即uIP协议开始处理数据。如果网络上一直有数据包到达,则任务一和中断程序不断的切换。当网络任务完成,返回到任务二的断点处继续向下执行。

由于uIP不缓存网络数据,因此在任务一执行的过程中,即uip_buf[]正在被操作时,将关闭所有中断。这样可以避免数据包被破坏,缺点是实时性差了一些,但是满足本系统要求。

3 操作系统

本系统使用的操作系统是由EPSON公司提供的ROS33V31。ROS33是为S1C33系列MCU提供的一种嵌入式实时操作系统,符合uITRON 3.0标准。使用ROS33可以迅速、有效地开发针对打印机、PDA以及各类控制设备的嵌入式应用程序。

ROS33具有以下特点:

*支持uITRON 3.0标准——符合该标准的S级*最大任务数为255,采用优先级调度机制,支持9种不同的优先级,提供信号灯、邮箱、消息缓冲等多种通信机制:

*内核优先并紧凑——最小可为1.7K;

*响应快——最快调度响应时间为7.8μS(CPU主频为33MHz,下同),最大中断屏蔽时间为4.3μs ;

*高级语言支持——除汇编语言外,还支持基于ANSI标准的C语言编程。

注释:μITRON将系统功能分成四级。R级(必要级)只提供包括实时、多任务OS所需的基本系统调用;S级(标准级)提供所有标准的系统调用;E级(扩展级)包括附加的和扩展的系统功能;C级(CPU依赖级)的系统功能依赖于具体的CPU和系统实现方式。

ROS33基本内核按功能划分为6大部分:

*任务管理——负责系统中任务状态的变迁;

*任务相关的同步管理——通过睡眠/唤醒、挂起/解挂等操作,处理相关任务及任务之间的同步关系;

*同步与通信——通过信号灯、事件、邮箱等通信机制,实现独立任务之间的同步与通信;

*系统管理——对系统环境的管理;

*时钟管理——日历时钟、定时器、定时任务等的管理;

*中断管理——开/关中断。

图6给出了ROS33内核的概念模型。

4 Web服务器及上层应用程序框架

WEB服务器所采用的方式称为uip_connect,比通常在设计中所使用的Socket套接字

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top