仔细看一下程序.我们提供了参考程序.按照我们提供的程序跑一下看看效果
是一次就能写入512个字节吗?比如有个DATA_BUF[],长度512,一次就能把这个数组的数据写进去吗?
一次写入多少数据是由用户决定的,直接调用写数据函数:CH375FileWrite或CH375FileWriteX或CH375ByteWrite 就可以向文件写入数据,至于怎么调用,CH375HF.PDF和例程中都有说明,建议您把二者仔细对照看一下!
你说的这两个函数好像例程里都没有哟,你们的例程好像是这样的,i = ExecCommandBuf( CMD_FileWrite, 1, &DATA_BUF ); /* 向文件写入数据 */
不好意思,刚注意到你用的是模块! \CH375HM\PUB\PARALLEL下有写数据的过程阿: printf( "Write\n" ); mCmdParam.Write.mSectorCount = 0x1; /* 写入一个扇区512字节 */ i = ExecCommandBuf( CMD_FileWrite, 1, &DATA_BUF ); /* 向文件写入数据 */ mStopIfError( i ); if ( SecCount > 1 ) { /* 因为数据不超过255个扇区,所以完成能够一次写入,但是为了演示,特意分两次写入 */ mCmdParam.Write.mSectorCount = SecCount - 1; /* buffer = & DATA_BUF + 512; 接着刚才的写,不必设置缓冲区的起始地址 */ i = ExecCommandBuf( CMD_FileWrite, 1, &DATA_BUF + 512 ); /* 向文件写入数据,缓冲区接着前面写入的512字节之后 */ mStopIfError( i ); } 上述程序就是实现写数据
ExecCommandBuf( CMD_FileWrite, 1, &DATA_BUF ); 我用了这个语句,结果我的程序总是重新启动,不知什么原因
这很有可能给你的RAM有关系,这样你把DATA_BUF数组建小一些.看看编译完毕后一共用了多少RAM.
我缩小其长度为20,不行还是重新启动
这样写: i = ExecCommandBuf( CMD_FileWrite, 1, &DATA_BUF ); 看一下编译完毕后占用多少RAM,如果RAM不足的话只能采用字节写的模式来做了.如果用 CMD_FileWrite命令的话保证 DATA_BUF数组的大小不小与512.
你说的这个看RAM,我也不太懂,刚才我把这个数组改成长度为2,照样还是不可以。
你用的什么MCU?资源多少?这个在芯片资料里有说明的.那你监视一下程序怎么执行的,是不是一执行到这个语句就从新启动了?
CPU P89C669 飞利浦的,我屏蔽掉这句就不重启了
是不是必须得用这个语句才能把数据写入到TXT里?我现在把这句屏蔽了,可以创建TXT文件,里面有一些乱码,这是我的代码,void USB(unsigned char type) { unsigned char str1[10]; unsigned char i; ES1R=0; GetTime(); str1[0]='\\'; str1[1]='C'; str1[2]='H'; str1[3]='_'; str1[4]=numberArray[0]+0x30; str1[5]=numberArray[1]+0x30; str1[6]='.'; str1[7]='T'; str1[8]='X'; str1[9]='T'; for (i=0; i<100; i++) { DATA_BUF[i]=headers[i]; // 现在就是想把这个headers数组的数据写入TXT } DecToNo(type+1,2);
DATA_BUF[2]=numberArray[0]; //通道数 DATA_BUF[3]=numberArray[1];
memcpy( mCmdParam.Create.mPathName, str1, MAX_PATH_LEN ); ExecCommand( CMD_FileCreate, MAX_PATH_LEN );
mCmdParam.Write.mSectorCount = 0x1; // ExecCommandBuf( CMD_FileWrite, 1, &DATA_BUF ); mCmdParam.Modify.mFileAttr = 0xff; mCmdParam.Modify.mFileTime = 0xffff; mCmdParam.Modify.mFileDate = ( (2000+buffTime[0]-1980)<<9 ) + ( buffTime[1]<<5 ) + buffTime[2]; mCmdParam.Modify.mFileSize = 512; ExecCommand( CMD_FileModify, 4+2+2+1 );
mCmdParam.Close.mUpdateLen = 0; // 不要自动计算文件长度,如果自动计算,那么该长度总是512的倍数 ExecCommand( CMD_FileClose, 1 );
ES1R=1; }
肯定的,你只是简单的把文件的长度给修改了.内容并不是实际的内容.你还是要检查你的MCU的资源.看看资料.
那麻烦你给指导一下,具体该怎么来写?谢谢了 !