WCH沁恒单片机
直播中

123

10年用户 826经验值
擅长:可编程逻辑
私信 关注
[问答]

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_DISKEXAM1 + 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: %02dn", (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);  //显示读出的字符
        }
        if(mCmdParam.ByteRead.mByteCount < len)   //实际读出的字符数少于要求读出的字符数,说明已经到文件的结尾
        {
            printf("n文件已经结束n");
            break;
        }
k += len;
    }
    printf("nVerify: ");
    printf(buf);
    return TotalCount;
}
为何?




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

回帖(1)

张一珠

2022-5-12 15:38:37
U盘文件系统库以子程序库的形式提供使用,文件系统库的使用可以参考U_DISK下各个EXAM
举报

更多回帖

发帖
×
20
完善资料,
赚取积分