首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
嵌入式系统中网络通信模块的实现
来源:本站整理  作者:佚名  2009-06-19 15:13:20




系统中CX的作用类似于网络中间件,它将VxWorks中socket编程接口封装成进程间通信的统一接口,从而屏蔽掉底层的通信细节,调用者不需要具备socket通信的技能就能直接调用CX接口函数进行通信。在实际整机系统中,许多不同任务驻留在不同的CPU处理器上,即使同一处理器上由于任务的进一步划分,子任务之间也存在进程之间的通讯。不管通信的实体(任务/进程)在同一CPU上,还是不同CPU上,都能够直接以逻辑地址(CX Address) 利用CX公共通讯模块来进行通信,方便实现了整机系统多点互联的通讯机制。CX模块主要提供了如表1的功能:

本文中CX公共模块在设计过程中对以下各方面也进行了兼顾:
1、CX传送数据的实时性保证:网络中间件针对所有接收函数都提供有timeout的功能,这样既避免了client挂起而接收不到回应消息;又使得server端在接收请求消息并等待的同时可进行一些周期性任务的处理;
2、CX的重发机制:当一个server没有侦听到请求时,client可以多次向server重发请求,重发间隔时间由调用者自己设定;
3、CX支持阻塞模式:使用select机制来同步多路I/O复用。允许client从多个server等待回应。server同样也可以使用这样的机制来等待请求消息,或从其它server处等待回应消息;
4、CX的监视机制:提供单独的进程来监视host的状态,一旦某个host不可访问就会产生错误或警告信息。
2.3网络中间件的实例
int CXc_send(const CX_serv  serv_addr,  const void *msg,  int  len, int retry_interval )
{  
int serv_num;
int result;
//检查调用CX的任务是否已向CX注册,CX是否在本地host上初始化
if((!CX_TaskInitialized)||(!CXs_CXisInitialized()))
{ result = CX_NOT_INITIALIZED; }
//参数检查
else if((len <= 0)||(len>CX_MaxMsgSize))
{ result = CX_ILLEGAL_MSG_LEN; }
else
{   //将server地址转换为server号
    result=ServAddr2Num(serv_addr, &serv_num );
if(result == OK)
    {   //发送请求消息
        result = CXclient_send( serv_num, msg, len, retry_interval );
    }
}
return result;
}
int CXclient_send( int serv_num, const void  *msg, int len, int retry_interval )
{
int result;
result = CX_CONN_RESET;
while(result == CX_CONN_RESET)
{  
//检查cliet是否还与server保持连接,如果没有则建立连接
    if(!CXclient_IsStillConnectedTo(serv_num))
    {   result = CXc_Connect(serv_num, retry_interval);
if(result != OK)
        { return result; }
}
    //向server发送消息
    Result = CXFD_WriteMsg(Client_Admin[serv_num].cl_write_fd, msg, len);
    //如果没有发送成功,则返回错误码,并修改client相应的项目
if(result == CX_CONN_RESET)
    {  Client_Admin[serv_num].cl_is_connected = FALSE;  }
}
return result;
}

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

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:218,808.60000 毫秒