请教rt-thread usb线程该如何设置?
目前有个问题,我把一个好用裸奔的usb sd卡读卡器的代码弄到 rt-thread里面之后,优先级已经改成最高,但是还是只能操作一次U盘。现象:联机识别到u盘,打开盘符随便读一个文件,可以打开。
关掉这个文件之后,切换目录或者任意操作u盘里面的东西就都看不见了,
也就是说只能操作一次U盘。
sub初始化之后是不是要把所有的线程都停掉,就像裸奔那样,才能够正常工作呢?
有点困了,先睡了,明天有时间继续 什么指令可以挂起所有的线程?
看了一下radio的程序,没用使用GUI是不是就不用使用GUI冻结那个函数(那个函数没有使用GUI的话就直接return了) 在radio中,usb是完全运行在中断模式中。
个人感觉肯定能够使用线程的,但是对usb还不熟悉。usb部分目前是aozima加入的,usb和冻结没什么关系,只为了保险起见而冻结的,实际上不冻结UI照样能操作:-)。 我是改的usb3.1.1库里面的MassStorage的例程,没看什么工作模式,我再看看 简单点讲,RADIO中现在的那个USB MSC就是个玩具,原来还能用用,现在想用都难了.
另也主要是SD卡那边的驱动现在不适合工作在工断模式了.
1.把SD卡的驱动要好好改进下.达到商用读卡器的级别.哪怕是山寨读卡器也比目前的RADIO好N倍.
2.实现自己的USB协议栈,但这个工作量太大了.我认为我个人不论从精力上讲还是技术层次上讲都难以实现. 现在SD卡当成U盘已经不能用了?不会又是中断优先级的原因吧
难道真的需要考虑自行开发完整的USB协议栈?从device、host到OTG。。。 从目前的现象来看,只要我打开U盘读取数据,就会导致所有线程挂掉。
裸奔的时候使用超级while(1),可以正常读写数据。
是不是我要把除了usb的所有线程都kill掉
实在不行,也只有放弃这个功能了./emotion/em055.gif "现在SD卡当成U盘已经不能用了?不会又是中断优先级的原因吧 "
中断优先级的问题在上次复制usart.c时又出现了一次,但已经修正了.
现在SD卡当U盘是不好用,用两个128的小卡可以,但用2G的卡发现PC都不出来读取命令了,看来不光是驱动有问题.
"难道真的需要考虑自行开发完整的USB协议栈?从device、host到OTG。。。"
按RTT一向的组件齐全的风格.看来是很有必要整一个完整的协议栈.
"只要我打开U盘读取数据,就会导致所有线程挂掉。 "
这可能是因为SD的驱动里面用了系统的一些组件引起的.
奇怪的是SPI_FLASH中现在也用到了,但没有问题.
"实在不行,也只有放弃这个功能了"
你可以再研究下如何解决.到时RADIO也因你受益呀.功德无量. 回复【7楼】aozima
"难道真的需要考虑自行开发完整的USB协议栈?从device、host到OTG。。。"
按RTT一向的组件齐全的风格.看来是很有必要整一个完整的协议栈.
-----------------------------------------------------------------------
好吧!列入0.4.x或0.5.x的计划,目前暂时还没这个精力,期待有高手出现。 回复【7楼】aozima
-----------------------------------------------------------------------
我用的是2G的TF卡,SDIO模式,裸奔的时候使用超级while(1),可以正常读写数据包括删除文件,没试过格式化。
板子上还有个nand falsh 但是一直没调通,怀疑是假货(k9g8g08 30块钱买的),又买了个小容量的等下次改版的时候再焊上试试。
在裸奔的程序里面,while(1)里面是不停的显示卡里面的bmp格式图片,在操作usb时会出现画面停顿,但不会死机。
目前优先级已经是31了(最大是32)。开始优先级不是31,会出现只能读取一次目录,改为31后,读取目录之后可以再操做一次。 线程的优先级并不是主要问题.很多时候线程都是被动式地被运行.而不是跟据优先级和时间片去主动运行.
RADIO中的那个U盘用gzhuli的话说就是嫁接.完全没有按RTOS中应该的方式去处理.注定会出问题的.
原来计划的是使用独立的驱动,让联机后把RTOS停掉.让其工作在裸奔状态.但现在使用了RT-thread的驱动框架.所以..
目前还没想出较为简单的解决办法. U盘,主要是那个中断模式的问题。可以考虑把它改成线程模式的,应该能够消除这个问题。 额,先弄其他部分吧,门外汉玩RTT,这些问题留给你们解决吧。
一想起来上周末摸索GUI头还疼呢,石头是摸了不少,还是没摸到路。 rt+USB同样的头疼中
页:
[1]