您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

基于VxWorks的嵌入式系统复合通信模式

时间:2007-1-20栏目:电子通信论文

  
  3.2串行口通信
  
  在VxWorks中,将I/O系统设计成为任何类型的设备提供一个简单、统一、独立于设备的接口,所以串行口通信软件的设计和VME通信具有相似之处。在VxWorks中,任何对于串行口的操作仍然可以视为对一个文件的操作,而不必了解关于设备或程序驱动实现的细节。在串行口通信软件的设计不中,利用RRCx的增强软件包ESP可对驱动成功后的串行口设备进行操作。系统首先调用ESP软件提供的esccDrv()安装串行驱动程序,随后调用esccDevCreate()将指定的串口设备添加到系统中,当串口初始化完成后,与DMA操作方式类似,在使用之前利用open()打开相应串口,依据串口打开时的读写标志
  
  
  
  ,调用函数write()、read()对串口进行只读操作、只写操作或同时进行读写操作。
  
  对于串口通信,仍然要关心数据接收的实时性。可采用中断方式,利用VxWorks提供的select函数的事件触发机制,将读串口的任务阻塞使其一直等待数据,当有数据来到的时候该任务会立刻自动响应,提高系统的实时性。
  
  3.3基于TCP/IP协议的网络通信
  
  网络通信一般可通过套接口(socket)实现。VxWorks提供了标准的BSDsocket调用,具有两种类型:Streamsocket(全双工流类型)、Datagramsockets(数据摄类型)。前者支持TCP协议,后者支持UDP协议。任何一个任务都可以打开一或多个socket,其它任务的socket可与之连接。客户端程序首先调用socket()个函数产生用于与各分系统连接的套接口,并为每个套接口返回一个ID号,然后初始化一个套接口结构体,为其赋上该ID号以及服务端的IP地址和端口号,并将具作为函数connect()的参数,调用connect()函数主动去连接客户端。服务端则需调用bind()函数将自身IP和端口号绑定,以保证客户端正确识别。为了确保服务器能够实时接收客户端的数据,当服务端与客户端建立连接之后,必须嵌入循环,利用read()语句不断等待客户数据。同时客户端每次发送数据之后也应等待服务端回复,建立握手机制。一个完整的socket网络应该可以用图3来描述。值得指出的是,read调用具有一个PEEK选项,即向接收缓冲区探测是否有数据而并不真正取出数据,根据它的返回值可以判断出网络的状态。这个功能适用于网络查错。
  
  3.4光纤通道
  
  由于光纤通道(fibrechannel)接口并非VxWorks自身具备的组件,因此,VxWorks内核上实现光纤通信也需要加载相关的驱动程序;同时,主机也需安装光纤通信适配器,然后通过光纤电缆连接。下面仍以PPCx系列单板机为例来说明。
  
  这里采用QLA2200作为光纤通道适栩器。QLA2200/66是Qlogic公司生产的、目前应用最为广泛的光纤通道适配器。它主要包括四个功能模块:高速RISC处理器,包括千兆位收发模块、通道控制、帧缓存等的FC接口,有三个通道PCI总线DMA控制器以及ISP2200A的外存储器。RRCx的ESP为该适配器QLA2200提供了驱动程序,支持基于交换机、仲裁环以及点对点等三种拓扑结构的SCSI、IP和低开销访问(LLA)协议,其固件协议层结构如图4所示。
  
  当VxWorks启动之后,需要调用QLA2200的初始化函数ql22Init(),该函数的功能是驱动PPCx主板上QLA2200的PCI板卡,包括SCSI、IP固件协议初始化。此时,可在光纤通道上建立基于SCSI或IP协议的数据通信模式;而LLA实际上一种不具备协议管理的点对点通信模式,可节约大量系统开销,故称之为低开销方式。它可以建立一种类似于服务器/客户机的通信机制,即服务端可以实时响应客户端的数据请求,但它同样缺乏握手安全机制。因此,如果客户端连续发送两次大批量数据,将会由于服务器来不及接收导致该两批数据首尾发生冲突,故需加以改进。LLA的服务器/客户机通信机制是通过调用函数ql22laHookAttach()在服务端设备一个挂钩函数来实现的。每当客户端向服务端发送数据,该挂钩函数将会立刻自动响应,因此,可以在挂钩函数当设置VxWorks消息队列,将接收帧缓存区中的数据取出。如下面的程序:
  

上一页  [1] [2] [3] [4] 下一页

下页更精彩:1 2 3 4 下一页