⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7841.c

📁 凌华PCI 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 + -