U盘数据:
*S*
00000000000
11111111111
22222222222
33333333333
44444444444
55555555555
66666666666
77777777777
88888888888
99999999999
AAAAAAAAA
BBBBBBBBBB
CCCCCCCCC
DDDDDDDD
EEEEEEEEEEE
FFFFFFFFFFF
*E*
用例程U_DISK\EXAM1 + UFX库读取,每次64个字节,第一次和第二次正确,第三次数据错误,为何?
第一次:
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个字节
UINT8 TotalCount = fieldlen;
memset(buf, 0, sizeof(buf));
k = 0;
printf("Read Bytes Amount: %02d\n", (UINT16)TotalCount);
while(TotalCount) //如果文件比较大,一次读不完,可以再调用CH559ByteRead继续读取,文件指针自动向后移动
{
if(TotalCount > (MAX_PATH_LEN - 1))
{
len = MAX_PATH_LEN - 1; //剩余数据较多,限制单次读写的长度不能超过 sizeof( mCmdParam.Other.mBuffer )
}
else
{
len = TotalCount; //最后剩余的字节数
}
mCmdParam.ByteRead.mByteCount = len; //请求读出几十字节数据
mCmdParam.ByteRead.mByteBuffer = &buf[k];
s = CH559ByteRead(); //以字节为单位读取数据块,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后读
TotalCount -= mCmdParam.ByteRead.mByteCount; //计数,减去当前实际已经读出的字符数
for(i = 0; i != mCmdParam.ByteRead.mByteCount; i++)
{
printf("%C", mCmdParam.ByteRead.mByteBuffer[i]); //显示读出的字符
}
if(mCmdParam.ByteRead.mByteCount < len) //实际读出的字符数少于要求读出的字符数,说明已经到文件的结尾
{
printf("\n文件已经结束\n");
break;
}
k += len;
}
printf("\nVerify: ");
printf(buf);
return TotalCount;
}
为何?