2017-04-06 60 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); 

注意,我添加了一個數據緩存維護和數據存儲器屏障。

該文件現在寫入正確無誤。

感謝。

相關問題