返回0x31

搜索文件名有的時候ch375Result會返回0x31錯誤碼,不知道什么原因,導(dǎo)致文件名與序號不能對上

for ( searchFileIndex = 0; searchFileIndex < 255; searchFileIndex++ ) /* 最多搜索前255個文件 */ { OS_ENTER_CRITICAL(); strcpy( (char *)mCmdParam.Open.mPathName, (char *)pCodeStr ); /* 搜索文件名,*為通配符,適用于所有文件或者子目錄 */ i = strlen( (char const *)mCmdParam.Open.mPathName ); /* 計算文件名長度,以處理文件名結(jié)束符 */ mCmdParam.Open.mPathName[ i ] = searchFileIndex; /* 根據(jù)字符串長度將結(jié)束符替換為搜索的序號,從0到255 */ ch375Result = CH375FileOpen( ); /* 打開文件,如果文件名中含有通配符*,則為搜索文件而不打開 */ OS_EXIT_CRITICAL(); if ( ch375Result == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已經(jīng)沒有匹配的文件名 */ if ( ch375Result == ERR_FOUND_NAME ) /* 搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中 */ { nameLen = strlen( (char const *)mCmdParam.Open.mPathName ); if(nameLen < 4) continue; pExt = ((char *)mCmdParam.Open.mPathName) + nameLen - 4; if(strcmp(pExt, (char *)".MP3") == 0 || strcmp(pExt, (char *)".WMA") == 0 ) { OS_ENTER_CRITICAL(); if(usb_scan_play_flag == 0) { usb_total_song_num++; } ch375Result = CH375FileOpen( ); /* 打開文件 */ OS_EXIT_CRITICAL(); if ( ch375Result != ERR_MISS_DIR && ch375Result != ERR_MISS_FILE ) { OS_ENTER_CRITICAL(); if(usb_scan_play_flag == 1) { for(i = 0; i < 15; i++) { usb_name_buf[i] = mCmdParam.Open.mPathName[i]; } } else { DROPDOWN_AddString(dropdown0_usb, (const char*)mCmdParam.Open.mPathName);//添加文件名至下拉菜單 } OS_EXIT_CRITICAL(); } if(usb_scan_play_flag == 1) { OS_ENTER_CRITICAL(); usb_song_count_temp--; OS_EXIT_CRITICAL(); if(usb_song_count_temp == 0) { return 99; } } }

} else /* 出錯 */ { TEXT_SetText(text5_usb, "讀取失敗"); return 99; }文字


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

這個枚舉程序流程沒有問題,可以試試把ch375Result = CH375FileOpen( )改為ch375Result = CH375FileEnumer(),功能是一樣的,你DISKREDY通過了沒有,pCodeStr 里面的內(nèi)容是什么?把硬件原理發(fā)至我郵箱


相關(guān)文件發(fā)給您郵箱里了


問題依然有,一般掃描次數(shù)多了就會有錯誤0x31,如果只掃描前幾個文件不會出現(xiàn)問題


剛試了下,在C51文件夾中有2,30個文件,結(jié)果都能枚舉出來,沒有返回0x31的錯誤。你每查找一次前你把pCodeStr里面的數(shù)據(jù)打印出來,看看有沒有錯誤。你在ch375Result = CH375FileOpen( ); 后面如果找到文件你就把文件名打印出來,繼續(xù)枚舉文件,暫時不要處理你后面的程序,我懷疑是pCodeStr在你后面的程序被改變


為什么要在C51文件夾里面掃描,我的程序是掃描根目錄下的文件,我在出錯的地方查看mCmdParam.Open.mPathName和pCodeStr的值,串口打印出來都對,還是會返回0x31錯誤,下面是我的掃描程序 -------------------------------------------------------------------------------------- u8 ch375_scan_song(void) { INT8U searchFileIndex, ch375Result, nameLen, i; u8 usb_song_count_temp; char *pCodeStr, *pExt; usb_song_count_temp = usb_song_count; CH375Reset(); if(usb_scan_play_flag == 0) { CH375_Init(); } ch375Result = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ // while ( CH375DiskStatus < DISK_CONNECT ) /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ // { // if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有設(shè)備連接則返回成功,CH375DiskConnect同時會更新全局變量CH375DiskStatus */ // } while ( 1 ) { /* 檢查U盤是否準(zhǔn)備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 10; i++ ) /* 有的U盤總是返回未準(zhǔn)備好,不過可以被忽略 */ { if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準(zhǔn)備好 */ }

pCodeStr = (char *)"\\*"; /* 列出根目錄下的文件 */ for ( searchFileIndex = 0; searchFileIndex < 255; searchFileIndex++ ) /* 最多搜索前255個文件 */ { OS_ENTER_CRITICAL(); strcpy( (char *)mCmdParam.Open.mPathName, (char *)pCodeStr ); /* 搜索文件名,*為通配符,適用于所有文件或者子目錄 */ i = strlen( (char const *)mCmdParam.Open.mPathName ); /* 計算文件名長度,以處理文件名結(jié)束符 */ mCmdParam.Open.mPathName[ i ] = searchFileIndex; /* 根據(jù)字符串長度將結(jié)束符替換為搜索的序號,從0到255 */ ch375Result = CH375FileEnumer( ); /* 打開文件,如果文件名中含有通配符*,則為搜索文件而不打開 */ OS_EXIT_CRITICAL(); if ( ch375Result == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已經(jīng)沒有匹配的文件名 */ if ( ch375Result == ERR_SUCCESS ) /* 搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中 */ { nameLen = strlen( (char const *)mCmdParam.Open.mPathName ); if(nameLen < 4) continue; pExt = ((char *)mCmdParam.Open.mPathName) + nameLen - 4; if(strcmp(pExt, (char *)".MP3") == 0 || strcmp(pExt, (char *)".WMA") == 0 ) { OS_ENTER_CRITICAL(); if(usb_scan_play_flag == 0) { usb_total_song_num++; } ch375Result = CH375FileOpen( ); /* 打開文件 */ OS_EXIT_CRITICAL(); if ( ch375Result != ERR_MISS_DIR && ch375Result != ERR_MISS_FILE ) { OS_ENTER_CRITICAL(); if(usb_scan_play_flag == 1) { for(i = 0; i < 15; i++) { usb_name_buf[i] = mCmdParam.Open.mPathName[i]; } } else { DROPDOWN_AddString(dropdown0_usb, (const char*)mCmdParam.Open.mPathName);//添加文件名至下拉菜單 } OS_EXIT_CRITICAL(); } if(usb_scan_play_flag == 1) { OS_ENTER_CRITICAL(); usb_song_count_temp--; OS_EXIT_CRITICAL(); if(usb_song_count_temp == 0) { return 99; } } }

} else /* 出錯 */ { printf("\r\n%s\r\n", mCmdParam.Open.mPathName);[color=Red] [color=Red]printf("\r\n%s\r\n", pCodeStr);[color=Red] TEXT_SetText(text5_usb, "讀取失敗"); return 99; } } if(play_pause_flag == 1)//判斷播放暫停按鈕 { TEXT_SetText(text5_usb, "正在播放"); } else { TEXT_SetText(text5_usb, "讀取完畢"); } return 99; } } ----------------------------------------------------------- 2012112199133.jpg[color=Red]文字


不是一定在C51文件夾下,我是隨便找的文件夾,根目錄下一樣的。你CH375DiskReady幾次能過?還有你先只枚舉,不要對枚舉出來的文件做操作,先找出來原因,我們這邊測試是可以的


你的枚舉名有錯誤應(yīng)該是"\\*"或者“/*”


CH375DiskReady一次就能過,還是不行呀


哦,剛試驗過了,在根目錄下有2,30個文件都可以枚舉出來的,沒有返回0x31錯誤。你先只枚舉,不要對枚舉出來的文件做操作或者你把strcpy( (char *)mCmdParam.Open.mPathName, (char *)pCodeStr ); 改成 strcpy( (char *)mCmdParam.Open.mPathName, “\\*” ),擔(dān)心你的處理程序?qū)?char *)mCmdParam.Open.mPathName后面的幾個字節(jié)值產(chǎn)生影響


下面是我掃描前的函數(shù),我看了下串口,掃描出來的字符串,都是\*+名字+后綴,但是名字里面有亂碼,掃描的時候我也沒有做任何操作 strcpy( (char *)mCmdParam.Open.mPathName, "\\*" ); /* 搜索文件名,*為通配符,適用于所有文件或者子目錄 */ i = strlen( (char const *)mCmdParam.Open.mPathName ); /* 計算文件名長度,以處理文件名結(jié)束符 */ mCmdParam.Open.mPathName[ i ] = searchFileIndex; /* 根據(jù)字符串長度將結(jié)束符替換為搜索的序號,從0到255 */ printf("\r\n%s\r\n", mCmdParam.Open.mPathName); ch375Result = CH375FileEnumer( ); /* 打開文件,如果文件名中含有通配符*,則為搜索文件而不打開 */

20121121186657.jpg


u8 ch375_scan_song(void) { INT8U searchFileIndex, ch375Result, nameLen, i; u8 usb_song_count_temp; char *pCodeStr, *pExt; usb_song_count_temp = usb_song_count; CH375Reset(); if(usb_scan_play_flag == 0) { CH375_Init(); } ch375Result = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ // while ( CH375DiskStatus < DISK_CONNECT ) /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ // { // if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有設(shè)備連接則返回成功,CH375DiskConnect同時會更新全局變量CH375DiskStatus */ // } while ( 1 ) { /* 檢查U盤是否準(zhǔn)備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 10; i++ ) /* 有的U盤總是返回未準(zhǔn)備好,不過可以被忽略 */ { if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準(zhǔn)備好 */ } pCodeStr = (char *)"/*"; /* 列出根目錄下的文件 */ for ( searchFileIndex = 0; searchFileIndex < 255; searchFileIndex++ ) /* 最多搜索前255個文件 */ { OS_ENTER_CRITICAL(); strcpy( (char *)mCmdParam.Open.mPathName, "/*" ); /* 搜索文件名,*為通配符,適用于所有文件或者子目錄 */ i = strlen( (char const *)mCmdParam.Open.mPathName ); /* 計算文件名長度,以處理文件名結(jié)束符 */ mCmdParam.Open.mPathName[ i ] = searchFileIndex; /* 根據(jù)字符串長度將結(jié)束符替換為搜索的序號,從0到255 */ printf("\r\n%s\r\n", mCmdParam.Open.mPathName); ch375Result = CH375FileEnumer( ); /* 打開文件,如果文件名中含有通配符*,則為搜索文件而不打開 */ OS_EXIT_CRITICAL(); if ( ch375Result == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已經(jīng)沒有匹配的文件名 */ if ( ch375Result == ERR_SUCCESS ) /* 搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中 */ { OS_ENTER_CRITICAL(); nameLen = strlen( (char const *)mCmdParam.Open.mPathName ); if(nameLen < 4) continue; pExt = ((char *)mCmdParam.Open.mPathName) + nameLen - 4; OS_EXIT_CRITICAL(); if(strcmp(pExt, (char *)".MP3") == 0 || strcmp(pExt, (char *)".WMA") == 0) { if(usb_scan_play_flag == 0) { OS_ENTER_CRITICAL(); usb_total_song_num++; DROPDOWN_AddString(dropdown0_usb, (const char*)mCmdParam.Open.mPathName);//添加文件名至下拉菜單 OS_EXIT_CRITICAL(); } if(usb_scan_play_flag == 1) { OS_ENTER_CRITICAL(); usb_song_count_temp--; OS_EXIT_CRITICAL(); if(usb_song_count_temp == 0) { OS_ENTER_CRITICAL(); for(i = 0; i < 15; i++) { usb_name_buf[i] = mCmdParam.Open.mPathName[i]; } OS_EXIT_CRITICAL(); return 99; } } }

} else /* 出錯 */ { printf("\r\n%s\r\n", "讀取失敗"); //printf("\r\n%s\r\n", mCmdParam.Open.mPathName); //printf("\r\n%s\r\n", pCodeStr); printf("\r\nch375Result:%x\r\n", ch375Result); TEXT_SetText(text5_usb, "讀取失敗"); return 99; } } if(play_pause_flag == 1)//判斷播放暫停按鈕 { TEXT_SetText(text5_usb, "正在播放"); } else { TEXT_SetText(text5_usb, "讀取完畢"); } return 99; } }


亂碼是你打印的位置不對,您按照下面的方法試試: pCodeStr = "\\*"; /* CH375HFT.C文件不存在則列出\C51子目錄下的以CH375開頭的文件 */ printf( "List file %s\n", pCodeStr ); for ( c = 0; c < 254; c ++ ) { /* 最多搜索前254個文件 */ i = mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, pCodeStr ); /* 搜索文件名,*為通配符,適用于所有文件或者子目錄 */ /* 另外一種枚舉方法是,將此處的c置為0xFF,然后將真正的枚舉序號存放于CH375vFileSize中,從而可以搜索大于254個文件,從0到2147483647個 */ mCmdParam.Open.mPathName[ i ] = c; /* 根據(jù)字符串長度將結(jié)束符替換為搜索的序號,從0到254 */ i = CH375FileOpen( ); /* 打開文件,如果文件名中含有通配符*,則為搜索文件而不打開 */ if ( i == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已經(jīng)沒有匹配的文件名 */ if ( i == ERR_FOUND_NAME ) { /* 搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中 */ printf( " match file %03d#: %s\n", (unsigned int)c, mCmdParam.Open.mPathName ); /* 顯示序號和搜索到的匹配文件名或者子目錄名 */ continue; /* 繼續(xù)搜索下一個匹配的文件名,下次搜索時序號會加1 */ } else { /* 出錯 */ mStopIfError( i ); break; } }


萬工,時序?qū)幔?/p>


不是給你回過郵件了么?沒收到?


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频