現(xiàn)在有一個(gè)項(xiàng)目想用CH374T做主機(jī)去寫U盤,控制器用的LPC2294,調(diào)試程序是在你們公司網(wǎng)上下的CH374LIB里面的ARM32/LIB9/EXAM1.現(xiàn)在讀寫U盤正常,如果在U盤根目錄下建一個(gè)TXT文檔,能讀能寫,而且在電腦XP下打開U盤可以刪除,但是如果先建一個(gè)文件夾YEAR2004然后在YEAR2004下建DEMO2004.TXT時(shí),數(shù)據(jù)能寫到DEMO2004.TXT,有時(shí)數(shù)據(jù)會(huì)整體后移512個(gè)字節(jié),前面全是0,但寫到里面的數(shù)據(jù)都是正確的,但建的文件夾YEAR2004在電腦XP下打開U盤無法刪除,我的U盤容量是2G,但YEAR2004顯示是7G而且無法刪除掉,不知是何原因,請(qǐng)指點(diǎn),
你新建的文件夾程序是你自己寫的還是使用我們的程序,按照正常的操作的話是不應(yīng)該出現(xiàn)這個(gè)問題的
你寫的方法不對(duì),把程序貼出來看看.文件大小不對(duì)很有可能是您關(guān)閉文件時(shí)出現(xiàn)的問題.
我是自已建的文件夾,在根目錄下先建了個(gè)YEAR2004,然后再建文件DEMO2004.TXT,向里面寫1K的數(shù)據(jù),我沒有用自動(dòng)更新文件大小,現(xiàn)在就是向文件里面寫的內(nèi)容是正確的,就是建的文件夾在XP下無法刪,不是何原因, 我把這個(gè)CreateDirectory( )子程序里面部分內(nèi)容改了下: PUINT8 DirXramBuf; UINT8 code *DirConstData;
DirConstData = ". \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0.. \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0"; for ( i = 0x40; i != 0; i -- ) { /* 目錄的保留單元,分別指向自身和上級(jí)目錄 */ *DirXramBuf = *DirConstData; DirXramBuf ++; DirConstData ++; }
以上CreateDirectory( )原內(nèi)容,但在ADS里面不能通過編譯,說是賦值類型不同,如果把DirConstData = ". \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0.. \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0"; 改成DirConstData =0時(shí)能通過編譯,我現(xiàn)在懷疑是我把這段程序改后的原因,但如果改賦值為0不通編譯過,DirConstData = ". \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0.. \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0";這一句賦值是什么意思呢,請(qǐng)指點(diǎn)
以下是我利用CreateDirectory(()子程序建的文件夾及部分程序內(nèi)容: strcpy( mCmdParam.Create.mPathName, "/YEAR2004" ); /* 目錄名,該目錄建在根目錄下 */ i = CreateDirectory( ); /* 新建或者打開目錄 */ mStopIfError( i );
strcpy( mCmdParam.Create.mPathName, "/YEAR2004/DEMO2004.TXT" ); /* 文件名 */ i = CH374FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); mCmdParam.WriteX.mSectorCount = SecCount; /* 寫入所有扇區(qū)的數(shù)據(jù) */ mCmdParam.WriteX.mDataBuffer = &my_buffer[0]; /* 指向文件數(shù)據(jù)緩沖區(qū)的起始地址 */ i = CH374FileWriteX( ); /* 向文件寫入數(shù)據(jù) */ mStopIfError( i );
mCmdParam.Modify.mFileAttr = 0xff; /* 輸入?yún)?shù): 新的文件屬性,為0FFH則不修改 */ mCmdParam.Modify.mFileTime = 0xffff; /* 輸入?yún)?shù): 新的文件時(shí)間,為0FFFFH則不修改,使用新建文件產(chǎn)生的默認(rèn)時(shí)間 */ mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2004, 5, 18 ); /* 輸入?yún)?shù): 新的文件日期: 2004.05.18 */ mCmdParam.Modify.mFileSize = 1024;
i = CH374FileModify( ); /* 修改當(dāng)前文件的信息,修改日期和長度 */ mStopIfError( i ); mCmdParam.Close.mUpdateLen = 0; /* 不要自動(dòng)計(jì)算文件長度,如果自動(dòng)計(jì)算,那么該長度總是CH374vSectorSize的倍數(shù) */ i = CH374FileClose( ); mStopIfError( i );
上述問題已解決,多謝了,現(xiàn)在出現(xiàn)這一種現(xiàn)象,文件建好后,再建一個(gè)TXT文件,向TXT文件寫數(shù)據(jù),但TXT文件里面前512個(gè)字節(jié)沒有數(shù)據(jù),全是0,也就是數(shù)據(jù)身后512個(gè)字節(jié)才開始寫數(shù)據(jù)到TXT里面,如果不建文件夾,直接建一個(gè)TXT文件沒有這種現(xiàn)象,請(qǐng)指點(diǎn).謝謝
TXT文件創(chuàng)建成功后,試試只寫一個(gè)扇區(qū)的數(shù)據(jù),看看能否成功,另,寫數(shù)據(jù)的流程是怎樣的?
已搞定,謝謝呀,主要是ADS和KEIL編譯軟件不同,如:在KEIL里面認(rèn)為UNSIGNED?。茫龋粒叶x字符串指針是正確的,但在ADS里面這樣定義認(rèn)為是錯(cuò)的,