diff --git a/osal/usb_osal_freertos.c b/osal/usb_osal_freertos.c index 2c4ed542..b98b69ac 100644 --- a/osal/usb_osal_freertos.c +++ b/osal/usb_osal_freertos.c @@ -35,6 +35,7 @@ void usb_osal_sem_delete(usb_osal_sem_t sem) int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout) { + xQueueReset((QueueHandle_t)sem); if (timeout == USB_OSAL_WAITING_FOREVER) { return (xSemaphoreTake((SemaphoreHandle_t)sem, portMAX_DELAY) == pdPASS) ? 0 : -ETIMEDOUT; } else { diff --git a/osal/usb_osal_rtthread.c b/osal/usb_osal_rtthread.c index 964c1a7f..4713e189 100644 --- a/osal/usb_osal_rtthread.c +++ b/osal/usb_osal_rtthread.c @@ -40,6 +40,7 @@ int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout) int ret = 0; rt_err_t result = RT_EOK; + rt_sem_control((rt_sem_t)sem, RT_IPC_CMD_RESET, (void *)0); if (timeout == USB_OSAL_WAITING_FOREVER) { result = rt_sem_take((rt_sem_t)sem, RT_WAITING_FOREVER); } else {