U盤數(shù)據(jù):
*S*
00000000000
11111111111
22222222222
33333333333
44444444444
55555555555
66666666666
77777777777
88888888888
99999999999
AAAAAAAAA
BBBBBBBBBB
CCCCCCCCC
DDDDDDDD
EEEEEEEEEEE
FFFFFFFFFFF
*E*
用例程U_DISK\EXAM1 + UFX庫讀取,每次64個(gè)字節(jié),第一次和第二次正確,第三次數(shù)據(jù)錯(cuò)誤,為何?
第一次:
Read Bytes Amount: 64
*S*
00000000000
11111111111
22222222222
33333333333
4444444
第二次:
4444
55555555555
66666666666
77777777777
88888888888
999999
第三次:
USBC9
ADDDDDDDD
EEEEEEEEEEE
UINT8 USBGetData(PUINT8 buf)
{
? ? UINT8 s, i, k, len;? //每次讀n個(gè)字節(jié)
? ? UINT8 TotalCount = fieldlen;
? ? memset(buf, 0, sizeof(buf));
k = 0;
? ? printf("Read Bytes Amount: %02d\n", (UINT16)TotalCount);
? ? while(TotalCount)? ? ? ? ? ? ? ? ? ? ? ?//如果文件比較大,一次讀不完,可以再調(diào)用CH559ByteRead繼續(xù)讀取,文件指針自動(dòng)向后移動(dòng)
? ? {
? ? ? ? if(TotalCount > (MAX_PATH_LEN - 1))
? ? ? ? {
? ? ? ? ? ? len = MAX_PATH_LEN - 1;? ? ? ? ? ?//剩余數(shù)據(jù)較多,限制單次讀寫的長度不能超過 sizeof( mCmdParam.Other.mBuffer )
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? len = TotalCount;? ? ? ? ? ? ? ? ?//最后剩余的字節(jié)數(shù)
? ? ? ? }
? ? ? ? mCmdParam.ByteRead.mByteCount = len;? //請(qǐng)求讀出幾十字節(jié)數(shù)據(jù)
? ? ? ? mCmdParam.ByteRead.mByteBuffer = &buf[k];
? ? ? ? s = CH559ByteRead();? ?? //以字節(jié)為單位讀取數(shù)據(jù)塊,單次讀寫的長度不能超過MAX_BYTE_IO,第二次調(diào)用時(shí)接著剛才的向后讀
? ? ? ? TotalCount -= mCmdParam.ByteRead.mByteCount;? ? ? //計(jì)數(shù),減去當(dāng)前實(shí)際已經(jīng)讀出的字符數(shù)
? ? ? ? for(i = 0; i != mCmdParam.ByteRead.mByteCount; i++)
? ? ? ? {
? ? ? ? ? ? printf("%C", mCmdParam.ByteRead.mByteBuffer[i]);? //顯示讀出的字符
? ? ? ? }
? ? ? ? if(mCmdParam.ByteRead.mByteCount < len)? ?//實(shí)際讀出的字符數(shù)少于要求讀出的字符數(shù),說明已經(jīng)到文件的結(jié)尾
? ? ? ? {
? ? ? ? ? ? printf("\n文件已經(jīng)結(jié)束\n");
? ? ? ? ? ? break;
? ? ? ? }
k += len;
? ? }
? ? printf("\nVerify: ");
? ? printf(buf);
? ? return TotalCount;
}
為何?