ch375 字节模式读写u盘问题

改写的例程6 在ram中自由定义字符串并写入u盘新建的文件newfile.txt时很顺利完成

现在改写程序 目的是读出u盘中newfile.txt文件的几个字节并写入到新建文件newfile1.txt中 出现问题是写入出现乱码 这个是什么原因?

主要涉及程序如下: LED_RUN_ACT( ); /* 开始操作U盘 */ mDelay100mS( ); mDelay100mS( );

/* 读取原文件 */

mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/NEWFILE.TXT" ); /* 文件名,该文件在C51子目录下 */ i = CH375FileOpen( ); /* 打开文件 */

if ( i == ERR_MISS_DIR || i == ERR_MISS_FILE ) { LED_RUN_INACT( ); break; }

else { /* 找到文件或者出错 */ mStopIfError( i );

m=0;

mCmdParam.ByteRead.mByteCount = 5; /* 请求读出几十字节数据 */ i = CH375ByteRead( ); /* 以字节为单位读取数据块,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后读 */ mStopIfError( i ); for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) { ram_read[ i ] = mCmdParam.ByteRead.mByteBuffer[ i ];

m++; } if ( mCmdParam.ByteRead.mByteCount < 5) { /* 实际读出的字符数少于要求读出的字符数,说明已经到文件的结尾 */ break; } }

i = CH375FileClose( ); /* 关闭文件 */ mStopIfError( i );

#ifdef EN_DISK_WRITE /* 子程序库支持写操作 */ /* 产生新文件 */ LED_WR_ACT( ); /* 写操作 */ mDelay100mS( ); mDelay100mS( ); mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/NEWFILE1.TXT" ); /* 新文件名,在根目录下,中文文件名 */ i = CH375FileCreate( ); /* 新建文件并打开,如果文件已经存在则先删除后再新建 */ mStopIfError( i ); pCodeStr =ram_read; while( 1 ) { /* 分多次写入文件数据 */ for ( i=0; i c = *pCodeStr; mCmdParam.ByteWrite.mByteBuffer[i] = c; if ( c == 0 ) break; /* 源字符串结束 */ pCodeStr++; } if ( i == 0 ) break; /* 源字符串结束,完成写文件 */ mCmdParam.ByteWrite.mByteCount = i; /* 写入数据的字符数,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后写 */ i = CH375ByteWrite( ); /* 向文件写入数据 */ mStopIfError( i ); }

mCmdParam.Close.mUpdateLen = 1; /* 自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 */ i = CH375FileClose( ); mStopIfError( i );

LED_WR_INACT( );

写的时候指针pCodeStr指向自由定义的字符串时(比如“asas”)新文件可以顺利写入这些字符

指向u盘读出操作的字符存储数组ram_read时就写不进去了


读数据时,保存数据程序写错了 for( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) { ram_read=mCmdParam.ByteRead.mByteBuffer;/* 怎么可以把一个地址存付值给另一个地址呢*/ m++; } 改为: UINT8 ram_read[ 20 ]; for( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) { ram_read[ i ] = mCmdParam.ByteRead.mByteBuffer[ i ]; }


奇怪 我复制过来是带[i]的 帖子显示怎么没有 应该不是ls说的问题


pCodeStr这个指针是怎么定义的? 数据复制完之后 检查一下mCmdParam.ByteWrite.mByteBuffer中的数据,是不是你读取文件的数据?


UINT8 *pCodeStr; UINT8 *ram_read;

我是把读出来的数据存到ram_read中的


如果 pCodeStr =“note123” 这样是可以正常把字符串写到u盘文件里 问题应该在ram_read上?


运行程序发现 i = CH375ByteRead( ); 读操作之后 mCmdParam.ByteRead.mByteCount=5 而不是例程中所说的会变小 是不是数据没有读出?


找到问题了 ram_read这个中间存储应该定义为数组而不是指针 汗 改成数组就好了


只有登录才能回复,可以选择微信账号登录