我用CH375向優(yōu)盤寫二進制數(shù)據(jù),寫64個,可優(yōu)盤里只有58個,不知怎么回事,請指教 代碼如下:(由于二進制,不能以0為字符串結(jié)束) temp=0; while( 1 ) { // 分多次寫入文件數(shù)據(jù) for ( i=0; i { mCmdParam.ByteWrite.mByteBuffer[i]=TWIAccessBuffer[temp]; temp++; if(temp>=64) break;// 源字符串結(jié)束,完成寫文件 } if(temp>=64) break; // 源字符串結(jié)束,完成寫文件 mCmdParam.ByteWrite.mByteCount = i; // 寫入數(shù)據(jù)的字符數(shù),單次讀寫的長度不能超過MAX_BYTE_IO,第二次調(diào)用時接著剛才的向后寫 i = CH375ByteWrite( ); // 向文件寫入數(shù)據(jù) mStopIfError( i ); } } mCmdParam.Close.mUpdateLen = 1; // 自動計算文件長度,以字節(jié)為單位寫文件,建議讓程序庫關(guān)閉文件以便自動更新文件長度 i = CH375FileClose( ); mStopIfError( i );
你看一下,MAX_BYTE_IO應(yīng)該定義成了默認長度為29,這樣的話你當(dāng)然才寫了58個字節(jié)了。
你看了你丟了哪幾個數(shù)據(jù)嗎?你的MAX_BYTE_IO是多少?
MAX_BYTE_IO=29的話,傳送兩次temp才等于58,應(yīng)該還繼續(xù)傳送呀
請問樓上在哪里可以修改MAX_BYTE_IO的設(shè)置,頭文件找不到呀
是丟了后面六個
你用這段程序試下看可以不可以? while(temp){ if(temp>=MAX_BYTE_IO){ for(i=0;i!=MAX_BYTE_IO;i++){ mCmdParam.ByteWrite.mByteBuffer=*p; /* 將二制制數(shù)據(jù)格式為一行字符串 */ p++; } mCmdParam.ByteWrite.mByteCount = MAX_BYTE_IO; /* 指定本次寫入的字節(jié)數(shù),不能超過MAX_BYTE_IO,否則另用緩沖區(qū)分多次寫入 */ i = CH375ByteWrite( ); /* 以字節(jié)為單位向文件寫入數(shù)據(jù),單次讀寫的長度不能超過MAX_BYTE_IO */ temp-=MAX_BYTE_IO; mStopIfError( i ); } else { for(i=0;i!=temp;i++){ mCmdParam.ByteWrite.mByteBuffer=*p; /* 將二制制數(shù)據(jù)格式為一行字符串 */ p++; } mCmdParam.ByteWrite.mByteCount = temp; /* 指定本次寫入的字節(jié)數(shù),不能超過MAX_BYTE_IO,否則另用緩沖區(qū)分多次寫入 */ i = CH375ByteWrite( ); /* 以字節(jié)為單位向文件寫入數(shù)據(jù),單次讀寫的長度不能超過MAX_BYTE_IO */ mStopIfError( i ); temp=0; } /* 有些U盤可能會要求在寫數(shù)據(jù)后等待一會才能繼續(xù)操作,所以,如果在某些U盤中發(fā)生數(shù)據(jù)丟失現(xiàn)象,建議在每次寫入數(shù)據(jù)后稍作延時再繼續(xù) */ }
好用,謝謝
請問,(1)temp代表什么意思???(2)哪里可以修改MAX_BYTE_IO的設(shè)置 qq20271055
還有我要#include <什么。h> 才有mCmdParam.ByteWrite.mByteCount 這個結(jié)構(gòu)啊
不知道我看得對不對: 1)temp是等待轉(zhuǎn)換的數(shù)據(jù)個數(shù),*p是指向單片機中存儲DATA_buf的地址, 2)mCmdParam.ByteWrite.mByteBuffer=*p 是將單片機中的這個地址的內(nèi)容變成binary形式存在u盤的file_data_buf中
temp代表你要傳送的數(shù)據(jù)的長度,MAX_BYTE_IO在頭文件CH375HF?.H中有默認的定義,你要修改的話可以在程序的前面重新進行定義就可以了。
mCmdParam.ByteWrite.mByteCount 這個結(jié)構(gòu)在頭文件CH375HF?.H中有定義,因此你得包含頭文件:#include 。
1,temp代表的是要寫進去數(shù)據(jù)的長度,p是TWIAccessBuffer的地址,也就是你存放數(shù)據(jù)的首地址。 2,mCmdParam.ByteWrite.mByteBuffer=*p是將你要寫的數(shù)據(jù)放到往U盤寫數(shù)據(jù)的緩沖區(qū)里面,實際在調(diào)用我們庫的時候,往U盤里面寫的數(shù)據(jù)實際上是mCmdParam.ByteWrite.mByteBuffer緩沖區(qū)的數(shù)據(jù),至于什么數(shù)據(jù)形式,可以隨便自己定義