<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
九、添加新的命令fwrite
添加命令的过程前面已经做过多次了,这里就不再详细说了。
搭建好框架后,先编译通过。
其程序如下
void UartCmdFWrite(u8 argc,void **argv){
u8 WriteFileBuf[512];
FIL WriteFileInf;
u16 i;
u8 CharWrite;
UINT ByteWrite="0";
FRESULT res;
res=f_open(&WriteFileInf,argv[1],FA_WRITE | FA_CREATE_ALWAYS );
if ( res!=FR_OK) { Uart_PutString( "File Open Error!\r\n");return;}
res=f_lseek( &WriteFileInf,10);
if ( res!=FR_OK) { Uart_PutString( "File Open Error!\r\n");return;}
for ( ; ; ) {
CharWrite = Uart_GetChar();
if ( CharWrite == '\r' ) continue;
if ( CharWrite == 0x1B ) break;
for ( i="0" ; i<512 ; i++ ) WriteFileBuf = CharWrite;
res=f_write(&WriteFileInf,(void *)WriteFileBuf,512,&ByteWrite); //要进去看一看,读后有没有自动调整指针。
if ( res!=FR_OK) { Uart_PutString( "File Write Error!\r\n");return;}
}
f_close( &WriteFileInf );
Uart_PutString("\r\n");
}
但不管是f_lseek()函数还是f_write()函数,在调用create_chain(fp->fs, 0)再进入getfat()函数 再进入movwindow()函数,调用diskread(),再调用SDReadMultiBlock()函数的时候就会出错返回。调试了一个晚上,没有找出原因来。
因为SDReadMultiBlock()这个函数使用时要调用很多次,都能获得正确数据。只有在为了新文件建立新簇、读取FAT表第一个扇区的时候就出错返回,奇怪了。
文章评论(0条评论)
登录后参与讨论