我用stm32f107 USB 主机设备库来构建一个 cdc 设备。使用了 vcp 示例并对其进行了修改,但有64 字节数据包丢失。
我修改了 usbd_cdc_core.c,实现了用 memcpy 写入 APP_Rx_Buffer。我是在任务级别执行这些写入操作的,通过禁用中断后调用这些例程来实现。
我怀疑问题可能出在 DCD_EP_Tx () 的工作方式上。因为该例程在中断时间运行,并且因为 DCD_EP_Tx () 正在处理。我怀疑,在任务时间内超出了传输的进度。
传输由 DCD_EP_Tx () 设置,APP_Rx_ptr_out 推进,然后任务恢复执行,但数据尚未发送。此时任务向 APP_Rx_Buffer 写入了一些字节,覆盖了仍然待发送的数据。
如何确保能在 USB 中断之外写入 APP_Rx_buffer,而不会覆盖待发送的数据?
|
|