朱工的专栏

专注/深入/分享

FatFs模块功能配置选项

本文使用的FatFs版本为:V0.12b(2016年9月4发布)

Fatfs模块的功能可以裁剪,通过配置宏定义实现,宏定义位于文件ffconf.h中。

1.功能配置

1.1 _FS_READONLY

使能或禁用与写相关函数。

当设置为只读(1)时,API函数f_write、f_sync、f_unlink、f_mkdir、f_chmod、f_rename、f_truncate、f_getfree。

1.2 _FS_MINIMIZE

函数功能裁剪。

1.3 _USE_STRFUNC

用于使能或禁用字符串函数:f_gets、f_putc、f_puts和f_printf

1.4 _USE_FIND

使能或禁用在指定目录内搜索指定文件函数:f_findfirst和f_findnext

1.5 _USE_MKFS

使能或禁用f_mkfs函数

1.6 _USE_FASTSEEK

使能或禁用快速搜索功能,使能后,可以加快f_lseek、f_read和f_write函数执行。

1.7 _USE_EXPAND

使能或禁用f_expand函数,该函数可以为文件分配连续数据区域。

1.8 _USE_CHMOD

使能或禁用元数据控制函数:f_chmod和f_utime。

1.9 _USE_LABEL

使能或禁用卷标签API函数:f_getlabel和f_setlabel。

1.10 _USE_FORWARD

使能或禁用f_forward函数。

2.命名空间和本地环境配置

2.1 _CODE_PAGE

规定目标系统使用的OEM代码。如果该代码设置的不正确,可能会引起文件打开失败。如果没有根本没有使用扩展字符,则使用任何代码都没区别。

2.2 _USE_LFN

使能或禁用长文件名(LFN)。当使能长文件名后,需要向工程添加包含Unicode支持函数的option/unicode.c文件。工作缓冲区增加(_MAX_LFN + 1) * 2个字节,如果使能exFAT,额外多需要608字节缓存。如果工作缓存使用栈内存,需当心栈溢出;如果工作缓冲使用堆内存,需要向工程添加内存管理函数ff_memalloc和ff_memfree。

2.3 _MAX_LFN

定义长文件名工作缓冲区大小,可以为12~255字节。当禁用长文件名时,此选项无效。

2.4 _LFN_UNICODE

使能或禁用Unicode。如果要使用Unicode(UTF16)字符串路径名,需要使能LFN和设置本选项为1。此选项还影响字符串I/O功能函数。如果禁用长文件名,此选项必须为0。

2.5 _STRF_ENCODE

通过设置_LFN_UNICODE为1使能Unicode API函数时,这个选项定义通过字符串I/O函数读写的文件字符编码。字符串I/O函数有f_gets、f_putc、f_puts和f_printf。当_LFN_UNICODE等于0时,此选项不起作用。

2.6 _FS_RPATH

配置相对路径函数。

3.卷/驱动器配置

3.1 _VOLUMES

配置可用卷的数目,可设置为1~10。

3.2 _STR_VOLUME_ID

使能或禁用字符串卷标识。要使能字符串卷标识,需要预先定义标识字符串,使用宏_VOLUME_STRS定义。


3.3 _VOLUME_STRS

定义每一个逻辑驱动器ID。ID数目不能少于_VOLUMES。驱动器ID有效字符只能为A-Z和0-9。比如:
#define _VOLUME_STRS	"RAM","NAND","CF","SD","SD2","USB","USB2","USB3"

3.4 _MULTI_PARTITION

使能或禁止多分区函数。默认禁止,此时每个逻辑驱动器数目一定与物理驱动器数目相同,并且物理驱动器仅能安装FAT卷。如果使能,物理设备上可以有多个逻辑扇区,每个逻辑驱动器一定要预先定义在分区解析表VolToPart[]中。同时,f_disk函数有效。

3.5 _MIN_SS、_MAX_SS

定义扇区大小,有效值为512、1024、2048、4096,需要根据硬件配置来定义。_MIN_SS定义最小扇区大小,_MAX_SS定义最大扇区大小。都设置为512可以兼容所有SD卡和硬盘,但是在某些片上Flash和其它存储设备可能需要更大值。当_MAX_SS > _MIN_SS,FatFs被配置为扇区大小可变的并且必须在函数disk_ioctl中实现GET_SECTOR_SIZE命令。

3.6 _USE_TRIM

使能或禁用ATA-TRIM函数。TRIM指令被文件系统用来通知设备哪些逻辑地址不再被占用,可以被设备回收为空闲空间。对于FatFs来说,使用函数f_unlink移除一个文件时,只是将对应的FAT区域设置为空,文件实际上在扇区中。如果想在移除文件时强制擦除扇区,只需将_USE_TRIM设置为1。如果使能TRIM函数,必须在函数disk_ioctl中实现CTRL_TRIM命令。

3.7 _FS_NOFSINFO

使能或禁用空闲簇计数和最后分配的簇计数。

4.系统配置

4.1 _FS_TINY

配置FatFs为正常模式或者微型(TINY)模式。配置为微型模式后,对内存需求变小,文件对象数据结构FIL会减少_MAX_SS字节。程序复用FATFS数据结构中的缓冲区代替FIL数据结构中去除掉的缓冲区。

4.2 _FS_EXFAT

使能或禁用exFAT文件系统。要使能exFAT文件系统,必须使能长文件名功能并且配置_LFN_UNICODE = 1。如果要使用全功能版的exFAT,推荐_MAX_LFN = 255。注意,使能exFAT意味着不再兼容C89,因为要用到64位整形数。

4.3 _FS_NORTC

使能或禁用时间戳函数。使能时间戳函数需要硬件RTC,并且需要提供底层函数get_fattime。如果系统没有硬件RTC或者不需要时间戳功能,设置_FS_NORTC为1禁用时间戳函数。此时,如果FatFs修改任何文件,使用固定的时间戳,固定时间戳由宏_NORTC_MON、_NORTC_MDAY和_NORTC_YEAR定义。

4.4 _NORTC_MON、_NORTC_MDAY和_NORTC_YEAR

如果系统没有RTC,这些宏用来定义固定时间戳。只读或者_FS_NORTC=0时,这些宏无意义。
比如:
#define _NORTC_MON	1
#define _NORTC_MDAY	1
#define _NORTC_YEAR	2016

4.5 _FS_LOCK

使能或禁用文件锁功能。控制重复打开文件和非法打开文件对象。注意:文件锁功能不具有可重入性。只读模式下,这个宏必须为0。

4.6 _FS_REENTRANT

使能或禁用FatFs模块的可重入特性。注意,访问不同卷上的文件/目录总是可重入的,无论是否使能本参数,卷控制函数f_mount、f_mkfs和f_fdisk总是不可重入的。要使能可重入特性,用户必须提供同步处理,要向工程中添加ff_req_grant、ff_rel_grant、ff_del_syncobj和ff_cre_syncobj函数。可以在文件option/syscall.c中找到示例。

4.7 _FS_TIMEOUT

设置超时时间,单位为系统时钟滴答周期,当宏_FS_REENTRANT=0时,本设置无效。

4.8 _SYNC_t

定义同步对象类型,取决于O/S。比如HANDLE、ID、OS_EVENT*、SemaphoreHandle_t等等。需要在ff.c中包含O/S相关的头文件。当宏_FS_REENTRANT=0时,本设置无效。






阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。联系邮箱:zhzhchang@126.com https://blog.csdn.net/zhzht19861011/article/details/52910541
个人分类: FatFs
上一篇FatFs模块系统应用指南
下一篇FatFs路径名称规则、字符集和卷管理
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭