我明白了,非常謝謝! 但是我用的是AVR32的單片機(jī),RAM緩沖區(qū)只有2K,還有辦法嗎?
我的RAM只有2K,緩沖區(qū)不夠用,還有辦法嗎?
只要速度滿足要求就可以了.緩沖區(qū)小那沒什么好辦法. 除非你外掛RAM.
還想請(qǐng)教一下樓上高手,我把CH375HF6移植到AVR上時(shí)有3個(gè)問題(用的GCC的編譯環(huán)境), 1)CH375HF6.LIB不知道怎么用 2)函數(shù)編譯時(shí)有錯(cuò),主要是 idata 和code沒有識(shí)別 UINT8 mCopyCodeStringToIRAM( UINT8 idata *iDestination, UINT8 code *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); }
3)CH375vFileSize += CH375vSectorSize - 1;這句話不知道什么意思?
CH375HF6.LIB是MSC51下面的庫當(dāng)然不可以用了 idata 和code也是KEIL下面的關(guān)鍵字,不同的編譯器肯定不識(shí)別. 到在線下載里下載CH375LIB.ZIP AVR\FILELIBD就是GCC下面的庫
1、我們的庫是根據(jù)不同的單片機(jī)及其編譯器編譯的,單片機(jī)不同,庫當(dāng)然不兼容,選庫時(shí),參看一下庫列表: \CH375LIB\DOC 2、“CH375vFileSize += CH375vSectorSize - 1”,例程里有注釋:默認(rèn)情況下,以扇區(qū)方式讀取數(shù)據(jù)時(shí),無法讀出文件尾部不足1個(gè)扇區(qū)的部分,所以必須臨時(shí)加大文件長(zhǎng)度以讀取尾部零頭
貴公司的講解太詳細(xì)了,我現(xiàn)在明白了省了很多工夫,非常謝謝。
多文件操作例程中CH375HFT.C mCmdParam.ReadX.mSectorCount = 2;//每一次讀2個(gè)扇區(qū) 結(jié)束判斷是 if(SecCount < 2)//實(shí)際讀到的扇區(qū)小于2 如果我想每次讀一個(gè)扇區(qū),那么我怎樣來判斷我讀到了文件結(jié)束??
不知道這樣判斷文件結(jié)束可以嗎???? mCmdParam.SaveVariable.mBuffer/* 輸入?yún)?shù): 緩沖區(qū)起始地址, 返回: 緩沖區(qū)當(dāng)前地址 */ 在 i = CH375FileReadX( ); mStopIfError( i ); 加上if((mCmdParam.SaveVariable.mBuffer-&FILE_DATA_BUF[ 0 ])<512) 是,則認(rèn)為到了文件結(jié)束。
if((mCmdParam.SaveVariable.mBuffer-&FILE_DATA_BUF[ 0 ])<512)是不可以的.沒有任何意義啊. 這兩個(gè)緩沖區(qū)根本就沒有什么關(guān)系. if(SecCount < 1)應(yīng)該就可以了.
mCmdParam.SaveVariable.mBuffer、&FILE_DATA_BUF[ 0 ]兩個(gè)地址相減總是一個(gè)常數(shù),與文件結(jié)束有什么關(guān)系呢!例程中判斷文件結(jié)束的思想:期望讀n個(gè)扇區(qū),實(shí)際讀取到扇區(qū)數(shù)據(jù)如果小于n,那么則表示結(jié)束,否則應(yīng)該還能讀取n個(gè)扇區(qū)。調(diào)用FileReadX之前,mCmdParam.ReadX.mSectorCount由用戶指定,調(diào)用FileReadX時(shí),庫根據(jù)實(shí)際讀取的扇區(qū)數(shù),重新給其賦值,即實(shí)際讀取到扇區(qū)數(shù)