原创 智林STM32开发板上的FatFS移植过程分析(八)

2010-3-20 21:57 3435 5 5 分类: MCU/ 嵌入式

 


<?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条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条