图2:板卡驱动软件结构示意图
板卡驱动的外部接口函数ILDXA_xxx以库文件的形式提供给用户,作为请求服务的客户端。用户通过调用这些接口函数向服务器端发送请求。其中,发送请求消息的函数接口是:CXc_send(const CX_serv serv_addr, const void *msg, int len, int retry_interval)。这里每个server的地址serv_addr与逻辑主机相关,在server地址列表中给出。
请求发送成功后,客户端调用接收返回消息的函数来接收服务端返回消息:CXc_recv(const CX_serv serv addr, void *msg, int len, int *act_len, int timeout)。
服务器端则通过一个无限循环的进程等待来自客户的请求消息,接收请求消息的接口函数是:CXs_recv(const CX_serv serv_addr, void *msg, int len, int *act_len, CX_repl *repl_addr, int timeout)。这里返回地址repl_addr由CX动态分配:当server接收到一个请求消息,CX提供回复消息应该发送的返回地址。
服务器端接收到请求消息后调用相应的处理函数来处理传递过来的命令和参数,并继续等待下一个请求。当命令执行完后,外部中断信号会中断服务器端处理器。中断服务程序ILDISR_command释放信号量来同步服务器端的循环执行的任务。此任务向客户返回一个消息,接口函数:CXs_send(CXXA_repl repl_addr, const void *msg, int len)。
3结束语
VxWorks是一种高效的多任务的嵌入式实时操作系统,网络是VxWorks系统之间以及与其他系统通信的主要方式。本文讨论了VxWorks中网络通信的关键技术,其创新点在于:利用这种基于socket的面向连接的网络通信机制,开发了普适于整机系统通讯的公共模块-CX网络中间件,具体到该嵌入式分系统应用中实现了上位机与硬件板卡的实时通信,取得了良好的效果。