用2407搭配ch375,将程序烧写到flash中后断电,家电,读写u盘正常,断电再加电,程序就不正常了,出现莫名奇妙的问题。不是初始化375不过,就是打开文件或创建文件错误。重新烧写后,又是同样的问题。头疼中
不用头疼,第一次成功,至少说明软硬件基本上都没什么问题。 (1)第二次运行时,哪步出错,出错代码是什么? (2)试试第一次操作完,等待时间长一点,再上电看看是否可行
最多的是打开文件或者创建新文件是出错,返回代码是2,就是参数错误。我查了下,好像是存文件名的数组中的内容不对,是乱码。
问题不是找到么!文件名的数组中的内容不对,打开或创建文件自然是出错了。 应重点分析一下文件名的数组中的内容为何不对,文件名的赋值是否正确,文件名缓冲区是否有问题呢?
strcpy(fat_cmd.create.buffer,"\\TEST.TXT"); sts4=fat_fcreate(F_CREATE_NEW); 这就是我的文件名赋值,fat_cmd.create.buffer是fat.h中定义的。而且第一次运行没问题啊。
好像第二次运行时,strcpy函数总出错,谁知道是什么问题啊,我改成这样 strcpy(filename,"\\TEST.TXT"); strcpy(fat_cmd.create.buffer,filename); sts4=fat_fcreate(F_CREATE_NEW); 第一次运行没问题,第二次运行时,filename中的内容就变成乱码了。我用的是2407,怎么回事啊。
如果strcpy函数有问题,您干脆直接手动赋值试试,如: fat_cmd.create.buffer[ 0 ] = '\\'; fat_cmd.create.buffer[ 1 ] = 'T'; fat_cmd.create.buffer[ 2 ] = 'E'; fat_cmd.create.buffer[ 3 ] = 'S'; fat_cmd.create.buffer[ 4 ] = 'T'; fat_cmd.create.buffer[ 5 ] = '.'; fat_cmd.create.buffer[ 6 ] = 'T'; fat_cmd.create.buffer[ 7 ] = 'X'; fat_cmd.create.buffer[ 8 ] = 'T'; fat_cmd.create.buffer[ 9 ] = 0;
还是不对,是不是ram不够啊
fat_cmd.create.buffer[ 0 ] = '\\'; fat_cmd.create.buffer[ 1 ] = 'T'; fat_cmd.create.buffer[ 2 ] = 'E'; fat_cmd.create.buffer[ 3 ] = 'S'; fat_cmd.create.buffer[ 4 ] = 'T'; fat_cmd.create.buffer[ 5 ] = '.'; fat_cmd.create.buffer[ 6 ] = 'T'; fat_cmd.create.buffer[ 7 ] = 'X'; fat_cmd.create.buffer[ 8 ] = 'T'; fat_cmd.create.buffer[ 9 ] = 0; 这样改了后,打开文件没问题了,但是完txt文件中写数,还是要用到strcpy函数啊,2407还不支持sprintf函数 ,怎么办啊
照您的说法,那么与我们提供给您的文件系统没关系了,且与2407芯片也没关系,主要原因在于您所用的编译器了,只能咨询编译器的技术支持了,其实您也可以自己写一个类似于strcpy的函数,如: UINT8 mCopyString( UINT8 *iDestination, UINT8 *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); }