2017-04-06 59 views
2

我正在使用ARM Cortex-M7(ATMEL处理器)惠普Chan's FAT File System Module,并且在写入非乘法字节数量为SECTOR_SIZE_DEFAULT(512字节)的文件时遇到问题。在Chan的FAT文件系统模块中写入的字节数是否有限制?

经过一个循环,我用不同长度的字节(不是多个SECTOR_SIZE_DEFAULT)使用f_write()函数写入文件,但有些字符出现错误。

这里就是写作发生的主要部分:

  f_open(&FileObject, filename_aux, FA_CREATE_ALWAYS | FA_WRITE); 
      do 
      { 
       len = getAviableData(buf); 

       f_write(&FileObject, , buf, len, (UINT*)&ByteWritten); 

       total += len; 

      }while(total < MAX_LEN) 
      f_close(&FileObject); 

当我把它写到另一个存储没有文件系统,我没有任何问题。

感谢。

+1

你在做错事。 FATfs适用于'一般'文件大小的IME。 – ThingyWotsit

+1

应该'总+ = len;'不是'total + = ByteWritten';' ? – ThingyWotsit

+1

FafFs没有定义特定于目标的I/O驱动程序 - 很明显,这不是你的问题所在 - 很可能我会说。什么版本?谁提供了I/O层(或者你自己写了)?你使用SPI还是SDIO? Cortex-M标签没有什么帮助,它是一个外围I/O问题,而不是ARM核心问题 - 实际目标是什么? – Clifford

回答

1

这里是一个解决方案:

f_open(&FileObject, filename_aux, FA_CREATE_ALWAYS | FA_WRITE); 
do 
{ 
     /* Cache Maintenance */ 
     SCB_CleanDCache_by_Addr((uint32_t *)buf, BUF_MAX_SIZE); 

     len = getAviableData(buf); 

     f_write(&FileObject, buf, len, (UINT*)&ByteWritten); 

     /* Data Memory Barrier */ 
     __DMB(); 

     total += ByteWritten; 

}while(total < MAX_LEN) 
f_close(&FileObject); 

注意,我添加了一个数据缓存维护和数据存储器屏障。

该文件现在写入正确无误。

感谢。

相关问题