在調(diào)試初始化過程中,輸入i = CH375LibInit( ); m=CH375DiskStatus; n=CH375DiskReady( ); f=CH375DiskConnect( );后, 除了m為0x01,其余三個(gè)都返回0(ERR_SUCCESS),都正確,為什么m=CH375DiskStatus為DISK_DISCONNECT, 而其余三個(gè)都正常?
不同函數(shù)會(huì)對CH375DiskStatus賦不同值,這個(gè)變量是庫內(nèi)部用的,一般情況下用戶不用關(guān)心,你調(diào)用函數(shù)的次序有誤,應(yīng)為: i = CH375LibInit( ); f=CH375DiskConnect( ); n=CH375DiskReady( );
那您的意思是就不用管了?可程序執(zhí)行到下面就通不過了,是否直接刪除就好? while ( CH375DiskStatus != DISK_CONNECT ) { xQueryInterrupt( ); /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ mDelay100mS( ); /* 延時(shí),可選操作,有的USB存儲(chǔ)器需要幾十毫秒的延時(shí) */ mDelay100mS( ); mDelay100mS( ); mDelay100mS( ); }
當(dāng)然不能刪,這是借用CH375DiskStatus來判斷U盤是否連接,先前你說CH375DiskConnect( )是成功的,那么這段程序也應(yīng)該成功的,改用下面的程序判斷U盤是否連接: while ( CH375DiskStatus < DISK_CONNECT ) { /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有設(shè)備連接則返回成功,CH375DiskConnect同時(shí)會(huì)更新全局變量CH375DiskStatus */ mDelay100mS( ); }
i = CH375LibInit( ); while ( CH375DiskStatus < DISK_CONNECT ) { if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; mDelay100mS( ); } n=CH375DiskReady( ); 在做完CH375DiskReady()之后就可以操作U盤了
您的意思是沒有執(zhí)行f=CH375DiskConnect( )前CH375DiskStatus肯定是DISK_DISCONNECT吧。 我改變順序后,CH375DiskConnect會(huì)更新全局變量CH375DiskStatus,變?yōu)?x03(DISK_MOUNTED)。 是否正確?
是的,所以你不要改變函數(shù)位置,庫里面要用到的.CH375DiskStatus的值在頭文件中有說明.看一下CH375HF.PDF
謝謝~~~~· 我還想問一下磁盤緩沖讀寫區(qū)和文件緩沖讀寫區(qū)的區(qū)別,主要是磁盤緩沖讀寫區(qū),DISK_BASE_BUF_ADDR和DISK_BASE_BUF_LEN一定要定義么?有什么意義?程序怎么運(yùn)行?
磁盤緩沖區(qū)主要是分析文件系統(tǒng)來用的,是必須的,其長度一定不能少于一個(gè)扇區(qū).正常情況下DISK_BASE_BUF_ADDR可以不寫,由編譯器自動(dòng)分配.DISK_BASE_BUF_LEN一般選擇512就可以了(如果RAM很大,可以選擇2048,來支持大扇區(qū)U盤,不過大扇區(qū)U盤不多見). 文件緩沖區(qū)是用來緩沖文件的,文件緩沖區(qū)可以自己指定一個(gè)緩沖.長度一般是扇區(qū)的整數(shù)倍,文件緩沖區(qū)大的話讀文件會(huì)快.
磁盤緩沖區(qū)是分析U盤里面的文件系統(tǒng)么?用哪個(gè)函數(shù)實(shí)現(xiàn)? 那磁盤緩沖區(qū)與程序運(yùn)行時(shí)需要的RAM會(huì)不會(huì)重疊,互相干擾?
只要你調(diào)用FILE-OPEN,FILE_CREAT等等,都會(huì)分析文件系統(tǒng),編譯器在編譯的時(shí)候會(huì)自動(dòng)分配DISK-BASE-BUF給我們的庫調(diào)用,這個(gè)你不需要擔(dān)心