我使用 ucos2 初始化 信号量初始化为1发送数据到电脑前 先请求 信号量
然后发送,
在in包中断中 恢复信号量
程序跑了一段时间后 就 等待不到信号量了, in 包中断 没有发送过来
但是 usb 的out 中断接收 还是正常的,
不知道是我程序逻辑问题 还是 usb 本身有些发送不成功的 我没有处理
//usb 发送数据
void UsbSendData(INT8U *buf,INT8U len)
{
INT8U err;
OSSemPend(OSSemUsbTxValid,OS_TICKS_PER_SEC/20,&err); //加入超时 防止usb断开 导致 buffer 用完 溢出
if(err==OS_ERR_TIMEOUT) //USARTX->DR='e';
{
printf("mem:%d que:%d\r\n",OSMemC2B->OSMemNFree,((OS_Q *)(OSQUartTx->OSEventPtr))->OSQEntries);
}
else {
err=CDC_Transmit_FS(buf,len);
CplLed(UsbTxLed);
}
}
//中断中的回调
void USB_IN_Callback(void)
{
USARTX->DR='U';
OSSemPost(OSSemUsbTxValid);
}
|