奇怪的问题?

ytpen   2007-10-22 16:30 楼主
//部分代码如下:
/*以下为从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能读写二进制文件吗?操作二进制文件和操作文本文件在编程上有何区别?
麻烦各位帮俺 看看 ,谢谢

回复评论 (1)

人呢 ?
点赞  2007-10-23 08:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复