Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
MSC_MassStroage_U盘
30
at32F435 外部flash虚拟U盘卡顿卡死
发布于 2023-07-01 10:23:43 浏览:816
订阅该版
at32使用外部flash,通过usb device口虚拟U盘, 按步骤加入虚拟U盘后,PC端,盘符可以显示 但pc一旦向虚拟U盘写入文件就会卡死,文件越大(100K以上),越频繁。 首先项目功能以前测试完毕,线程较多,使用了1个网口,2个spi口,4个串口等等 部分线程如下,(已经删减过线程的,但写入虚拟U盘仍会卡死) ```C pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- motor 13 suspend 0x000000b0 0x00000400 41% 0x00000007 000 my_wq 28 suspend 0x00000088 0x00000400 13% 0x0000000a 000 tshell 20 running 0x000002cc 0x00001000 19% 0x00000005 000 acon 9 suspend 0x00000114 0x00000400 26% 0x00000063 000 telnet 26 suspend 0x00000178 0x00000800 37% 0x00000014 000 usbd 8 suspend 0x000000c4 0x00001000 17% 0x00000001 000 sys work 23 suspend 0x00000084 0x00000800 06% 0x0000000a 000 tcpip 10 suspend 0x000000f8 0x00000600 24% 0x00000014 000 etx 12 suspend 0x000000b4 0x00000400 17% 0x00000010 000 erx 12 suspend 0x000000c4 0x00000400 19% 0x00000010 000 tidle0 31 ready 0x00000088 0x00000100 53% 0x00000002 000 timer 4 suspend 0x00000080 0x00000200 25% 0x00000009 000 main 10 suspend 0x00000140 0x00000800 46% 0x00000002 000 ``` 搜索后发现 之前论坛上也有类似问题https://club.rt-thread.org/ask/question/80dc6c3aa4af96d0.html 找来stm32的开发板实际测试,空项目下,单独测试虚拟U盘,没有问题。 此时怀疑是项目内线程过多的问题,删除多余线程,重新测试,终于可以正常读写了 ```C pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- tshell 20 running 0x000002d4 0x00001000 19% 0x00000002 000 acon 9 suspend 0x00000114 0x00000400 26% 0x00000064 000 usbd 8 suspend 0x000000c8 0x00001000 17% 0x00000009 000 sys work 23 suspend 0x00000088 0x00000800 06% 0x0000000a 000 tidle0 31 ready 0x00000060 0x00000100 53% 0x00000014 000 timer 4 suspend 0x00000080 0x00000200 25% 0x00000009 000 main 10 suspend 0x0000013c 0x00000800 46% 0x0000000f 000 ``` 使用bus hound 抓包发现卡死时,几乎都是在 TEST UNIT READY 和 WRITE命令同时发送时产生的,命令长时间无响应,就会复位usb了 单片机端打印usb调试信息 **正常写入时** ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230701/8350f1338c9ef13141b66a3c69f2e3f5.png) **写入卡死时** ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230701/9dd9845d27bd82091ad94363881c4d78.png) **猜测是rt-thread线程切换需要频繁的开关中断,导致虚拟u盘卡顿甚至卡死。** **求教如何在正常的项目中使用好虚拟U盘功能呢?** **目的是解决线程少时的卡顿问题,线程多时的卡死问题** 搜索中发现的有用资料 [USB设备枚举过慢的问题解决](https://club.rt-thread.org/ask/article/86493ecf88867a59.html "USB设备枚举过慢的问题解决") [RT-Thread:STM32F407虚拟U盘,无法识别拔出问题解决方案](https://blog.csdn.net/weixin_41738023/article/details/113442189 "RT-Thread:STM32F407虚拟U盘,无法识别拔出问题解决方案") 补充一张 卡死时 bus hound 抓包的图片 ![screenshot_1688194674161.png](https://oss-club.rt-thread.org/uploads/20230701/30df7a88aafdc3e36725be7003f9e711.png.webp) 后续测试发现rt-thread下stm32的虚拟u盘,仅仅是卡顿,没有出现卡死情况 rt-thread下at32的虚拟U盘,即使时少线程的情况下,反复测试仍会不定时出现卡死的情况。。。 单独烧录AT32F435_437_Firmware_Library_V2.1.2 中的虚拟U盘例程,写入测试不会卡死
查看更多
1
个回答
默认排序
按发布时间排序
sync
2023-07-04
这家伙很懒,什么也没写!
最终使用了一个笨办法,调试时发现 在_ep_out_handler函数内增加rt_kprintf会导致卡死几率大大提升 所以猜测应该是_ep_out_handler函数受外部中断影响所致,此函数最终是在rt_usbd_thread_entry线程内被调用的,所以简单修改如下(执行函数_data_notify时,屏蔽中断,此处无法使用调度器上锁,会报错): ```C case USB_MSG_DATA_NOTIFY: /* 关闭中断 */ level = rt_hw_interrupt_disable(); /* some buggy drivers will have USB_MSG_DATA_NOTIFY before the core * got configured. */ _data_notify(device, &msg.content.ep_msg); /* 恢复中断 */ rt_hw_interrupt_enable(level); ``` 此时写入文件仍会有卡顿现象,但不会死机,大文件也可完成写入。 另外测试中尝试提高线程rt_usbd_thread_entry优先级,无效。提高USB中断优先级也是无效的 AT32的flash中我使用了qboot占去了前面的128K,且本身项目占用了近400k,AT32只有前面256k是零等待的flash。后面的运行速度较慢。应该是flash的运行速度,拖累的usb代码的运行
撰写答案
登录
注册新账号
关注者
0
被浏览
816
关于作者
sync
这家伙很懒,什么也没写!
提问
12
回答
412
被采纳
78
关注TA
发私信
相关问题
1
使用usb host读写u盘无效,求助
2
实现usb虚拟u盘,电脑端识别出的u盘有问题
3
格式化usb虚拟u盘(slave)失败,无法使用
4
STM32F407遇到USB读取U盘无法读取问题
5
求一个SD卡模拟U盘的教程?
6
读取U盘出错 get device descriptor head failed
7
用RTT做一个无线wifiU盘,有没有方案可以推荐,谢谢!
8
FatFs文件系统U盘和spi-flash不能同时使用
9
国产MCU使用USB没有HAL库咋办?
10
STM32H750驱动U盘
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
15
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部