📄 testcan232.c
字号:
//build command line: gcc -lcontrolcan -lpthread -o testpci51xx testpci51xx.c#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include "controlcan.h"void *receive_func(void* param)
{
int reclen=0;
VCI_CAN_OBJ rec[100];
int i;
int *run=(int*)param;
while(*run)
{
if((reclen=VCI_Receive(VCI_CAN232,1,0,rec,100,100))>0)
{
printf("IND:%d Receive: %08X",1,rec[reclen-1].ID);
for(i=0;i<rec[reclen-1].DataLen;i++)
{
printf(" %08X",rec[reclen-1].Data[i]);
}
printf("\n");
}
} printf("run thread exit\n");
pthread_exit(0);
}
main(){ //打开串口1 if(VCI_OpenDevice(VCI_CAN232,1,0)!=1) { printf("open deivce error\n"); goto ext; } VCI_INIT_CONFIG config; config.AccCode=0; config.AccMask=0xffffffff; config.Filter=1; config.Mode=0; config.Timing0=0x00; config.Timing1=0x14; if(VCI_InitCAN(VCI_CAN232,1,0,&config)!=1) { printf("init CAN error\n"); goto ext; } if(VCI_StartCAN(VCI_CAN232,1,0)!=1) { printf("Start CAN error\n"); goto ext; } VCI_CAN_OBJ send[1]; send[0].ID=0; send[0].SendType=2; send[0].RemoteFlag=0; send[0].ExternFlag=1; send[0].DataLen=8; int i=0; for(i=0;i<send[0].DataLen;i++) { send[0].Data[i]=i; }
int m_run0=1;
pthread_t threadid;
int ret;
ret=pthread_create(&threadid,NULL,receive_func,&m_run0);
int times=1000; time_t tm1,tm2; time(&tm1); while(times--) { if(VCI_Transmit(VCI_CAN232,1,0,send,1)>0) { printf("Send: %08X",send[0].ID); for(i=0;i<send[0].DataLen;i++) { printf(" %08X",send[0].Data[i]); } printf("\n"); send[0].ID++; } else break; }
time(&tm2); usleep(100); printf("minute:%d second:%d\n",(tm2-tm1)/60,(tm2-tm1)%60);
char tk; scanf("%c",&tk); m_run0=0;
pthread_join(threadid,NULL);
ext: VCI_CloseDevice(VCI_CAN232,1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -