CODE_LINUX_APP_CAN

主要用途:该IP为CAN设备的API库,提供了CAN设备的初始化,接受发送数据以及关闭设备等操作。

能力分类:嵌入式

应用领域:智能穿戴,安防监控,测试设备,游戏玩具,健康医疗

交易方式: 定制

参考价格:50000.00 小贴士:当前佣金是0%

好评率:100%| 综合评分:5.0| 已购买:0次
联系我 收藏店铺
分享: 

 模块描述

1.1  原理及方式

基于Linux Socket 函数实现CAN2.0设备的通信功能。

1.2  主要功能

IP为CAN设备的API库,提供了CAN设备的初始化,接受发送数据以及关闭设备等操作。

 标准模块

 模块设计

结构体设计

主要函数说明

CAN设备初始化函数

函数原型

objCan *   can_init( int8 chan, uint8 mode , int32 baudrate,  int buffLen)

功能描述

创建并初始化一个CAN设备

输入参数

int8 chancan设备的通道号值为0或者1

uint8 mode:标准或扩展模式;

int32 baudrate传输速率;

int buffLen数据缓冲区长度。

输出参数

全局变量值的变化

返回值

CAN设备对象指针

 

读取CAN设备数据函数

函数原型

STATUS can_get(objCan *  obj)

功能描述

读取CAN设备数据

输入参数

objCan *  objCAN设备对象指针 

 

输出参数

objCan *  objCAN设备对象指针

全局变量值的变化

返回值

OK-成功

ERROR-失败

 

写入数据CAN设备函数

函数原型

STATUS can_put(objCan *  obj)

功能描述

写入数据到CAN设备

输入参数

objCan *  objCAN设备对象指针 

 

输出参数

objCan *  objCAN设备对象指针

全局变量值的变化

关闭CAN设备的函数

函数原型

STATUS can_close(objCan *  obj)

功能描述

关闭打开的CAN设备

输入参数

objCan *  objCAN设备对象指针 

 

输出参数

OK-成功

ERROR-失败 

全局变量值的变化

 

 类定义

应用举例

基于API实现能够通过CAN设备收发数据的测试程序

 

int cantest(int argc, char **argv)

{

 

 STATUS  ret  =  OK;

 int i = 0,j=0;

 int8 chan = 0;

 int error = 0;

 int result = PASS;

 uint32  baudrate = 500000;

 char *sendbuff;

 char *recvbuff;

 struct can_frame  fr;

 uint32 count = 0;

objCan * pCan = NULL;

 

pCan = can_init(chan, 0, baudrate,1024);

 if(NULL == pCan)

 {

ret |= ERR_INIT_CAN;

OUT_MSG("init CAN error\n");

result= FAIL;

goto QUIT;

 }

 OUT_MSG("test CAN start\n");

 

 for(i = 0; i < count;++i)

 {

           strcpy( pCan->buff,sendbuff);/* "055#1122334455667788"  */

           pCan->buffRealLen=strlen(pCan->buff)+1;

           if (OK !=   can_put(pCan))

           {

             OUT_MSG("send data to can failed.\r\n");

           }

 

           pCan->rfilter[0].can_id = fr.can_id;//set  receive can ID

           pCan->rfilter[0].can_mask = CAN_SFF_MASK;//set receive ID mask

           if (OK ==   can_get(pCan))

           {

 

               if( !check(&fr.data[0], &pCan-> frame.data[0], fr.can_dlc))

             {

                  OUT_MSG("%s  %#x  [%d]  ", pCan->ifr.ifr_name,pCan-> frame.can_id,pCan-> frame.can_dlc);

                for (j = 0; j < pCan->frame.can_dlc; j++)

                      OUT_MSG("%#x ",pCan-> frame.data[j]);

                OUT_MSG("\n");

                  result = FAIL;

             }

            }else{

                OUT_MSG("receive data from can failed.\r\n");

                result = FAIL;

            }

 

  }//end for

QUIT:

if(PASS == result)     OUT_MSG("test CAN PASS\n");

else   OUT_MSG("test CAN FAIL\n");

ret= can_close(objCan *  obj);

/* Return happy */

return ret;

}

其他


总体评价

好评率:100%

好评数量:0

总体评分

工作速度:5分

工作质量:5分

工作态度:5分

暂无评价

企业其他能力

More>