如果是cdc bulk方式的查底层驱动,参考实现:
[C] 纯文本查看 复制代码
void cdc_transfer(unsigned char* data, int len)
{
int left = len;
int pos = 0;
while(left > 0)
{
int avail = (int) tud_cdc_write_available();
if(avail > left)
avail = left;
if(avail)
{
int transferred = (int) tud_cdc_write(data + pos, avail);
tud_task();
tud_cdc_write_flush();
pos += transferred;
left -= transferred;
}
else
{
tud_task();
tud_cdc_write_flush();
if (!tud_cdc_connected())
break;
}
}
}
使用tud_cdc_write之前,需要根据tud_cdc_write_available来判断当前可以写多少字节,如果不判断tud_cdc_write_available字节数就强行使用tud_cdc_write可能会导致fifo溢出表现为丢字节。如果考虑上面的程序while循环,这个cpu占用高效率低,可以自行实现tud_cdc_tx_complete_cb这个回调函数来每次传输64字节的方式进行连续传输取代上面的while循环。 |