在调试初始化过程中,输入i = CH375LibInit( ); m=CH375DiskStatus; n=CH375DiskReady( ); f=CH375DiskConnect( );后, 除了m为0x01,其余三个都返回0(ERR_SUCCESS),都正确,为什么m=CH375DiskStatus为DISK_DISCONNECT, 而其余三个都正常?
不同函数会对CH375DiskStatus赋不同值,这个变量是库内部用的,一般情况下用户不用关心,你调用函数的次序有误,应为: i = CH375LibInit( ); f=CH375DiskConnect( ); n=CH375DiskReady( );
那您的意思是就不用管了?可程序执行到下面就通不过了,是否直接删除就好? while ( CH375DiskStatus != DISK_CONNECT ) { xQueryInterrupt( ); /* 查询CH375中断并更新中断状态,等待U盘插入 */ mDelay100mS( ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ mDelay100mS( ); mDelay100mS( ); mDelay100mS( ); }
当然不能删,这是借用CH375DiskStatus来判断U盘是否连接,先前你说CH375DiskConnect( )是成功的,那么这段程序也应该成功的,改用下面的程序判断U盘是否连接: while ( CH375DiskStatus < DISK_CONNECT ) { /* 查询CH375中断并更新中断状态,等待U盘插入 */ if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus */ mDelay100mS( ); }
i = CH375LibInit( ); while ( CH375DiskStatus < DISK_CONNECT ) { if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; mDelay100mS( ); } n=CH375DiskReady( ); 在做完CH375DiskReady()之后就可以操作U盘了
您的意思是没有执行f=CH375DiskConnect( )前CH375DiskStatus肯定是DISK_DISCONNECT吧。 我改变顺序后,CH375DiskConnect会更新全局变量CH375DiskStatus,变为0x03(DISK_MOUNTED)。 是否正确?
是的,所以你不要改变函数位置,库里面要用到的.CH375DiskStatus的值在头文件中有说明.看一下CH375HF.PDF
谢谢~~~~· 我还想问一下磁盘缓冲读写区和文件缓冲读写区的区别,主要是磁盘缓冲读写区,DISK_BASE_BUF_ADDR和DISK_BASE_BUF_LEN一定要定义么?有什么意义?程序怎么运行?
磁盘缓冲区主要是分析文件系统来用的,是必须的,其长度一定不能少于一个扇区.正常情况下DISK_BASE_BUF_ADDR可以不写,由编译器自动分配.DISK_BASE_BUF_LEN一般选择512就可以了(如果RAM很大,可以选择2048,来支持大扇区U盘,不过大扇区U盘不多见). 文件缓冲区是用来缓冲文件的,文件缓冲区可以自己指定一个缓冲.长度一般是扇区的整数倍,文件缓冲区大的话读文件会快.
磁盘缓冲区是分析U盘里面的文件系统么?用哪个函数实现? 那磁盘缓冲区与程序运行时需要的RAM会不会重叠,互相干扰?
只要你调用FILE-OPEN,FILE_CREAT等等,都会分析文件系统,编译器在编译的时候会自动分配DISK-BASE-BUF给我们的库调用,这个你不需要担心