硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3742|回复: 14
收起左侧

[USB] USB HOST中断导致任务卡顿

[复制链接]

9

主题

57

回帖

84

积分

初级会员

积分
84
发表于 2021-6-23 18:57:05 | 显示全部楼层 |阅读模式
问题如题。
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2021-6-23 19:01:00 | 显示全部楼层
在任务中发出接收USB数据请求,等待触发中断HAL_HCD_HC_NotifyURBChange_Callback释放信号量,但这样一个过程会导致其他任务卡顿,有小伙伴遇到这种情况吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-6-24 07:40:53 | 显示全部楼层
烟花易冷~ 发表于 2021-6-23 19:01
在任务中发出接收USB数据请求,等待触发中断HAL_HCD_HC_NotifyURBChange_Callback释放信号量,但这样一个过 ...

是不是执行USB HOST Process的任务优先级太高了。
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2021-6-24 09:04:37 | 显示全部楼层
eric2013 发表于 2021-6-24 07:40
是不是执行USB HOST Process的任务优先级太高了。

优先级很低,我测试了应该不是优先级的问题,因为如果没等到信号量会切换任务的
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2021-6-24 15:26:47 | 显示全部楼层
烟花易冷~ 发表于 2021-6-24 09:04
优先级很低,我测试了应该不是优先级的问题,因为如果没等到信号量会切换任务的

有一点思路,可能是在没有数据返回的时候,中断是NAK,所以一直进中断,导致了任务的卡顿。
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2021-6-24 15:33:13 | 显示全部楼层
eric2013 发表于 2021-6-24 07:40
是不是执行USB HOST Process的任务优先级太高了。

但是如果不用任务调用CDC_Receive去触发接收中断的话,又不知道什么时候会有数据返回,只能向USB控制器发出URB请求,这也就导致了没有数据却一直触发中断等待USB设备有数据过来了,硬汉大大有没有什么更好的方式去处理这个流程呀?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-6-25 08:41:17 | 显示全部楼层
烟花易冷~ 发表于 2021-6-24 15:33
但是如果不用任务调用CDC_Receive去触发接收中断的话,又不知道什么时候会有数据返回,只能向USB控制器发 ...

现在用的USB HOST驱动是最新版的吗,有必要使用最新版的试试。
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2021-6-25 10:39:42 | 显示全部楼层
eric2013 发表于 2021-6-25 08:41
现在用的USB HOST驱动是最新版的吗,有必要使用最新版的试试。

感谢eric大大回复,我用的是最新版的,我感觉是我这种判断方式的逻辑不对,因为是任务发出请求让中断去查询有没有数据,但又想不到更好的办法了,如果我不请求,即使有数据来了,也不会有中断触发。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-6-26 08:45:32 | 显示全部楼层
烟花易冷~ 发表于 2021-6-25 10:39
感谢eric大大回复,我用的是最新版的,我感觉是我这种判断方式的逻辑不对,因为是任务发出请求让中断去查 ...

CubeH7里面的USB不是有好些例子,你那边测试正常吗
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2021-6-28 08:30:47 | 显示全部楼层
eric2013 发表于 2021-6-26 08:45
CubeH7里面的USB不是有好些例子,你那边测试正常吗

根据官方例子移植的,数据传输是正常的,就是其他任务会被打断
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2021-6-28 17:48:56 | 显示全部楼层
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-6-29 08:35:09 | 显示全部楼层
烟花易冷~ 发表于 2021-6-28 17:48
参考https://blog.csdn.net/loveliu928/article/details/105588583
找到了解决思路。

等你的好消息。
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2021-6-29 18:35:06 | 显示全部楼层

解决了卡顿的问题,修改了stm32h7xx_hal_hcd.c的源码,取消了返回HC_NAK时中断的重新检测,而是直接将状态改为URB_DONE,让任务重新去发起IN指令,这样就实现了通过任务去检测是否USB控制器是否有数据了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-6-30 09:32:04 | 显示全部楼层
烟花易冷~ 发表于 2021-6-29 18:35
解决了卡顿的问题,修改了stm32h7xx_hal_hcd.c的源码,取消了返回HC_NAK时中断的重新检测,而是直接将状 ...



剩下就是看下稳定性了
回复

使用道具 举报

9

主题

57

回帖

84

积分

初级会员

积分
84
 楼主| 发表于 2021-6-30 10:17:57 | 显示全部楼层
eric2013 发表于 2021-6-30 09:32
剩下就是看下稳定性了

这个就得慢慢测试了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 00:18 , Processed in 0.372834 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表