读取U盘文件时,USBH_MSC_Read10()始终返回USBH_MSC_BUSY

2019-07-20 01:15发布

本帖最后由 jshzp 于 2019-6-17 17:14 编辑

使用阿波罗开发板,f429芯片,读取U盘上文件“test0.bin”:
[mw_shl_code=c,true]            UCHAR buffer[3149];
            res=f_open(fsrc,"3:/test0.bin", FA_OPEN_EXISTING | FA_READ);
            res=f_read(fsrc,buffer,sizeof(buffer),&br);[/mw_shl_code]
执行上述代码中的f_open()函数时死机,经查找原因,该函数内调用
[mw_shl_code=c,true]res=USBH_MSC_Read10(&USB_OTG_Core,buf,sector,512*cnt);[/mw_shl_code]
时始终返回USBH_MSC_BUSY,结果导致进入死循环的。
进一步检查发现,如果buffer长度不超过3148时,就可以正常读出,超过后就会出现上述现象。另外,test0.bin文件长度约30KB,远大于buffer长度。

继续调试发现,如果改成下面的代码:
[mw_shl_code=c,true]UCHAR buffer0[3149],buffer[3149];
res=f_open(fsrc,"3:/DF8B.txt", FA_OPEN_EXISTING | FA_READ);
res=f_read(fsrc,buffer,sizeof(buffer),&br);
res=f_read(fsrc,buffer0,sizeof(buffer0),&br);//运行到这里死机[/mw_shl_code]
则可以正常运行,到第二次f_read()时死机。似乎这个问题和开数组有关系,网上有人说这个现象可能和编译器版本相关,我使用的是mdk514。求高手指教,非常感谢!





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-20 06:43
 精彩回答 2  元偷偷看……
peng1554
2楼-- · 2019-07-20 08:47
帮顶~~
jshzp
3楼-- · 2019-07-20 11:49
 精彩回答 2  元偷偷看……
jshzp
4楼-- · 2019-07-20 12:56
正点原子 发表于 2019-6-19 00:54
局部变量太大了!!
局部变量不要超过100个字节。
超过就用全局,或者内存申请。

改成全局变量就没问题了,谢谢!