調(diào)用CH375的程序庫問題

應(yīng)該是mCmdParam.ReadX.mSectorCount = 1;是想讀一個扇區(qū) CH375FileReadX()之前要指定緩沖區(qū)的話,是不是還要定義個新的緩沖區(qū)(至少512個字節(jié)) 那與DISK_BASE_BUF加起來系統(tǒng)是不是至少要1K的RAM


1.建議你直接調(diào)用CH375FileRead(),CH375FileWrite()函數(shù)就可以了,使用CH375FileReadX(),CH375FileWriteX()函數(shù)之前需要指定數(shù)據(jù)緩沖區(qū)的地址. mCmdParam.ReadX.mSectorCount = SectorCount; mCmdParam.ReadX.mDataBuffer = &My_Dat_Buf[ 0 ]; i = CH375FileReadX( ); mStopifError(i); 2.網(wǎng)站中的例子程序中都會有函數(shù)注釋,有這兩個函數(shù)使用時的注意事項,建議在寫代碼前好好閱讀提供的示例程序.另外,你需要仔細(xì)看看CH375HF.PDF,里面提供的庫函數(shù)的說明. 3.磁盤緩沖區(qū)是不可以省的,你可以將文件緩沖區(qū)與磁盤緩沖區(qū)共用.雖然這樣可以省一些RAM,但是操作文件的速度會慢點,對磁盤緩沖區(qū)的處理也需要注意.你可以看看CH375LIB\MCS51\FILELIB4\EXAM3,這個示例程序


可以和DISK_BASE_BUF共用,但速度就要慢許多,流程上也復(fù)雜一些,參考EXAM3


照著EXAM3樣子做了一下 CH375FileRead()成功后,DISK_BASE_BUF和FILE_DATA_BUF中內(nèi)容一樣,但都不是我U盤中的文件里的內(nèi)容


流程與EXAM3完全一樣么?估計還是你的流程有問題,把打開文件后,讀數(shù)據(jù)部分的程序貼出來


一開始定義: #define LIB_CFG_DISK_IO 2 #define LIB_CFG_FILE_IO 2 #define LIB_CFG_INT_EN 0

#define CH375_CMD_PORT_ADDR 0xFFFF /* CH375命令端口的I/O地址 */ #define CH375_DAT_PORT_ADDR 0xFEFF /* CH375數(shù)據(jù)端口的I/O地址 */ #define DISK_BASE_BUF_ADDR 0x0000 #define FILE_DATA_BUF_ADDR 0x0000 #define FILE_DATA_BUF_LEN 0x0200 #define CH375_INT_WIRE INT0 #include "CH375HF6.H" ...................

CH375FileRead()成功后

mCmdParam.Read.mSectorCount = 1; i=CH375FileRead();

就這兩句 i能成功返回ERR_SUCCESS 但是讀到的數(shù)據(jù)不知道在哪里?DISK_BASE_BUF和FILE_DATA_BUF中都不是

另外: 字節(jié)讀寫都已經(jīng)成功實現(xiàn)數(shù)據(jù)讀寫[啟用函數(shù) CH375ByteRead() CH375ByteWrite()]


你按扇區(qū)方式讀文件的時候,你的文件長度是多少,如果總的文件長度小于一個扇區(qū)的大小,必須將文件大小CH375vFileSize+511,然后在讀取數(shù)據(jù),否則讀不出來


(1)LIB_CFG_DISK_IO 2,LIB_CFG_FILE_IO 2配置的是雙DPTR的復(fù)制方式,檢查單片機(jī)是否支持雙DPTR (2)讀出的數(shù)據(jù)自然實在文件緩沖區(qū)FILE_DAT_BUF中. (3)建議你在實驗之前先使用例程去實驗,調(diào)試成功后就可以在例程的基礎(chǔ)上修改成你所需要的方式. (4)將你的程序代碼打包發(fā)送上來,這種磁盤緩沖區(qū)和文件緩沖區(qū)共用的示例程序肯定是可以的,所以很有可能是你的程序流程上有問題.


_study_ 說的對,文件大小不足一扇區(qū),CH375vFileSize = CH375vFileSize+511;可以了

看來還是忽略了文檔中的“文件尾部不足一個扇區(qū)的零碎數(shù)據(jù)部分將被忽略,如果必須讀出文件尾部不足一個扇區(qū)的零碎數(shù)據(jù),那么可以臨時增大CH375vFileSize 以讀出最后一個扇區(qū)(實際有效數(shù)據(jù)不足一個扇區(qū)),然后再恢復(fù)原CH375vFileSize,注意此時的文件指針已經(jīng)無效”

文件本身不足一個扇區(qū),也一樣


還有幾個問題幫忙解釋一下

1.DISK_BASE_BUF中是什么信息?DISK_BASE_BUF和FILE_DATA_BUF共用地址的話,本來DISK_BASE_BUF中的信息就不能查詢到了? 2.如果寫入數(shù)據(jù)時,保留原來內(nèi)容,向其添加內(nèi)容。(例如原文件中有10個字節(jié)的數(shù)據(jù)) 那此時 mCmdParam.Write.mSectorCount = 1; i=CH375FileWrite(); 實際上是不是要寫2個扇區(qū)? 3.如果在寫比較多的數(shù)據(jù)進(jìn)入文件時,會發(fā)生磁盤已滿。應(yīng)該如何查詢?


DISK_BASE_BUF是用來分析文件系統(tǒng)的。共用地址的話,庫先把空閑簇找到就可以了,就再也不用查找空閑簇。然后一次性寫入。 磁盤已滿會返回相應(yīng)的錯誤代碼??臻g不夠。 不足一扇區(qū)的話追加數(shù)據(jù)比較麻煩,要先把不足整扇區(qū)的部分的讀到緩沖區(qū)的前部,然后偏移到整扇區(qū)的地方,再寫入就可以了


“不足一扇區(qū)的話追加數(shù)據(jù)比較麻煩,要先把不足整扇區(qū)的部分的讀到緩沖區(qū)的前部,然后偏移到整扇區(qū)的地方,再寫入就可以了” 您是說這個動作由應(yīng)用程序來完成,而不是由庫中的程序完成?


由用戶自己完成,用戶根據(jù)文件長度判斷,實際的文件長度是多少,自行調(diào)整


字節(jié)方式讀寫都成功

扇區(qū)方式讀成功,寫有問題

#define DISK_BASE_BUF_ADDR 0x0000 #define FILE_DATA_BUF_ADDR 0x0000 #define FILE_DATA_BUF_LEN 0x0200

問題: 1.CH375FileCreate()后,就將文件關(guān)閉,發(fā)現(xiàn)創(chuàng)建的文件大小為1字節(jié)?正常否? 2.根目錄下創(chuàng)建一個名為“MY.TXT”的文件,寫入“12345”這5個數(shù)字。從電腦里看的時候,文件名變成“12345”,沒有擴(kuò)展名 程序如下: mCopyCodeStringToIRAM(mCmdParam.Create.mPathName,"/MY.TXT"); i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); for(j=0;j<512;j++) FILE_DATA_BUF[ j ] = 0; for(i=0;i<5;i++) FILE_DATA_BUF[ i ] = i+1+0x30; mCmdParam.Write.mSectorCount = 1; i = CH375FileWrite(); mStopIfError( i ); mCmdParam.Modify.mFileSize = 5 mCmdParam.Modify.mFileAttr = 0xff; mCmdParam.Modify.mFileTime = 0xffff; mCmdParam.Modify.mFileDate = 0xffff; i = CH375FileModify( ); mStopIfError( i ); mCmdParam.Close.mUpdateLen = 0; i = CH375FileClose(); mStopIfError( i );


1、庫創(chuàng)建一個新文件,不寫入新的數(shù)據(jù),那么文件長度默認(rèn)為1B 2、創(chuàng)建文件之后,寫文件之前,需要用調(diào)用CH375DirtyBuffer,對于磁盤緩沖區(qū)和數(shù)據(jù)緩沖區(qū)共用,你看一下EXAM3是怎么做的


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

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