1. 程式人生 > >fatfs-SDIO的寫檔案時間耗費在哪裡了(之四)?

fatfs-SDIO的寫檔案時間耗費在哪裡了(之四)?

目標是什麼?

   (1)  記錄的要快,記錄的要多。

(2)PLC的scantime要儘可能的小,儘可能的穩定。不能平時都是20ms,偶爾來個200ms,這個不行。

方法是什麼?

實驗。因為理論掌握的不好,所以只能靠實驗。邊分析邊實驗,不能胡亂實驗。

上面這三篇文章寫完了,我其實對幾個基本函式的使用都不怎麼清楚,就是說這三篇文章的例子都是無法實際專案中應用的例子。

然後測試了這篇文章《fatfs函式的用法學習方法》裡面函式的延時,發現竟然f_lseek的最耗時間的。

這個事情就麻煩了,怎麼解決呢?

f_open的第三個引數mode設定的是什麼??  如果設定了FA_OPEN_APPEND,那麼對檔案的寫入就是附加模式,即在檔案尾部追加寫入內容,這樣你就不用使用seek了,每次寫入都是在檔案尾部附加。


這個直接搜尋fatfs找到其官方網站,官網對fatfs的各種api都有詳細說明,需要什麼功能直接讀說明就可以了。

實際上,不管是linux或者windows或者其他系統下的檔案系統,大家需要實現的api都差不多,
都要實現open、read、write、flush、close幾種功能,而且幾種API的內部功能也都要差不多實現,
比如open,大多都要對其指定許可權(比如讀、寫、新建、附加等方式或者許可權),幾乎所有的檔案系統的open
都有指定這些許可權(當然一般的open也要指定路徑)。其他api類似。

所以不管是哪種檔案系統,大約你使用任意一種平臺下的檔案系統操作檔案熟練之後,基本上所有的檔案系統
的檔案操作你大概也就都會了。只要熟悉一種之後,其他的基本上你需要什麼樣的操作,你大概就會知道,該
檔案系統在某個地方應該有個實現什麼功能的api,然後去查一下說明就OK了。

這個高人

mack13013 


  離線 

22
主題
700
帖子
1
精華
論壇元老

積分
3443
金錢
3443 
註冊時間
2014-8-13
線上時間
766 小時
發訊息

而我的程式碼是基本網上比較流行的0.09B,壓根就沒有FA_OPEN_APPEND這個選項,於是移植了截至比較新的fatfs版本R0.13 (May 21, 2017)

僅僅執行一次f_open(&file, "8.txt", FA_OPEN_APPEND | FA_WRITE | FA_READ);

然後執行100次f_write和f_sync

然後執行一次f_close

發現確實管用。

另外要注意要搞個緩衝區,寫入時候對其扇區,這樣SDIO驅動層只是呼叫多寫入那個函式。

還可以考慮把f_write和f_sync分開執行。