|
最近在调Harmony V1.00中的读写U盘历程,也就是msd_basic这个历程,发现一个很头等的问题。具体是这样的:
我在app.c文件中添加一个“APP_STATE_WIRTE_SECTOR”状态,然后连续写多个扇区,如果这多个扇区是连续的是程序执行没有问题,如果这个多个扇区是跳变的话,写U盘的过程总是会出错。用程序简单说下,如下。
case APP_STATE_WIRTE_SECTOR:
for(j=20000;j<80000;j=j+1)
{
disk_write(0, myData, j, 1);
}
break;
如上这样 j 每次加1的话,for循环可以完成执行完。
case APP_STATE_WIRTE_SECTOR:
for(j=20000;j<80000;j=j+2)
{
disk_write(0, myData, j, 1);
}
break;
如上这样 j 每次加2的话,disk_write函数将会发生阻塞,可能在写了10000个扇区阻塞了,也可能写了5000个扇区阻塞了。
在disk_write 函数里面有
while(SYS_FS_MEDIA_MANAGER_BufferStatusGet(pdrv, bufferHandle) != //判断命令是否执行完全
SYS_FS_MEDIA_BUFFER_COMPLETED)
{
if(media->mediaDriverFunctions->tasks != NULL)
media->mediaDriverFunctions->tasks(media->mediaDriverObject); //在等待命令执行的时候,可调用用户任务。
}
disk_write 阻塞即阻塞在这个while里面。
很蛋痛,连续的写基本每次都可以成功,但是隔一个写一个就是会出错。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|