fatfs-SDIO的寫檔案時間耗費在哪裡了(之四)?
阿新 • • 發佈:2019-01-05
目標是什麼?
(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分開執行。