• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

求助QT环境下USB-CAN

yanli 2017-12-01 浏览量:1183
我使用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显示全部
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:2
  • 程序感觉没啥问题,关键是你这个系统的性能不够,因此数据的转换速度可能达不到要求

    你可以尝试调试一下,看看单步状态下能否做到不丢包

yanli 回复了 chen0000009:多谢 回复
电子老工程师 回复了 :原厂官网及其他平台都没有查到规格书 回复

  • 程序正常,至于4000包只能收100包,会不会是缓冲区满了?没有开辟足够的缓冲区?

电子老工程师 回复了 :温度等级不一样,IT:工业:(–40°C ื TC ื +95°C, 没IT:商业:0°C ื TC ื +95°C 回复

相关问题

问题达人换一批

求助QT环境下USB-CAN