?? 7841.c
字號:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <process.h>
#include "pci7841.h" // pci7841 Include file, you can refer to
#define PATTERNS 2000
long rcvPatterns[2]={0};
HANDLE rcvEvent0, rcvEvent1;
long handle[2]; // using for Port Handle
CAN_PACKET rcvMsg[2][PATTERNS], sndMsg[PATTERNS];
long cout1=0, cout2=0;
short Port_Done[2]={0};
// port 0 receive thread
void ReceiverThread0()
{
int err,index = 0;
while (TRUE)
{
if(WaitForSingleObject(rcvEvent0, INFINITE) == WAIT_OBJECT_0)
{
cout1 = CanGetRcvCnt(handle[0]);
/*
for(index=0;index<cout2;index++)
{
err = CanRcvMsg(handle[0], &rcvMsg[0][0]);
rcvPatterns[0]++;
}
*/
for(index=0;index<cout1;index++)
{
err = CanRcvMsg(handle[0], &rcvMsg[0][rcvPatterns[0]]);
rcvPatterns[0]++;
}
if(rcvPatterns[0]>=PATTERNS)
{
break;
}
}
}
return;
}
// port 1 receive thread
void ReceiverThread1()
{
long err,index = 0;
while (TRUE)
{
if(WaitForSingleObject(rcvEvent1, INFINITE) == WAIT_OBJECT_0)
{
cout2 = CanGetRcvCnt(handle[1]);
/*
for(index=0;index<cout2;index++)
{
err = CanRcvMsg(handle[1], &rcvMsg[1][0]);
rcvPatterns[1]++;
}
*/
for(index=0;index<cout2;index++)
{
err = CanRcvMsg(handle[1], &rcvMsg[1][rcvPatterns[1]]);
rcvPatterns[1]++;
}
if(rcvPatterns[1]>=PATTERNS)
{
break;
}
}
}
return;
}
int main(void)
{
PORT_STRUCT setPort;
int count, c2;
long send_count=0;
int error_flag=0;
/****************************************************************/
/* Initial Part */
/****************************************************************/
// Use _7841_OpenDriver(cardno, portno) to Open Port
// cardno : number of card (count from 0)
// portno : number of card (count from 0)
// For Example, if you have only one card on system,
// Use CanOpenDriver(0, 0) to open the upper one port
// Use CanOpenDriver(0, 1) to open the lower one port
if ((handle[0] = CanOpenDriver(0, 0)) == -1)
{
printf("\nOpen Port 0 Failed!!");
return -1;
}
if ((handle[1] = CanOpenDriver(0, 1)) == -1)
{
printf("\nOpen Port 1 Failed!!");
return -1;
}
setPort.mode = 0; // 0 : 11-bit ; 1 : 29-bit CAN network
setPort.accCode = 0; // Only ID = accCode can pass the filter
setPort.accMask = 0x7FF; // Don't care bit
setPort.baudrate = 3; // 0: 125kBps; 1:250kBps; 2:500kBps; 3:1MBps
CanConfigPort(handle[0], &setPort);
CanConfigPort(handle[1], &setPort);
/****************************************************************/
/* Main program Part */
/****************************************************************/
// Main receive loop
rcvPatterns[0] = 0;
rcvPatterns[1] = 0;
// Initial send buffer
srand(time(NULL));
for(count=0;count<PATTERNS;count++)
{
sndMsg[count].CAN_ID = count%0x7FF;
sndMsg[count].rtr = 0;
sndMsg[count].len = 8;
for(c2=0;c2<8;c2++)
sndMsg[count].data[c2] = rand() % 256;
}
//get the receive event handle
CanGetReceiveEvent(handle[0], &rcvEvent0);
CanGetReceiveEvent(handle[1], &rcvEvent1);
//create port0 receive thread
if(_beginthread(ReceiverThread0, 0, NULL) == -1)
{
printf("Create thread 0 failed!!");
CanCloseDriver(handle[0]);
return -1;
}
//create port1 receive thread
if(_beginthread(ReceiverThread1, 0, NULL) == -1)
{
printf("Create thread 1 failed!!");
CanCloseDriver(handle[1]);
return -1;
}
Sleep(100);
printf("\rTransmit start ....\n");
//send data
for(count=0;count<PATTERNS;count++)
{
printf("\rSend %d patterns", count+1);
CanSendMsg(handle[0], &sndMsg[count]);
CanSendMsg(handle[1], &sndMsg[count]);
}
Sleep(1000);
/*
printf("\nPress any key to stop sending data...\n");
while(!_kbhit())
{
printf("\rSend %d patterns, rcvPatterns[0] = %d, rcvPatterns[1] = %d", send_count,rcvPatterns[0],rcvPatterns[1]);
CanSendMsg(handle[0], &sndMsg[0]);
CanSendMsg(handle[1], &sndMsg[0]);
send_count++;
}
_getch();
*/
// verify the send data and receive data
for(count=0;count<PATTERNS;count++)
{
if(rcvMsg[0][count].CAN_ID != sndMsg[count].CAN_ID)
{
error_flag = 1;
break;
}
if(rcvMsg[0][count].rtr != sndMsg[count].rtr)
{
error_flag = 1;
break;
}
if(rcvMsg[0][count].len != sndMsg[count].len)
{
error_flag = 1;
break;
}
for(c2=0;c2<8;c2++)
{
if(rcvMsg[0][count].data[c2] != sndMsg[count].data[c2])
{
error_flag = 1;
break;
}
}
////////
if(rcvMsg[1][count].CAN_ID != sndMsg[count].CAN_ID)
{
error_flag = 1;
break;
}
if(rcvMsg[1][count].rtr != sndMsg[count].rtr)
{
error_flag = 1;
break;
}
if(rcvMsg[1][count].len != sndMsg[count].len)
{
error_flag = 1;
break;
}
for(c2=0;c2<8;c2++)
{
if(rcvMsg[1][count].data[c2] != sndMsg[count].data[c2])
{
error_flag = 1;
break;
}
}
}
printf("\nrcvPatterns[0] = %d\n",rcvPatterns[0]);
printf("rcvPatterns[1] = %d\n",rcvPatterns[1]);
if(error_flag)
{
printf("Error: Receive Buf != Transmit Buffer");
}
CanCloseDriver(handle[0]);
CanCloseDriver(handle[1]);
printf("\nPress any key to exit the program...\n");
getch();
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -