在线时间2095 小时
UID3253523
注册时间2016-3-21
NXP金币1694
该用户从未签到
超级版主
- 积分
- 19924
- 最后登录
- 2024-4-19
|
发表于 2021-1-25 14:49:03
|
显示全部楼层
本帖最后由 小恩GG 于 2021-1-25 14:50 编辑
楼主你好!
今天我分析了下,发现在USB_DeviceCdcVcomCallback event=kUSB_DeviceCdcEventSendResponse的时候,有个:
/* User: add your own code for send complete event */
/* Schedule buffer for next receive event */
error = USB_DeviceCdcAcmRecv(handle, USB_CDC_VCOM_BULK_OUT_ENDPOINT, s_currRecvBuf,
g_UsbDeviceCdcVcomDicEndpoints[0].maxPacketSize);
用于准备下次接收的代码。
所以你可以把你APPTask里面,接收到数据之后,加一个准备下次接收的代码,如下:
- <p> if ((0 != s_recvSize) && (USB_CANCELLED_TRANSFER_LENGTH != s_recvSize))
- {
- int32_t i;
- /* Copy Buffer to Send Buff */
- for (i = 0; i < s_recvSize; i++)
- {
- s_currSendBuf[s_sendSize++] = s_currRecvBuf[i];
- }
- s_recvSize = 0;
- s_sendSize = 0;//kerry add</p><p><em>//Kerry add, used for Schedule buffer for next receive event</em>
- error = USB_DeviceCdcAcmRecv(s_cdcVcom.cdcAcmHandle, USB_CDC_VCOM_BULK_OUT_ENDPOINT, s_currRecvBuf,
- g_UsbDeviceCdcVcomDicEndpoints[0].maxPacketSize);
- }</p>
复制代码
下面是测试结果。
1. 发‘ a
2. run起来,继续发b
从测试结果来看,已经没有block'了,其实这个还是和用户实际的代码功能设计有关,官方代码只是给了一个参考。
你那边可以测试看看。
|
|