求助

請問程序運行 CH375DiskReady( ) 或者 CH375FileOpen( ) 時,卡在頭文件中 xQueryInterrupt( ) 的 while ( CH375_INT_WIRE ) 命令行,是什么原因?應該如何解決啊?

那你測下USB口電壓是多少,UD+,UD-可串電阻了,程序執(zhí)行到這里時CH375的中斷腳有沒有變低,中斷腳有沒有定義.


USB口電壓為 4.963V,插上 U 盤后,電壓為 4.961V, UD+,UD-串接了3歐左右的電阻,中斷引腳定義為 #define CH375_INT_WIRE PTH_PTH1 ,我想程序執(zhí)行到這里時CH375的中斷腳可能沒有變低,不然程序不會卡在 while ( CH375_INT_WIRE ) 命令行,檢測不到中斷信號.


我將單片機復位之后,運行程序,插上 U 盤,程序就卡在 CH375FileOpen( ) 中的 while ( CH375_INT_WIRE ) 命令行. 如果我不拔除 U 盤,復位單片機后再運行程序,程序就卡在 CH375DiskReady( ) 中的 while ( CH375_INT_WIRE ) 命令行. 請問是何原因?


用的是什么單片機,單片機的RAM是多少,將UD+,UD-的電阻去掉看有沒有這種情況.


我使用的是 MC9S12D64 單片機,該單片機有 64K Flash EEPROM,1K byte EEPROM,4K byte RAM. 我去掉 UD+,UD- 上的電阻后,問題仍然存在. 并且,有些 U 盤在運行 CH375LibInit( ),CH375DiskConnect( ),CH375DiskReady( ),CH375DiskSize( ) 時,工作正常,返回值也正確.但是運行 CH375FileOpen( ) 時,程序跑飛! 請問是何原因?


磁盤緩沖區(qū)配置是正確?


磁盤緩沖區(qū)配置如下: #define DISK_BASE_BUF_ADDR 0x0A00 #define FILE_DATA_BUF_ADDR 0x0C00 #define FILE_DATA_BUF_LEN 0x0400 定義在 4K byte RAM 內. 但是,我發(fā)現一個問題,51單片機的參考程序中有一段這樣的程序: UINT8 mCopyCodeStringToIRAM( UINT8 idata *iDestination, UINT8 code *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); } 該函數中定義的 idata 和 code 的變量類型,以及在主函數中定義的 UINT8 code *pCodeStr 在51系列單片機的 Keil 51 編譯環(huán)境下可以識別和編譯通過,但是,我使用的是 MOTO 公司的 MC9S12D64 單片機和 Metrowerks CodeWarrior 編譯軟件,在此環(huán)境中,編譯軟件不識別 idata 和 code 的變量類型! 之前,我只是簡單的去掉了 idata 和 code 特征符,但是 CH375FileOpen( ) 和 CH375FileCreate( ) 函數運行時,不是程序跑飛就是返回錯誤代碼 0x1F,再不就是卡在 xQueryInterrupt( void ) 中的 while ( CH375_INT_WIRE ) 命令行. 請問應該如何改寫或者替代上述函數,或著函數中的 idata 和 code 類型變量? 謝謝!


對不起!之前由于編譯軟件有文件破損,導致程序跑飛! 現在使用 CH375FileOpen( ) 查詢時,返回 0x43 ,但是,調用 CH375FileCreate( ) 時,返回 0xFF !(狀態(tài)參數 CH375DiskStatus = 0x13,CH375IntStatus = 0x14) 我的主程序編寫如下: void main( ) { UINT8 i,c,j,SecCount; UINT8 *pCodeStr; UINT16 EnumCount; CH375_PORT_INIT( ); LED_OUT_INIT( ); LED_OUT_ACT( ); // 開機后LED亮一下以示工作 mDelaymS( 200 ); LED_OUT_INACT( ); mDelaymS( 200 ); m=TEST_CH375_PORT( ); n = CH375LibInit( ); // 初始化CH375程序庫和CH375芯片,操作成功返回0 mStopIfError( n );

while ( 1 ) { while ( CH375DiskStatus < DISK_CONNECT ) { // 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 CH375DiskConnect( ); mDelaymS( 100 ); } for ( i = 0; i < 100; i ++ ) { // 最長等待時間,100*50mS mDelaymS( 50 ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; // 查詢磁盤是否準備好 / if ( CH375DiskStatus < DISK_CONNECT ) break; // 檢測到斷開,重新檢測并計時 if ( CH375DiskStatus >= DISK_MOUNTED && i > 5 ) break; // 有的U盤總是返回未準備好,不過可以忽略,只要其建立連接MOUNTED且嘗試5*50mS } p = CH375DiskSize( ); mStopIfError( p );

pCodeStr = "\\*"; for ( EnumCount = 0; EnumCount < 10; EnumCount ++ ) { // 最多搜索前10個文件 i = mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, pCodeStr ); // 搜索文件名,*為通配符 mCmdParam.Open.mPathName[ i ] = 0xFF; // 根據字符串長度將結束符替換為搜索的序號,從0到254,如果是0xFF即255則說明搜索序號在CH375vFileSize變量中 CH375vFileSize = EnumCount; // 指定搜索/枚舉的序號 q = CH375FileOpen( ); //打開文件,如果文件名中含有通配符*,則為搜索文件而不打開 if ( q == ERR_MISS_FILE ) break; //再也搜索不到匹配的文件,已經沒有匹配的文件名 else if ( q == ERR_FOUND_NAME ) { //搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中 continue; //繼續(xù)搜索下一個匹配的文件名,下次搜索時序號會加1 } else { //出錯 mStopIfError( q ); break; }

mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "\\NEWFILE.TXT" ); // 新文件名,在根目錄下 r = CH375FileCreate( ); // 新建文件并打開,如果文件已經存在則先刪除后再新建 mStopIfError( r ); }

if ( SafeRemoveDisk( ) == USB_INT_SUCCESS ) { // 安全移除U盤 LED_OUT_ACT( ); } while ( CH375DiskStatus >= DISK_CONNECT ) { // 查詢CH375中斷并更新中斷狀態(tài),等待U盤拔出 CH375DiskConnect( ); mDelaymS( 100 ); } }

} 請問是何原因導致可以搜索目錄文件,卻不能創(chuàng)建文件?


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

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