下冰雹 · 2020年11月01日

FatFs模块功能配置选项

FatFs模块功能配置选项

zhzht19861011 2016-10-24 13:18:10 11752 收藏 27
分类专栏: FatFs
版权
本文使用的FatFs版本为:V0.12b(2016年9月4发布)

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

1.功能配置
1.1 _FS_READONLY

使能或禁用与写相关函数。
image.png
当设置为只读(1)时,API函数f_write、f_sync、f_unlink、f_mkdir、f_chmod、f_rename、f_truncate、f_getfree。

1.2 _FS_MINIMIZE

函数功能裁剪。
image.png

1.3 _USE_STRFUNC

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

1.4 _USE_FIND

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

1.5 _USE_MKFS

使能或禁用f_mkfs函数
image.png

1.6 _USE_FASTSEEK

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

1.7 _USE_EXPAND

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

1.8 _USE_CHMOD

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

1.9 _USE_LABEL

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

1.10 _USE_FORWARD

使能或禁用f_forward函数。
image.png

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

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

2.2 _USE_LFN

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

2.3 _MAX_LFN

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

2.4 _LFN_UNICODE

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

2.5 _STRF_ENCODE

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

2.6 _FS_RPATH

配置相对路径函数。
image.png

3.卷/驱动器配置
3.1 _VOLUMES

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

3.2 _STR_VOLUME_ID

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

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函数有效。
image.png

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命令。
image.png

3.7 _FS_NOFSINFO

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

4.系统配置
4.1 _FS_TINY

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

4.2 _FS_EXFAT

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

4.3 _FS_NORTC

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

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。
image.png

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中找到示例。
image.png

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时,本设置无效。

作者:朱工
首发博客:https://freertos.blog.csdn.net/article/details/52910541
关注FreeRTOS从基础到高级专栏,即时收取FreeRTOS系列文章。
推荐阅读
关注数
3247
内容数
54
介绍FreeRTOS的基本功能,移植与使用。主要介绍FreeRTOS的裁剪、任务、内存管理、队列、信号量、任务通知等基本组成,看完可以会用FreeRTOS,高级篇会深入介绍FreeRTOS的实现细节、方法、技巧。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息