|
看看有这么一个现象哈。我PC下发USB数据命令A0 然后单板接收到以后,会回复数据,一个测试数据,16Bytes,其中前8个是一样的,顺序递增的。后8个0
然后在长时间数据交互时,会出现单板返回的数据被截断的现象(图片无法上传,我稍后试试看)手动描述就是
Device Address Length Phase Data Description Cmd.Phase.Ofs(rep)
------ ------------------- -------- ----- ------------------------ ---------------- ------------------
31.2 8 OUT a0 00 00 00 00 00 00 00 ........ 117.1.0
31.2 16 IN 72 72 72 72 72 72 72 72 rrrrrrrr 118.1.0
00 00 00 00 00 00 00 00 ........ 118.1.8
31.2 8 OUT a0 00 00 00 00 00 00 00 ........ 119.1.0
31.2 16 IN 73 73 73 73 73 73 73 73 ssssssss 120.1.0
00 00 00 00 00 00 00 00 ........ 120.1.8
31.2 8 OUT a0 00 00 00 00 00 00 00 ........ 121.1.0
31.2 15 IN 74 74 74 74 74 74 74 74 tttttttt 122.1.0
00 00 00 00 00 00 00 ....... 122.1.8
31.2 8 OUT a0 00 00 00 00 00 00 00 ........ 123.1.0
31.2 17 IN 00 75 75 75 75 75 75 75 .uuuuuuu 124.1.0
75 00 00 00 00 00 00 00 u....... 124.1.8
00 . 124.1.16
31.2 8 OUT a0 00 00 00 00 00 00 00 ........ 125.1.0
31.2 16 IN 76 76 76 76 76 76 76 76 vvvvvvvv 126.1.0
00 00 00 00 00 00 00 00 ........ 126.1.8
在发送72和73的时候时候可以的,然后到74的时候,最后一个0被截断了没有发送。在下一次发送75的时候,发送了上次少发送的那个0.导致75的这次数据长度比正常的多一个
然后76又正常了
单板返回代码:
case 0xA0:
{
//printf("接收A0测试命令,返回序列数据\n");
//printf("[USB] updata monitor data -> %d\r\n",index);
for(i = 0; i < 8; i++)
{
UsbSendBuf = index;
}
index ++;
iLen = USBD_CDC_ACM_DataSend(UsbSendBuf, 16);
if(iLen != 16)
{
printf("[USB] Send monitor data Length(%d) ERROR !=16 \r\n",iLen);
}
break;
}
想问的是, USBD_CDC_ACM_DataSend是把数据放到rl-usb协议的一个发送缓存区,这个数据发送被中断了,是和我rtx系统的任务切换有关系吗?
还是有其他地方可以保证我写入到这个发送缓存区的数据一定会被发送完成的?
|
|