用avr m16测试CH375,有问题请教

[font=新宋体][size=4]1,按照例子中的方法:

strcpy( (char *)mCmdParam.Create.mPathName, "TEST.TXT" ); CH375FileCreate( ); pCodeStr = (UINT8 *)"TEST........"; 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; i = CH375ByteWrite( ); } mCmdParam.Close.mUpdateLen = 1; CH375FileClose( );

如果这一句:pCodeStr = (UINT8 *)"TEST........"; 中字符串比较长,就会出现错误,这是因为M16的RAM空间不够导致的吗?那么我想用字节方式写入比较长的数据应如何实现最好?

2,我先用CH375ByteRead();读出某文件的数据,再在新建文件的时候把读出的数据赋给ByteWrite的缓冲区,然后把数据写入新建的文件,这样也会出错,是因为我的磁盘数据缓冲区太小吗?我设置的磁盘数据缓冲去为512,要是我用RAM大点的单片机,把磁盘数据缓冲区设置大些,那么还是用这种方法会有问题吗?

3,#if DISK_BASE_BUF_LEN == 0 pDISK_BASE_BUF = &my_buffer[0];

/* 不在.H文件中定义CH375的专用缓冲区,而是用缓冲区指针指向其它应用程序的缓冲区便于合用以节约RAM */

#endif

这个具体怎么用啊,我的理解是自己在应用程序中先声明DISK_BASE_BUF_LEN == 0 然后定义my_buffer[],可试过是不行的!

[/size][/font]

4,查询方式和中段方式都只是要来判断U盘连接或断开状态的吗?还是在头文件中提供的xQueryInterrupt( )和CH375Interrupt( )这两个函数只是给了CH375DiskConnect( void )调用了?然而子函数库中提供的很多函数本身应该是工作在查询方式,而且不会调用 xQueryInterrupt( )这个函数的,那这里个函数到底还有什么用途啊?


5,我用下面的程序把U盘中原有的一个TXT文件的内容复制到另一个新建的文件里头:

strcpy( (char *)mCmdParam.Open.mPathName, "/FILEA.TXT" ); CH375FileOpen(); sizetemp=CH375vFileSize; CH375FileClose();

strcpy((char *)mCmdParam.Create.mPathName, "/FILEB.TXT"); CH375FileCreate(); mCmdParam.Close.mUpdateLen = 1; CH375FileClose( );

for(i=0;i<(sizetemp+MAX_BYTE_IO-1)/MAX_BYTE_IO;i++){ strcpy( (char *)mCmdParam.Open.mPathName, "/FILEA.TXT" ); CH375FileOpen(); mCmdParam.ByteLocate.mByteOffset=i*MAX_BYTE_IO; CH375ByteLocate(); mCmdParam.ByteRead.mByteCount=MAX_BYTE_IO; CH375ByteRead(); realcount=mCmdParam.ByteRead.mByteCount; for(j=0;jmydatabuf[j]=mCmdParam.ByteRead.mByteBuffer[j]; } CH375FileClose();

strcpy( (char *)mCmdParam.Open.mPathName, "/FILEB.TXT" ); CH375FileOpen(); mCmdParam.ByteLocate.mByteOffset=0xffffffff; CH375ByteLocate(); for(j=0;jmCmdParam.ByteWrite.mByteBuffer[j]=mydatabuf[j]; } mCmdParam.ByteWrite.mByteCount=realcount; CH375ByteWrite(); CH375FileClose();

if(realcount } 假定参数变量都正确定义;

这程序有错误的地方吗?为什么不能正确实现啊?

只要我操作稍微大一点的文件就会出错,仔细观察,要是出错了U盘的数据灯就会不停的暗闪(不仔细看还看不出来)!


1.如果用字节方式写入比较长的数据,可以修改MAX_BYTE_IO的大小,但不得大于255,还有你的RAM空间要足够的大. 2.和你的磁盘数据缓冲区的大小没有关系. 3.要先声明DISK_BASE_BUF_LEN == 0,在定义my_buffer[512];并且把pDISK_BASE_BUF指向这个缓冲区. 4.查询方式或中断方式不仅用来查询U盘的连接或者断开,在读写文件的时候也会用到中断.我们的库会调用的 5.操作流程不对,在复制文件的 时候, for(j=0;jmydatabuf[j]=mCmdParam.ByteRead.mByteBuffer[j]; } 在多次复制的时候 mydatabuf[]缓冲区中的数据不停的被覆盖了.


楼上的回答好像没有答出重点哦! 1,用我给出的程序,写比较短的字符串基本不会出错,但是稍微加长一点就出错了! 2,这个问题原来和第5个是一样的!-.- 3,要先声明DISK_BASE_BUF_LEN == 0,在定义my_buffer[512];并且把pDISK_BASE_BUF指向这个缓冲区. 似乎我就是用这种方法的,可是编译不过! 4,可是在头文件里给出的默认的程序只是在检查U判断连接或者断开,那么就算库的其他程序调用它也是在检查U盘断开与否 5,你指出的错误是我不小心写错了,实际的程序没有这种错误,就算修改了这个错误也不行啊! 而且我发现很多出错时,U盘的数据灯就会不停的闪烁!


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