完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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个回答
|
|
U盘文件系统库以子程序库的形式提供使用,文件系统库的使用可以参考U_DISK下各个EXAM
|
|
|
|
只有小组成员才能发言,加入小组>>
467 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2871 浏览 2 评论
2359 浏览 1 评论
810浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
635浏览 1评论
495浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
358浏览 1评论
632浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 07:41 , Processed in 0.986403 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号