头像-30593

yanli

  • 四川省成都市
  • 单片机 嵌入式
  • 设计,制造及服务

个人成就

获得 0 次赞

帮助过3人

求助QT环境下USB-CAN

我使用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