0.引言
嵌入式系统由嵌入式微处理器、外围硬件设备、嵌入式操作系统和专用的应用程序组成。嵌入式系统一般是实时控制系统,其关键是嵌入式实时操作系统。VxWorks是Wind River公司开发的一种嵌入式强实时操作系统。它为嵌入式开发提供了高效的实时任务调度、中断管理、实时的任务间通信等。网络是VxWorks系统之间及其与其他系统联系的主要途径,本文讨论了VxWorks网络通信的有关机制,给出了VxWorks网络通信在一个嵌入式系统中的应用实例。
1. VxWorks中的网络通信原理
1.1 VxWorks的网络协议
VxWorks提供了强大的网络功能,能与许多主机系统进行通信。VxWorks实现了与BSD4.4 TCP/IP兼容的网络协议栈,并且加强了实时性。在网络结构最底层,VxWorks通常使用以太网作为传输媒介。在传输媒介上,VxWorks使用TCP/IP和UDP/IP协议作为VxWorks进程与其他主机环境进程之间数据传输的工具。VxWorks的所有网络机制都遵循标准的Internet协议。在以太网协议之上,VxWorks提供了以下几种网络工具:套接字(Socket);远程过程调用(Remote Procedure Calls);远程文件存取(Remote File Access);文件输出(File Export);远程命令执行。
1.2 VxWorks中的Socket接口
本文网络通讯接口是基于套接字(socket)来实现的。利用套接字,无论是单一CPU中的不同进程,还是通过共享内存底板,以太网或任何类型的网络连接的进程都可以实现通信。套接字是与网络节点的UDP或TCP端口捆绑在一起的通信接口。VxWorks实现了标准的BSD流套接字和数据报套接字。socket接口增加了网络通信操作的抽象定义,与文件操作一样,每个打开的socket都对应一个整数,称之为socket描述符,它是socket描述符在文件描述符表中的索引值,指向一个与该socket有关的数据结构。
1.3客户/服务器编程模式
网络编程一般采用客户/服务器(Client/Server)模式。服务器端有一个或多个任务在指定的端口等待来自客户端的连接请求,一旦连接成功,即可按约定的数据交换方法和格式进行数据传输。客户端则在需要的时刻向服务端发送连接请求。在C/S编程模式下,网络应用程序可分为客户端程序和服务器端程序。
客户端程序是指发出用户请求的程序,它需要知道服务端的地址,提供服务的端口号,服务所用的传输层协议类型。服务器端程序是提供服务的一方,它侦听某个端口,等待来自客户端的请求消息。在程序结构上,服务端程序可使用循环模式和并发模式。循环模式是指程序结构总体上是一个循环,一次处理一个请求。并发模式是指服务端程序可同时处理多个请求,结构上一般采用父进程接受请求,然后产生子进程来处理请求。并发模式设计时也可采用单进程的结构,即使用select调用来获得异步I/O。
2.基于socket的C/S编程模式的嵌入式系统应用实例
2.1嵌入式系统的结构
本嵌入式系统作为一个整机系统的子系统运行于VME总线的VME处理器上。用户通过访问板卡驱动来控制硬件板卡,板卡驱动与硬件板卡通过VME总线完成通信。系统结构意图如图1所示。
图1:板卡驱动程序示意图
硬件板卡主要由DSP子系统组成,它接收外部传感器信息,控制执行器实现目标功能。DpRAM模块是VME处理器和硬件板卡之间共享的双端口RAM。板卡驱动程序的目的是提供一系列接口函数,对用户屏蔽掉硬件板卡的硬件细节。其主要任务是分发硬件板卡命令,传递命令伴随的I/O参数。板卡驱动程序运行于VME总线的实时操作系统VxWorks上。
2.2网络中间件
根据上面介绍的VxWorks中的网络通信原理,我们开发了一个用于分布式系统上的任务/进程之间的通信模块CX(Communication eXchange)。本文中CX公共模块采用的是基于TCP协议的流套接字和阻塞模式,其中TCP协议是一种面向连接的通信方式,提供了有序的、无重复并且无记录边界的数据流服务,同时流量和拥塞控制以及传输数据校验保证了数据传输质量;阻塞模式节约资源,仅当客户与服务端连接时才占用计算机芯片处理时间。