UFX+U_DISK\EXAM1读U盘出错

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;

}

为何?



就是连续调用三次这个函数,然后第三次数据读出来是错误的,不知道原因在哪里?请教。。。


可以参考这个帖子中的说明

http://www.wch.cn/bbs/thread-87440-1.html


只有登录才能回复,可以选择微信账号登录