loongsuns 发表于 2010-5-11 01:29:16

请教rt-thread usb线程该如何设置?

目前有个问题,我把一个好用裸奔的usb sd卡读卡器的代码弄到 rt-thread里面之后,优先级已经改成最高,但是还是只能操作一次U盘。

现象:联机识别到u盘,打开盘符随便读一个文件,可以打开。

关掉这个文件之后,切换目录或者任意操作u盘里面的东西就都看不见了,

也就是说只能操作一次U盘。

sub初始化之后是不是要把所有的线程都停掉,就像裸奔那样,才能够正常工作呢?


有点困了,先睡了,明天有时间继续

loongsuns 发表于 2010-5-11 07:12:01

什么指令可以挂起所有的线程?

看了一下radio的程序,没用使用GUI是不是就不用使用GUI冻结那个函数(那个函数没有使用GUI的话就直接return了)

ffxz 发表于 2010-5-11 08:07:32

在radio中,usb是完全运行在中断模式中。

个人感觉肯定能够使用线程的,但是对usb还不熟悉。usb部分目前是aozima加入的,usb和冻结没什么关系,只为了保险起见而冻结的,实际上不冻结UI照样能操作:-)。

loongsuns 发表于 2010-5-11 09:04:44

我是改的usb3.1.1库里面的MassStorage的例程,没看什么工作模式,我再看看

aozima 发表于 2010-5-11 09:25:34

简单点讲,RADIO中现在的那个USB MSC就是个玩具,原来还能用用,现在想用都难了.
另也主要是SD卡那边的驱动现在不适合工作在工断模式了.

1.把SD卡的驱动要好好改进下.达到商用读卡器的级别.哪怕是山寨读卡器也比目前的RADIO好N倍.
2.实现自己的USB协议栈,但这个工作量太大了.我认为我个人不论从精力上讲还是技术层次上讲都难以实现.

ffxz 发表于 2010-5-11 09:38:31

现在SD卡当成U盘已经不能用了?不会又是中断优先级的原因吧

难道真的需要考虑自行开发完整的USB协议栈?从device、host到OTG。。。

loongsuns 发表于 2010-5-11 09:40:30

从目前的现象来看,只要我打开U盘读取数据,就会导致所有线程挂掉。

裸奔的时候使用超级while(1),可以正常读写数据。

是不是我要把除了usb的所有线程都kill掉

实在不行,也只有放弃这个功能了./emotion/em055.gif

aozima 发表于 2010-5-11 09:53:04

"现在SD卡当成U盘已经不能用了?不会又是中断优先级的原因吧 "
中断优先级的问题在上次复制usart.c时又出现了一次,但已经修正了.
现在SD卡当U盘是不好用,用两个128的小卡可以,但用2G的卡发现PC都不出来读取命令了,看来不光是驱动有问题.

"难道真的需要考虑自行开发完整的USB协议栈?从device、host到OTG。。。"
按RTT一向的组件齐全的风格.看来是很有必要整一个完整的协议栈.

"只要我打开U盘读取数据,就会导致所有线程挂掉。 "
这可能是因为SD的驱动里面用了系统的一些组件引起的.
奇怪的是SPI_FLASH中现在也用到了,但没有问题.

"实在不行,也只有放弃这个功能了"
你可以再研究下如何解决.到时RADIO也因你受益呀.功德无量.

ffxz 发表于 2010-5-11 10:01:33

回复【7楼】aozima
"难道真的需要考虑自行开发完整的USB协议栈?从device、host到OTG。。。"
按RTT一向的组件齐全的风格.看来是很有必要整一个完整的协议栈.
-----------------------------------------------------------------------

好吧!列入0.4.x或0.5.x的计划,目前暂时还没这个精力,期待有高手出现。

loongsuns 发表于 2010-5-11 10:10:27

回复【7楼】aozima
-----------------------------------------------------------------------

我用的是2G的TF卡,SDIO模式,裸奔的时候使用超级while(1),可以正常读写数据包括删除文件,没试过格式化。
板子上还有个nand falsh 但是一直没调通,怀疑是假货(k9g8g08 30块钱买的),又买了个小容量的等下次改版的时候再焊上试试。

在裸奔的程序里面,while(1)里面是不停的显示卡里面的bmp格式图片,在操作usb时会出现画面停顿,但不会死机。

目前优先级已经是31了(最大是32)。开始优先级不是31,会出现只能读取一次目录,改为31后,读取目录之后可以再操做一次。

aozima 发表于 2010-5-11 10:24:50

线程的优先级并不是主要问题.很多时候线程都是被动式地被运行.而不是跟据优先级和时间片去主动运行.
RADIO中的那个U盘用gzhuli的话说就是嫁接.完全没有按RTOS中应该的方式去处理.注定会出问题的.
原来计划的是使用独立的驱动,让联机后把RTOS停掉.让其工作在裸奔状态.但现在使用了RT-thread的驱动框架.所以..
目前还没想出较为简单的解决办法.

ffxz 发表于 2010-5-11 11:04:17

U盘,主要是那个中断模式的问题。可以考虑把它改成线程模式的,应该能够消除这个问题。

loongsuns 发表于 2010-5-11 12:23:00

额,先弄其他部分吧,门外汉玩RTT,这些问题留给你们解决吧。

一想起来上周末摸索GUI头还疼呢,石头是摸了不少,还是没摸到路。

fenglove 发表于 2013-7-6 11:07:53

rt+USB同样的头疼中
页: [1]
查看完整版本: 请教rt-thread usb线程该如何设置?