打印

at32f415 rt-thread下识别U盘

[复制链接]
1216|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jw__liu|  楼主 | 2024-6-17 07:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
jw__liu|  楼主 | 2024-6-17 07:44 | 只看该作者

at32f415 rt-thread下识别U盘

本帖最后由 tyw 于 2024-6-17 09:28 编辑

代码卡死在 drv_usbotgh.c 的 225 行的while循环里
    while(retry --)
    {
        rt_completion_wait(&urb_completion, timeout);
        if(usbh_get_urb_status((&p_usbotg_instance->p_otg_core->host), pipe->pipe_index) == URB_NOTREADY)
        {
            if((pipe->ep.bEndpointAddress & 0x80) == 0)
            {
                goto __resend;
            }



使用特权

评论回复
板凳
丙丁先生| | 2024-6-18 06:01 | 只看该作者
AT32有测评活动吗?是不是要写个循环的端口扫描?

使用特权

评论回复
地板
丙丁先生| | 2024-6-18 06:05 | 只看该作者
代码卡在了drv_usbotgh.c文件的第225行,原因是while循环中的条件retry--没有满足退出循环的条件。为了解决这个问题,可以尝试增加retry的初始值或者调整循环条件。

可以尝试增加retry的初始值,例如将其从10改为20:

```c
int retry = 20;
while(retry --)
{
    rt_completion_wait(&urb_completion, timeout);
    if(usbh_get_urb_status((&p_usbotg_instance->p_otg_core->host), pipe->pipe_index) == URB_NOTREADY)
    {
        if((pipe->ep.bEndpointAddress & 0x80) == 0)
        {
            goto __resend;
        }
    }
}
```

如果仍然无法解决问题,请检查循环体内的其他代码是否有逻辑错误或者死锁等问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

21

帖子

0

粉丝