我用CH375向优盘写二进制数据,写64个,可优盘里只有58个,不知怎么回事,请指教 代码如下:(由于二进制,不能以0为字符串结束) temp=0; while( 1 ) { // 分多次写入文件数据 for ( i=0; i { mCmdParam.ByteWrite.mByteBuffer[i]=TWIAccessBuffer[temp]; temp++; if(temp>=64) break;// 源字符串结束,完成写文件 } if(temp>=64) break; // 源字符串结束,完成写文件 mCmdParam.ByteWrite.mByteCount = i; // 写入数据的字符数,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后写 i = CH375ByteWrite( ); // 向文件写入数据 mStopIfError( i ); } } mCmdParam.Close.mUpdateLen = 1; // 自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 i = CH375FileClose( ); mStopIfError( i );
你看一下,MAX_BYTE_IO应该定义成了默认长度为29,这样的话你当然才写了58个字节了。
你看了你丢了哪几个数据吗?你的MAX_BYTE_IO是多少?
MAX_BYTE_IO=29的话,传送两次temp才等于58,应该还继续传送呀
请问楼上在哪里可以修改MAX_BYTE_IO的设置,头文件找不到呀
是丢了后面六个
你用这段程序试下看可以不可以? while(temp){ if(temp>=MAX_BYTE_IO){ for(i=0;i!=MAX_BYTE_IO;i++){ mCmdParam.ByteWrite.mByteBuffer=*p; /* 将二制制数据格式为一行字符串 */ p++; } mCmdParam.ByteWrite.mByteCount = MAX_BYTE_IO; /* 指定本次写入的字节数,不能超过MAX_BYTE_IO,否则另用缓冲区分多次写入 */ i = CH375ByteWrite( ); /* 以字节为单位向文件写入数据,单次读写的长度不能超过MAX_BYTE_IO */ temp-=MAX_BYTE_IO; mStopIfError( i ); } else { for(i=0;i!=temp;i++){ mCmdParam.ByteWrite.mByteBuffer=*p; /* 将二制制数据格式为一行字符串 */ p++; } mCmdParam.ByteWrite.mByteCount = temp; /* 指定本次写入的字节数,不能超过MAX_BYTE_IO,否则另用缓冲区分多次写入 */ i = CH375ByteWrite( ); /* 以字节为单位向文件写入数据,单次读写的长度不能超过MAX_BYTE_IO */ mStopIfError( i ); temp=0; } /* 有些U盘可能会要求在写数据后等待一会才能继续操作,所以,如果在某些U盘中发生数据丢失现象,建议在每次写入数据后稍作延时再继续 */ }
好用,谢谢
请问,(1)temp代表什么意思啊?(2)哪里可以修改MAX_BYTE_IO的设置 qq20271055
还有我要#include <什么。h> 才有mCmdParam.ByteWrite.mByteCount 这个结构啊
不知道我看得对不对: 1)temp是等待转换的数据个数,*p是指向单片机中存储DATA_buf的地址, 2)mCmdParam.ByteWrite.mByteBuffer=*p 是将单片机中的这个地址的内容变成binary形式存在u盘的file_data_buf中
temp代表你要传送的数据的长度,MAX_BYTE_IO在头文件CH375HF?.H中有默认的定义,你要修改的话可以在程序的前面重新进行定义就可以了。
mCmdParam.ByteWrite.mByteCount 这个结构在头文件CH375HF?.H中有定义,因此你得包含头文件:#include 。
1,temp代表的是要写进去数据的长度,p是TWIAccessBuffer的地址,也就是你存放数据的首地址。 2,mCmdParam.ByteWrite.mByteBuffer=*p是将你要写的数据放到往U盘写数据的缓冲区里面,实际在调用我们库的时候,往U盘里面写的数据实际上是mCmdParam.ByteWrite.mByteBuffer缓冲区的数据,至于什么数据形式,可以随便自己定义