yanli
获得 0 次赞
帮助过3人
我使用GINKGO,USB-CAN适配器,在QT环境下进行2次开发我是在一个线程死循环接收数据,主线程更新UI.发了4000包的数据,只能更新100多包....while(can_start) { int ReadDataNum; int DataNum = VCI_GetReceiveNum(VCI_USBCAN2, 0,0); uint32_t SA,PF,flge; uint16_t t,n; VCI_CAN_OBJ *pCAN_ReceiveData =(VCI_CAN_OBJ *)malloc(DataNum*sizeof(VCI_CAN_OBJ)); if((DataNum > 0)&&(pCAN_ReceiveData != NULL)) { ReadDataNum = VCI_Receive(VCI_USBCAN2, 0, 0, pCAN_ReceiveData, DataNum); for (int i = 0; i < ReadDataNum; i++) { SA = pCAN_ReceiveData[i].ID & (0xff); PF = ( pCAN_ReceiveData[i].ID & (0x00ff0000))>>16; if( can_ps == SA) { switch(PF) { case 0x56: if((pCAN_ReceiveData[i].Data[0])==0x55) {//收到头 flge=1; SD.readbuff[0]=pCAN_ReceiveData[i].Data[1]; SD.readbuff[1]=pCAN_ReceiveData[i].Data[2]; SD.readbuff[2]=pCAN_ReceiveData[i].Data[3]; SD.readbuff[3]=pCAN_ReceiveData[i].Data[4]; SD.readbuff[4]=pCAN_ReceiveData[i].Data[5]; SD.readbuff[5]=pCAN_ReceiveData[i].Data[6]; SD.readbuff[6]=pCAN_ReceiveData[i].Data[7]; } elseif(flge==1) {//收完第1包内容,开始接收第二包 SD.readbuff[7]=pCAN_ReceiveData[i].Data[0]; SD.readbuff[8]=pCAN_ReceiveData