//部分代码如下:
/*以下为从U盘读数据发送到 串口部分 */
#define MAX_BYTE_IO 6 /* 以字节为单位单次读写文件时的最大长度,默认值是29,值大则占用内存多,值小则超过该长度必须分多次读写 */
.....
printf( "Open and read : \n" );
strcpy( mCmdParam.Open.mPathName, "/C51/MY_ADC.TXT" ); /* 文件名,该文件在目录下 */
i = CH375FileOpen( ); /* 打开文件 */
if ( i == ERR_MISS_DIR || i == ERR_MISS_FILE ) { /* 没有找到文件 */
......
}
else if ( i == ERR_SUCCESS ) /* 找到文件 */
{
mCmdParam.ByteLocate.mByteOffset = 0x00000030; /* 移到文件的指定位置 */
i = CH375ByteLocate( );
mStopIfError( i );
i = CH375ByteRead( );
mStopIfError( z );
mDelay100mS();
TotalCount=600; /* 自己定义的读600字节 */
while ( TotalCount ) {
if ( TotalCount > MAX_BYTE_IO )
c = MAX_BYTE_IO; /* 剩余数据较多,限制单次读写的长度不能超过 sizeof( mCmdParam.ByteRead.mByteBuffer ) */
else c = TotalCount; /* 最后剩余的字节数 */
mCmdParam.ByteRead.mByteCount = c; /* 请求读出几十字节数据 */
i = CH375ByteRead( ); /* 以字节为单位读取数据块,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后读 */
TotalCount -= mCmdParam.ByteRead.mByteCount;
for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ )
{printf( "%c", mCmdParam.ByteRead.mByteBuffer ); }
......
}
}
MY_ADC.TXT文本文件内容如下:
0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x25, 0xb1, 0xb1, 0x10, 0x01, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xd8, 0xcf, 0xc2, 0xa3, 0xb1, 0xb3,
0xac, 0xca, 0xd0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xca, 0x25, 0x01,
0x01, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5,
0xd8, 0xcf, 0xc2, 0xa3, 0xb1, 0xb3, 0xac, 0xca, 0xd0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
0xa1, 0xa1, 0xa1, 0xcb, 0x25, 0x01, 0x01, 0x10, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xd8, 0xcf, 0xc2, 0xa3, 0xb1, 0xb3, 0xac, 0xca, 0xd0, 0xa1,
......
//如上所示:用上边的代码读文本文件的内容都能读出来,可是在加入以下代码之后 就只能读出前38个数据了,再往后读出来的就是错误了
//代码部分
把for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) 的循环的内容修改如下:
for( i=0;i
{
ch = mCmdParam.ByteRead.mByteBuffer;
switch(ch)
{ case 'x':
{ next1=mCmdParam.ByteRead.mByteBuffer[i+1];
next2=mCmdParam.ByteRead.mByteBuffer[i+2];
if((next1>=0x30)&&(next1<=0x39))
{ next1=next1-0x30; }
else if((next1>=0x61)&&(next1<=0x66))
{ next1=next1-0x61+10; }
else printf("error1");
if((next2>=0x30)&&(next2<=0x39))
{ next2=next2-0x30; }
else if((next2>=0x61)&&(next2<=0x66))
{ next2=next2-0x61+10; }
else
printf("error2");
bao[datalen]= next1*16 + next2;
datalen++;
count++;
} break;
default:
break;
}
}
if(count%38==0)
{ for(i=0;i
{
printf("%c",bao); /* 循环输出当前包中的数据 */
}
datalen=0;
count=0;
}
加上述代码的目的 :是为了实现每读取到38个数据(类似这样的0x25 酸一个数据)的时候,就把这38个数据通过串口发出去;
思路:每取出6个字节之后,检测只要遇到X,就把X后的两位输出
问题
1:应用上边的代码只能读出前38个数据,再往后读出来的就是错误了,请问如何解决?
2. 用375能读写二进制文件吗?操作二进制文件和操作文本文件在编程上有何区别?
麻烦各位帮俺 看看 ,谢谢