新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于MCS-51的嵌入式Internet接入技术

基于MCS-51的嵌入式Internet接入技术

作者:时间:2012-12-31来源:网络收藏

3.2 uIP 的体系结构

uIP 协议根据系统的需要,去掉了TCP/IP协议中许多不常用的功能,保留网络通信中所需要的ARP(可选)、IP、ICMP、TCP、UDP(可选)等最核心的部分。协议全部用C 语言编写,其代码占用量极少,对RAM 资源要求也极低。例如IP/ICMP/TCP 核心模块代码大小为3304 字节,使用的RAM 只需要360字节。其应用层接口和设备驱动层接口非常简单。

uIP 协议将设计重点放在IP、ICMP 和TCP 协议的实现上,而将UDP 和ARP 协议实现作为可选模块。uIP协议的体系结构如图3 所示。

图3 uIP 协议栈结构图。

3.3 uIP 的底层设备驱动接口和应用程序接口

uIP 是一个仅包含三层网络层核心协议的协议栈,uIP 自身不包含任何类型的底层网络驱动和上层应用程序,它只提供接口函数供用户开发使用。因此为了完成与网络设备的交互,用户必须根据网络设备的类型,在uIP 中自行实现对底层网络设备的驱动。对本例来说,网络设备是RTL8019AS 网卡,因此需要在uIP 中实现对RTL8019AS 网卡的驱动。如果用户需要在 上通过http 协议浏览和获取现场数据,还必须在uIP 上实现HTTP 协议的WEB 应用服务。

RTL8019AS 网卡驱动首先是对网卡芯片的上电初始化,通过函数init_8019as()进行,用于设定网卡物理地址,设定收发缓冲区位置和大小等。其次是发送数据函数eth_send()和接收数据函数eth_rcve()。

而uIP 协议栈则通过内核中的uip_input()函数实现对底层网络设备的驱动,该函数是uIP 协议的底层设备入口。它包含两个全局变量uip_buf、uip_len.前者用于存放接收到的数据包,后者表示接收发送缓冲区里的数据长度。uip_input()函数处理从网络设备驱动发送来的IP 包。处理结束后返回变量uip_len,如果uip_len 是0,则没有数据要发送。不为0 则调用网络设备驱动程序eth_send()函数来将uip_buf 里的uip_len 长度的数据发送到以太网上。eth_rcve()函数将接收到的数据存储到缓存uip_buf 指定的缓冲区中,系统调用uip_input()函数,并在需要时调用应用程序。

uip_periodic()可以理解为是一个周期时钟函数,通常每一秒执行一次,单片机用它周期性地轮询各连接。因为uIP 协议要处理许多定时事件,例如包重发、ARP 表项更新。当周期计时激发,每一个TCP 连接调用uip_periodic(),其TCP 连接编号作为参数传递给uip_periodic()函数。uip_periodic()函数检查参数指定的连接的状态。当uip_periodic()函数返回后,会检查uip_len 的值,若不为0 则将uip_buf 缓冲区中的数据包发送到网络上。

uIP 协议的应用程序接口用于实现web 之类的应用服务。uIP 定义了一个宏UIP_APPCALL()作为该接口,供用户使用。当用户要编程实现某应用服务时,只需要将宏UIP_APPCALL()定义成实际的应用程序函数名。uIP 在接收到底层传来的数据包后,若需要送上层应用程序处理,它就调用UIP_APPCALL()。不同的连接则通过判断当前连接的端口号来确定。同时uIP 还提供一些应用程序接口函数供用户编程时使用。常用的uIP 应用程序接口函数有:关闭连接接口函数uip_close();轮询接口函数uip_poll();打开连接接口函数uip_connect()等。通过调用不同的应用程序接口函数,用户可以实现相应的功能。

4 单片机主程序的设计

完成了底层设备驱动模块和应用服务程序模块的添加以及对uIP 进行了正确配置之后,软件编写的主体部分是单片机主程序函数。主程序视用户需要达到何种功能而定。对于本例通过以太网卡实现WEB 应用服务来说,单片机主程序首先启动初始化工作,包括定时器初始化、网卡芯片初始化、UIP 协议栈初始化、用户应用程序初始化等等[5]。在完成初始化之后,主程序将不停的进行查询,如果网卡上有新的IP 数据包到达则送uip_input()函数处理;如果没有新数据包到达则由uip_priodic()函数处理定时事件。由于uIP 协议栈采用C 语言编写,所以为了方便单片机主程序与uIP 协议交互,单片机主程序也采用C 语言作为开发语言。下面是单片机主程序的部分设计代码。

TCP/IP 协议栈的链路层部分由网络控制器RTL8019AS 完成,网络层和传输层由单片机来处理。

应用层则根据需要可以在单片机内完成,也可以由单片机转给用户或终端设备完成。除了WEB 服务之外,其它应用层服务像SMTP 协议支持功能也可以根据需要编写相应的代码。

5 系统测试

在完成上述工作的基础上,我们为市区中心停车场设计了一个停车监测管理系统。由于市区中心停车场业务量非常繁忙,车位经常饱和,不仅管理人员而且客户经常需要实时掌握该停车场的停车位空闲信息。数据采集系统的前端通过传感器监测各停车位的空闲状态。并及时将信息反馈到单片机,反馈的信息包括停车位空闲状态,停车起始时间和时长等。据此监测系统计算整个停车场空闲停车位的个数,并将信息返回到客户端,同时以公告信息形式显示在停车场出入口的LED 显示屏上。方便客户作出决策。根据停车时长计算的计费信息也可以显示在客户端上。结合上述要求,我们在单片机上实现了一个Web服务器。Http 网页能够完成接收数据、发送网页数据、关闭连接等应用,并且能够动态实时地进行数据更新。客户端使用最常用的Windows 操作系统和 Explorer 浏览器,客户端不需要安装其它特殊的服务程序。系统仅设置为最多4 个并发客户端访问单片机Web 服务器。图4 是访问单片机Web服务器的结果。

图4 客户端访问单片机Web 服务器。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭