void CH375FileByteRead_320(UINT16 N_bit,UINT16 C_line) { static UINT8 i,ch; UINT16 k=0; UINT16 TotalCount,c; volatile uint16 *file_bit_buff_1;
file_bit_buff_1 = (volatile uint16 *)(ExSRAM_ADDR1); // strcpy( (char *)mCmdParam.Open.mPathName, "/NEWFILE.TXT" ); /* 文件名,该文件在C51子目录下 */ // strcpy( (char *)mCmdParam.Open.mPathName, "/NEWFILE.TXT" ); // i = CH375FileOpen( ); /* 打开文件 */ TotalCount = N_bit; /* 准备读取总长度 */ // MAX_BYTE_IO=32 // printf( "从文件中读出的前%d个字符是:\n",TotalCount ); // mCmdParam.ByteLocate.mByteOffset = 650*C_line; // 跳过文件的前324个字节开始读写,估计多出了换行。 CH375ByteLocate( ); while ( TotalCount ) { /* 如果文件比较大,一次读不完,可以再调用CH375ByteRead继续读取,文件指针自动向后移动 */ 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,第二次调用时接着刚才的向后读 */ mStopIfError( i ); TotalCount -= mCmdParam.ByteRead.mByteCount; /* 计数,减去当前实际已经读出的字符数 */ for ( i=0; i // printf( "%C", mCmdParam.ByteRead.mByteBuffer[i] ); /* 显示读出的字符 */ // file_bit_buff_1 [k++] = mCmdParam.ByteRead.mByteBuffer[i] ; //处理 { ch = (mCmdParam.ByteRead.mByteBuffer[i]) ; if((ch>='0')&&(ch<='9')) ch= ch-0x30; else if((ch>='A')&&(ch<='F')) { ch= ch-'A'+10; switch (ch) { case 10: ch=0x0A; break; case 11: ch=0x0b; break; case 12: ch=0x0c; break; case 13: ch=0x0d; break; case 14: ch=0x0e; break; case 15: ch=0x0f; break; } } file_bit_buff_1 [k]=ch<<4 ; ch = (mCmdParam.ByteRead.mByteBuffer[++i]) ; if((ch>='0')&&(ch<='9')) ch= ch-0x30; else if((ch>='A')&&(ch<='F')) { ch= ch-'A'+10; switch (ch) { case 10: ch=0x0A; break; case 11: ch=0x0b; break; case 12: ch=0x0c; break; case 13: ch=0x0d; break; case 14: ch=0x0e; break; case 15: ch=0x0f; break; } } file_bit_buff_1 [k++] |= ch ; } if ( mCmdParam.ByteRead.mByteCount < c ) { /* 实际读出的字符数少于要求读出的字符数,说明已经到文件的结尾 */ // printf( "\n" ); // printf( "文件已经结束\n" ); break; } } } 问题: ch375读取文本文件。 当读取到10600左右个字节时,没有按正常顺序读出,10600前都正常。是什么原因产生的?