在线时间0 小时
UID332848
注册时间2011-12-7
NXP金币0
该用户从未签到
新手上路

- 积分
- 15
- 最后登录
- 1970-1-1
|
USB配置#define BSPCFG_ENABLE_IUSBDCD 1
使用原CDC虚拟串口例程,枚举通过,收发正常;但做大量发送时会丢数据(已注释掉会拖慢速度的printf())。
对USB_Class_CDC_Recv_Data()做测试后发现有如下问题:
//CDC数据端点的Callback函数
void USB_Notif_Callback(uint_8 event_type, pointer val, pointer arg)
{
static uint_32 k = 0;
uint_32 handle;
APP_DATA_STRUCT *dp_rcv;
handle = *((uint_32 *)arg);
if(start_app == TRUE)
{
if(event_type == USB_APP_CDC_DTE_ACTIVATED) start_transactions = TRUE;
else if(event_type == USB_APP_CDC_DTE_DEACTIVATED) start_transactions = FALSE;
else if( (event_type == USB_APP_DATA_RECEIVED)&& (start_transactions == TRUE) )
{
dp_rcv = (APP_DATA_STRUCT*)val;
k += dp_rcv->data_size;
//问题1:第一次接收第一个字符时,dp_rcv->data_ptr没有指向g_recv_buf_ptr,这个应该是由于val使用了默认接收地址
//USB_Class_CDC_Recv_Data(handle, DIC_BULK_OUT_ENDPOINT,g_recv_buf_ptr, DATA_BUFF_SIZE);
//问题2:当逐个接收字符时,每4个byte只能留下最后1个,跟踪内存发现前3个byte有接收,但会被覆盖擦除,原因未知?
USB_Class_CDC_Recv_Data( handle, DIC_BULK_OUT_ENDPOINT, k+g_recv_buf_ptr, DATA_BUFF_SIZE-k);
}
else if( (event_type == USB_APP_SEND_COMPLETE)&& (start_transactions == TRUE) )
{
/* User: add your own code for send complete event */
}
}
return;
}
|
|