新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2017-5-20
- 在线时间
- 2 小时
|

楼主 |
发表于 2017-5-22 20:05:32
|
显示全部楼层
20170522 20:00:
将代码改为如下代码测试,在test_usb_buffer_error=1行设置断点,数据丢失时,并不会触发断点
u8 test_usb_buffer[100];
u8 test_usb_i;
u8 test_usb_buffer_error;
void EP1_IN_Callback (void)
{
u16 USB_Tx_ptr;
u16 USB_Tx_length;
if(uu_txfifo.readptr==uu_txfifo.writeptr) //无任何数据要发送,直接退出
{
return;
}
if(uu_txfifo.readptr<uu_txfifo.writeptr) //没有超过数组,读指针<写指针
{
USB_Tx_length=uu_txfifo.writeptr-uu_txfifo.readptr;//得到要发送的数据长度
}else //超过数组了 读指针>写指针
{
USB_Tx_length=USB_USART_TXFIFO_SIZE-uu_txfifo.readptr;//得到要发送的数据长度
}
if(USB_Tx_length>VIRTUAL_COM_PORT_DATA_SIZE) //超过64字节?
{
USB_Tx_length=VIRTUAL_COM_PORT_DATA_SIZE; //此次发送数据量
}
USB_Tx_ptr=uu_txfifo.readptr; //发送起始地址
uu_txfifo.readptr+=USB_Tx_length; //读指针偏移
if(uu_txfifo.readptr>=USB_USART_TXFIFO_SIZE) //读指针归零
{
uu_txfifo.readptr=0;
}
UserToPMABufferCopy(&uu_txfifo.buffer[USB_Tx_ptr], ENDP1_TXADDR, USB_Tx_length);
PMAToUserBufferCopy(test_usb_buffer,ENDP1_TXADDR,USB_Tx_length);
for(test_usb_i=0;test_usb_i<USB_Tx_length;test_usb_i++)
{
if(uu_txfifo.buffer[USB_Tx_ptr+test_usb_i]!=test_usb_buffer[test_usb_i])
{
test_usb_buffer_error=1;
}
}
SetEPTxCount(ENDP1, USB_Tx_length);
SetEPTxValid(ENDP1);
} |
|