完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在开发一个项目,该项目使用 SDK 示例中的 EZ-USB FX3 USB 3.0 设备控制器和 RTOS。
不重要,但我目前的问题是:AppThread 主循环(用于以特定时间间隔同步 UART 通信)和异步 USB Setup 请求回调处理程序函数之间的 Uart 访问之间存在竞争条件。 -> 在执行主循环UART功能的同时,正在执行USB消息处理UART功能。 要解决这个问题,我需要知道的是:USBsetuPCB 是如何处理的。 - > 在处理 USB Setup 请求时,我的 RTOS AppThread 是否中断(并停止了? 还是在 RTOS 中生成另一个线程来并行处理 UsbRequest? 传达设置的一般信息: (这不是我的代码,但传达了结构,USB和UART设置正确) appThread_Entry () {applNinit (void) for (;;) { CyU3PThreadSleep(1000); len = CyU3PUartReceiveBytes( inBuf, 1, NULL); } } A pplNinit (void) A pplNinit (void) appusbSetupcb () vendorReq { CyU3PUsbRegisterSetupCallback(AppUsbSetupCB) } { case CY_U3P_USB_VENDOR_RQT: isHandled = VendorRequest(bReqType, bRequest, wValue, wIndex, wLength); return isHandled; } { CyU3PUartTransmitBytes( outBuf, 1, NULL); CyU3PUartReceiveBytes( inBuf, 1, NULL); } |
|
相关推荐
1个回答
|
|
在EZ-USB FX3 SDK中,USB Setup回调函数是在中断上下文中执行的。换句话说,当设备收到USB Setup请求时,控制器会中断处理器并调用USBSetupCb函数来处理该请求。
由于USBSetupCb函数在中断上下文中执行,它应尽量保持简洁,避免进行复杂的操作或长时间的延迟。如果需要进行复杂的处理或与其他任务进行互动,建议将其放在一个新的线程或任务中进行处理。 至于您在AppThread主循环和USB Setup回调处理程序之间的UART竞争条件问题,建议您采取以下措施来解决: 1. 使用信号量或互斥锁来同步对UART的访问。在主循环和USB Setup回调处理程序之间,通过使用信号量或互斥锁来确保只有一个任务能够访问UART。例如,在主循环中使用信号量来等待UART访问权限,而在USB Setup回调处理程序中释放该信号量。 2. 将UART的读写操作放在一个单独的任务中。通过将UART的读写操作放在一个单独的任务中,您可以确保它们不会与主循环和USB Setup回调处理程序之间的竞争条件产生冲突。可以使用一个队列来将来自USB Setup回调处理程序的数据传递到UART任务,或者使用其他IPC机制进行通信。 3. 调整主循环和USB Setup回调处理程序的处理时间。如果主循环和USB Setup回调处理程序都需要较长的处理时间,可能会导致竞争条件。您可以通过优化代码或者调整处理时间来减少它们之间的冲突。 综上所述,USB Setup回调函数是在中断上下文中处理的,您可以采取上述措施来解决主循环和USB Setup回调处理程序之间的竞争条件问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
4007 浏览 0 评论
8589 浏览 0 评论
5985 浏览 0 评论
4145 浏览 1 评论
5218 浏览 0 评论
请问一下qspi mtsr引脚传输一次32bit后引脚不拉低怎么解决?
434浏览 2评论
683浏览 2评论
4806浏览 2评论
最近UJA1023开发遇到问题了,各位大神有谁知道可以替代这颗芯片的
607浏览 1评论
844浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 17:16 , Processed in 1.016415 second(s), Total 102, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号