[转载] FatFs模块功能配置选项
本文使用的FatFs版本為:V0.12b(2016年9月4發(fā)布)
Fatfs模塊的功能可以裁剪,通過配置宏定義實現(xiàn),宏定義位于文件ffconf.h中。
1.功能配置
1.1 _FS_READONLY
使能或禁用與寫相關(guān)函數(shù)。
當設(shè)置為只讀(1)時,API函數(shù)f_write、f_sync、f_unlink、f_mkdir、f_chmod、f_rename、f_truncate、f_getfree。
1.2 _FS_MINIMIZE
函數(shù)功能裁剪。
1.3 _USE_STRFUNC
用于使能或禁用字符串函數(shù):f_gets、f_putc、f_puts和f_printf
1.4 _USE_FIND
使能或禁用在指定目錄內(nèi)搜索指定文件函數(shù):f_findfirst和f_findnext
1.5 _USE_MKFS
使能或禁用f_mkfs函數(shù)
1.6 _USE_FASTSEEK
使能或禁用快速搜索功能,使能后,可以加快f_lseek、f_read和f_write函數(shù)執(zhí)行。
1.7 _USE_EXPAND
使能或禁用f_expand函數(shù),該函數(shù)可以為文件分配連續(xù)數(shù)據(jù)區(qū)域。
1.8 _USE_CHMOD
使能或禁用元數(shù)據(jù)控制函數(shù):f_chmod和f_utime。
1.9 _USE_LABEL
使能或禁用卷標簽API函數(shù):f_getlabel和f_setlabel。
1.10 _USE_FORWARD
使能或禁用f_forward函數(shù)。
2.命名空間和本地環(huán)境配置
2.1 _CODE_PAGE
規(guī)定目標系統(tǒng)使用的OEM代碼。如果該代碼設(shè)置的不正確,可能會引起文件打開失敗。如果沒有根本沒有使用擴展字符,則使用任何代碼都沒區(qū)別。
2.2 _USE_LFN
使能或禁用長文件名(LFN)。當使能長文件名后,需要向工程添加包含Unicode支持函數(shù)的option/unicode.c文件。工作緩沖區(qū)增加(_MAX_LFN + 1) * 2個字節(jié),如果使能exFAT,額外多需要608字節(jié)緩存。如果工作緩存使用棧內(nèi)存,需當心棧溢出;如果工作緩沖使用堆內(nèi)存,需要向工程添加內(nèi)存管理函數(shù)ff_memalloc和ff_memfree。
2.3 _MAX_LFN
定義長文件名工作緩沖區(qū)大小,可以為12~255字節(jié)。當禁用長文件名時,此選項無效。
2.4 _LFN_UNICODE
使能或禁用Unicode。如果要使用Unicode(UTF16)字符串路徑名,需要使能LFN和設(shè)置本選項為1。此選項還影響字符串I/O功能函數(shù)。如果禁用長文件名,此選項必須為0。
2.5 _STRF_ENCODE
通過設(shè)置_LFN_UNICODE為1使能Unicode API函數(shù)時,這個選項定義通過字符串I/O函數(shù)讀寫的文件字符編碼。字符串I/O函數(shù)有f_gets、f_putc、f_puts和f_printf。當_LFN_UNICODE等于0時,此選項不起作用。
2.6 _FS_RPATH
配置相對路徑函數(shù)。
3.卷/驅(qū)動器配置
3.1 _VOLUMES
配置可用卷的數(shù)目,可設(shè)置為1~10。
3.2 _STR_VOLUME_ID
使能或禁用字符串卷標識。要使能字符串卷標識,需要預先定義標識字符串,使用宏_VOLUME_STRS定義。
3.3 _VOLUME_STRS
定義每一個邏輯驅(qū)動器ID。ID數(shù)目不能少于_VOLUMES。驅(qū)動器ID有效字符只能為A-Z和0-9。比如:
#define _VOLUME_STRS?? ?"RAM","NAND","CF","SD","SD2","USB","USB2","USB3"
3.4 _MULTI_PARTITION
使能或禁止多分區(qū)函數(shù)。默認禁止,此時每個邏輯驅(qū)動器數(shù)目一定與物理驅(qū)動器數(shù)目相同,并且物理驅(qū)動器僅能安裝FAT卷。如果使能,物理設(shè)備上可以有多個邏輯扇區(qū),每個邏輯驅(qū)動器一定要預先定義在分區(qū)解析表VolToPart[]中。同時,f_disk函數(shù)有效。
3.5 _MIN_SS、_MAX_SS
定義扇區(qū)大小,有效值為512、1024、2048、4096,需要根據(jù)硬件配置來定義。_MIN_SS定義最小扇區(qū)大小,_MAX_SS定義最大扇區(qū)大小。都設(shè)置為512可以兼容所有SD卡和硬盤,但是在某些片上Flash和其它存儲設(shè)備可能需要更大值。當_MAX_SS > _MIN_SS,FatFs被配置為扇區(qū)大小可變的并且必須在函數(shù)disk_ioctl中實現(xiàn)GET_SECTOR_SIZE命令。
3.6 _USE_TRIM
使能或禁用ATA-TRIM函數(shù)。TRIM指令被文件系統(tǒng)用來通知設(shè)備哪些邏輯地址不再被占用,可以被設(shè)備回收為空閑空間。對于FatFs來說,使用函數(shù)f_unlink移除一個文件時,只是將對應(yīng)的FAT區(qū)域設(shè)置為空,文件實際上在扇區(qū)中。如果想在移除文件時強制擦除扇區(qū),只需將_USE_TRIM設(shè)置為1。如果使能TRIM函數(shù),必須在函數(shù)disk_ioctl中實現(xiàn)CTRL_TRIM命令。
3.7 _FS_NOFSINFO
使能或禁用空閑簇計數(shù)和最后分配的簇計數(shù)。
4.系統(tǒng)配置
4.1 _FS_TINY
配置FatFs為正常模式或者微型(TINY)模式。配置為微型模式后,對內(nèi)存需求變小,文件對象數(shù)據(jù)結(jié)構(gòu)FIL會減少_MAX_SS字節(jié)。程序復用FATFS數(shù)據(jù)結(jié)構(gòu)中的緩沖區(qū)代替FIL數(shù)據(jù)結(jié)構(gòu)中去除掉的緩沖區(qū)。
4.2 _FS_EXFAT
使能或禁用exFAT文件系統(tǒng)。要使能exFAT文件系統(tǒng),必須使能長文件名功能并且配置_LFN_UNICODE = 1。如果要使用全功能版的exFAT,推薦_MAX_LFN = 255。注意,使能exFAT意味著不再兼容C89,因為要用到64位整形數(shù)。
4.3 _FS_NORTC
使能或禁用時間戳函數(shù)。使能時間戳函數(shù)需要硬件RTC,并且需要提供底層函數(shù)get_fattime。如果系統(tǒng)沒有硬件RTC或者不需要時間戳功能,設(shè)置_FS_NORTC為1禁用時間戳函數(shù)。此時,如果FatFs修改任何文件,使用固定的時間戳,固定時間戳由宏_NORTC_MON、_NORTC_MDAY和_NORTC_YEAR定義。
4.4 _NORTC_MON、_NORTC_MDAY和_NORTC_YEAR
如果系統(tǒng)沒有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模塊的可重入特性。注意,訪問不同卷上的文件/目錄總是可重入的,無論是否使能本參數(shù),卷控制函數(shù)f_mount、f_mkfs和f_fdisk總是不可重入的。要使能可重入特性,用戶必須提供同步處理,要向工程中添加ff_req_grant、ff_rel_grant、ff_del_syncobj和ff_cre_syncobj函數(shù)。可以在文件option/syscall.c中找到示例。
4.7 _FS_TIMEOUT
設(shè)置超時時間,單位為系統(tǒng)時鐘滴答周期,當宏_FS_REENTRANT=0時,本設(shè)置無效。
4.8 _SYNC_t
定義同步對象類型,取決于O/S。比如HANDLE、ID、OS_EVENT*、SemaphoreHandle_t等等。需要在ff.c中包含O/S相關(guān)的頭文件。當宏_FS_REENTRANT=0時,本設(shè)置無效。
---------------------?
作者:zhzht19861011?
來源:CSDN?
原文:https://blog.csdn.net/zhzht19861011/article/details/52910541?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的[转载] FatFs模块功能配置选项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转载】【FS】FATFS文件系统介绍(
- 下一篇: VS2017 安装,建议大家都看一下这个