Преглед изворни кода

fatfs: expose some configuration values in Kconfig

- _FS_TINY: disables per-file caches
- _FS_TIMEOUT: locking timeout for concurrent access
- _FS_LOCK: prevents operations which are not allowed on open files

Also sets _MAX_SS based on sector size configured for wear_levelling.
This reduces memory usage of FATFS if wear_levelling is using 512 byte
sectors.
Ivan Grokhotkov пре 8 година
родитељ
комит
07c44d7f01
2 измењених фајлова са 55 додато и 5 уклоњено
  1. 45 0
      components/fatfs/Kconfig
  2. 10 5
      components/fatfs/src/ffconf.h

+ 45 - 0
components/fatfs/Kconfig

@@ -105,4 +105,49 @@ config FATFS_MAX_LFN
    help
       Maximum long filename length. Can be reduced to save RAM.
 
+config FATFS_FS_LOCK
+   int "Number of simultaneously open files protected by lock function"
+   default 0
+   range 0 65535
+   help
+      This option sets the FATFS configuration value _FS_LOCK.
+      The option _FS_LOCK switches file lock function to control duplicated file open
+      and illegal operation to open objects.
+       
+      * 0: Disable file lock function. To avoid volume corruption, application
+           should avoid illegal open, remove and rename to the open objects.
+       
+      * >0: Enable file lock function. The value defines how many files/sub-directories
+           can be opened simultaneously under file lock control.
+           
+      Note that the file lock control is independent of re-entrancy.
+
+config FATFS_TIMEOUT_MS
+   int "Timeout for acquiring a file lock, ms"
+   default 10000
+   help
+      This option sets FATFS configuration value _FS_TIMEOUT, scaled to milliseconds.
+      Sets the number of milliseconds FATFS will wait to acquire a mutex when
+      operating on an open file. For example, if one task is performing a lenghty
+      operation, another task will wait for the first task to release the lock,
+      and time out after amount of time set by this option.
+      
+
+config FATFS_PER_FILE_CACHE
+   bool "Use separate cache for each file"
+   default y
+   help
+      This option affects FATFS configuration value _FS_TINY.
+      
+      If this option is set, _FS_TINY is 0, and each open file has its own cache,
+      size of the cache is equal to the _MAX_SS variable (512 or 4096 bytes).
+      This option uses more RAM if more than 1 file is open, but needs less reads
+      and writes to the storage for some operations.
+      
+      If this option is not set, _FS_TINY is 1, and single cache is used for
+      all open files, size is also equal to _MAX_SS variable. This reduces the
+      amount of heap used when multiple files are open, but increases the number
+      of read and write operations which FATFS needs to make.
+      
+
 endmenu

+ 10 - 5
components/fatfs/src/ffconf.h

@@ -1,3 +1,4 @@
+#include <sys/param.h>
 #include "sdkconfig.h"
 /*---------------------------------------------------------------------------/
 /  FatFs - FAT file system module configuration file
@@ -177,9 +178,13 @@
 /  arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
 /  funciton will be available. */
 
+/* SD card sector size */
+#define _SS_SDCARD      512
+/* wear_levelling library sector size */
+#define _SS_WL          CONFIG_WL_SECTOR_SIZE
 
-#define	_MIN_SS		512
-#define	_MAX_SS		4096
+#define	_MIN_SS		MIN(_SS_SDCARD, _SS_WL)
+#define	_MAX_SS		MAX(_SS_SDCARD, _SS_WL)
 /* These options configure the range of sector size to be supported. (512, 1024,
 /  2048 or 4096) Always set both 512 for most systems, all type of memory cards and
 /  harddisk. But a larger value may be required for on-board flash memory and some
@@ -211,7 +216,7 @@
 / System Configurations
 /---------------------------------------------------------------------------*/
 
-#define	_FS_TINY	0
+#define	_FS_TINY	(!CONFIG_FATFS_PER_FILE_CACHE)
 /* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
 /  At the tiny configuration, size of file object (FIL) is reduced _MAX_SS bytes.
 /  Instead of private sector buffer eliminated from the file object, common sector
@@ -238,7 +243,7 @@
 /  These options have no effect at read-only configuration (_FS_READONLY = 1). */
 
 
-#define	_FS_LOCK	0
+#define	_FS_LOCK	CONFIG_FATFS_FS_LOCK
 /* The option _FS_LOCK switches file lock function to control duplicated file open
 /  and illegal operation to open objects. This option must be 0 when _FS_READONLY
 /  is 1.
@@ -251,7 +256,7 @@
 
 
 #define _FS_REENTRANT	1
-#define _FS_TIMEOUT		1000
+#define _FS_TIMEOUT		(CONFIG_FATFS_TIMEOUT_MS / portTICK_PERIOD_MS)
 #define	_SYNC_t			SemaphoreHandle_t
 /* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
 /  module itself. Note that regardless of this option, file access to different