1、我程序中文件操作程序如下: s=CH376FileOpen("/XP.TXT"); /* 打开文件,该文件在根目录下 */ if(s==USB_INT_SUCCESS) { s=CH376ByteLocate(0xFFFFFFFF); /* 移到文件的尾部 */ mStopIfError(s); } else if(s==ERR_MISS_FILE) { s=CH376FileCreate(NULL); mStopIfError(s); } else mStopIfError(s); /* 打开文件时出错 */

s=sprintf(buf,Txt); /* 注意字符串长度不能溢出buf,否则加大缓冲区或者分多次写入 */ s=CH376ByteWrite(buf,s,NULL); /* 以字节为单位向文件写入数据 */ mStopIfError(s);

mDelayMs(200);

s=sprintf(buf,Txt1); s=CH376ByteWrite(buf,s,NULL);

mStopIfError(s);

s=CH376FileClose(TRUE); /* 关闭文件,自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 */ mStopIfError(s);

另外:①Txt中实际数据长度为30以内时,进入CH376ByteWrite()函数 UINT8 CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) /* 以字节为单位向当前位置写入数据块 */ { UINT8 s; xWriteCH376Cmd( CMD2H_BYTE_WRITE ); xWriteCH376Data( (UINT8)ReqCount ); xWriteCH376Data( (UINT8)(ReqCount>>8) ); xEndCH376Cmd( ); if ( RealCount ) *RealCount = 0; while ( 1 ) { s = Wait376Interrupt( ); if ( s == USB_INT_DISK_WRITE ) { s = CH376WriteReqBlock( buf ); /* 向内部指定缓冲区写入请求的数据块,返回长度 */ xWriteCH376Cmd( CMD0H_BYTE_WR_GO ); xEndCH376Cmd( ); buf += s; if ( RealCount ) *RealCount += s; } /* else if ( s == USB_INT_SUCCESS ) return( s );*/ /* 结束 */ else return( s ); /* 错误 */ } } 第一个循环时,CH376WriteReqBlock( buf )返回30,第二个循环中(写数据完毕,本应返回),返回20,且写入20个0(通过串口监控得到)。在写下一组数据Txt1时,进入CH376ByteWrite()函数后,直接返回,导致实际的第二组数据写不进去。打开U盘看数据,第一组数据正常,第二组数据乱码。 ②当Txt中实际数据长度为超过30(我写的实际长度为60)时,进入CH376ByteWrite()函数后,第一个循环,写入前30个数据,第二个循环没有进入而直接因为超时返回,文件关闭后,拔掉U盘看数据,没有任何数据,只有空文件1个