我在調(diào)用 CH375FileOpen( ) 搜索文件時(shí),返回錯(cuò)誤代碼 0x1F,如果此時(shí)不把 U 盤拔出,直接復(fù)位系統(tǒng)( 復(fù)位單片機(jī) ),再運(yùn)行程序時(shí),程序會(huì)跑飛. 我的主函數(shù)的大體過(guò)程如下: PORT_INIT( ); //引腳復(fù)位 TEST_CH375_PORT( ); //測(cè)試 CH375 是否正常工作 CH375LibInit( ); // 初始化 CH375 CH375DiskConnect( ); //查詢CH375中斷,等待U盤插入 CH375DiskReady( ); // 查詢磁盤是否準(zhǔn)備好 CH375DiskSize( ); //查詢 U 盤容量 CH375FileOpen( ); //文件名中含有通配符*,搜索文件 請(qǐng)問(wèn)出現(xiàn)此問(wèn)題的原因可能是什么?為什么不拔 U 盤復(fù)位系統(tǒng)后再運(yùn)行程序會(huì)跑飛?
(1)跟磁盤緩沖區(qū)有關(guān) (2)直接系統(tǒng)復(fù)位,可能是由于RAM沒(méi)有掉電,保存了一些標(biāo)志或變量,影響了程序的運(yùn)行
請(qǐng)問(wèn)出現(xiàn)以下問(wèn)題是何原因: (1)有的 U 盤插上之后,運(yùn)行至 CH375DiskReady( ) 時(shí),卡在頭文件 CH375HFQ.H 中 xQueryInterrupt( ) 的 while ( CH375_INT_WIRE ) 命令行. (2)有的 U 盤,運(yùn)行 CH375FileOpen( ) 搜索文件時(shí),返回 0x43(此時(shí) CH375IntStatus = 0x14,CH375DiskStatus = 0x13),但是運(yùn)行到 CH375FileCreate( ) 時(shí),程序跑飛或者返回 0x82,而且使用 CH375FileOpen( ) 搜索文件時(shí),只能搜索根目錄下的子目錄文件夾,如果搜索具體文件,程序就跑飛或者返回 0x82. 主函數(shù)中,具體應(yīng)用如下: pCodeStr = "\\*"; for ( c = 0; c < 10; c ++ ) { // 最多搜索前20個(gè)文件 i = mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, pCodeStr ); // 搜索文件名,*為通配符 mCmdParam.Open.mPathName[ i ] = c; // 根據(jù)字符串長(zhǎng)度將結(jié)束符替換為搜索的序號(hào) q = CH375FileOpen( ); //打開(kāi)文件,如果文件名中含有通配符*,則為搜索文件而不打開(kāi) if ( i == ERR_FOUND_NAME ) { //搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中 for(j=0;j<11;j++) { Filename[j]=mCmdParam.Open.mPathName[j]; //save the name of the file which is found at last. } continue; //繼續(xù)搜索下一個(gè)匹配的文件名,下次搜索時(shí)序號(hào)會(huì)加1 } else if ( i == ERR_MISS_FILE ) break; //再也搜索不到匹配的文件,已經(jīng)沒(méi)有匹配的文件名 else { //出錯(cuò) mStopIfError( q ); break; } } // 產(chǎn)生新文件 #ifdef EN_DISK_WRITE mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "\\NEWFILE.TXT" ); // 新文件名,在根目錄下,中文文件名 r = CH375FileCreate( ); // 新建文件并打開(kāi),如果文件已經(jīng)存在則先刪除后再新建 mStopIfError( r ); pCodeStr = "找不到/C51/CH375HFT.C文件\xd\n"; for ( i = 0; i != 255; i ++ ) { if ( ( FILE_DATA_BUF[i] = *pCodeStr ) == 0 ) break; pCodeStr++; } NewSize = i; // 新文件的長(zhǎng)度 SecCount = 1; // (NewSize+511)/512, 計(jì)算文件的扇區(qū)數(shù),因?yàn)樽x寫是以扇區(qū)為單位的 mCmdParam.Write.mSectorCount = SecCount; // 寫入所有扇區(qū)的數(shù)據(jù) s = CH375FileWrite( ); // 向文件寫入數(shù)據(jù) mStopIfError( s ); #endif