日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FatFs 之一 R0.13c版源码目录文件、函数、全配置项详解及移植说明

發(fā)布時(shí)間:2024/10/14 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FatFs 之一 R0.13c版源码目录文件、函数、全配置项详解及移植说明 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??FatFs 是用于小型嵌入式系統(tǒng)的通用 FAT/exFAT 文件系統(tǒng)模塊。FatFs 模塊的編寫符合 ANSI C(C89),并與磁盤 I/O 層完全分離,因此它獨(dú)立于硬件平臺。 它可以集成到資源有限的小型微控制器中,例如 8051,PIC,AVR,ARM,Z80,RX 等。此外,還提供用于微型微控制器的 Petit FatFs 模塊。
??看本文時(shí)需要有點(diǎn) FAT 文件系統(tǒng)的基礎(chǔ),可以參考FatFs 之三 FAT文件系統(tǒng)基礎(chǔ)、FAT 數(shù)據(jù)格式、引導(dǎo)、編碼。

變更記錄

??具體參見源碼文件中的 /source/00history.txt 即可!也可以去官網(wǎng)查看。從中我們可以看到修復(fù)的各問題,尤其是源碼文件的變動。例如:在 R0.13c 中,原來獨(dú)立文件 integer.h 中的內(nèi)容被直接包含在了 ff.h 中,原來的 integer.h 被刪除!對比如下圖所示:

源碼目錄文件

??目前,最新版本為 R0.13c。相比于之前的版本,源碼有了一定的變化(參見上圖)。FatFs 的源碼包中,文件非常簡單。其源碼目錄結(jié)構(gòu)如下所示(對于簡單的文件以注釋的形式給出,核心源碼下文會詳細(xì)說明):

FatFs R0.13c │ LICENSE.txt // 版權(quán)說明 ├─documents // 配套的說明文檔 └─source00history.txt // 更新歷史記錄00readme.txt // 對于以下每個(gè)文件的功能簡介diskio.c // FATFS 與硬件的接口實(shí)現(xiàn)文件模板diskio.h // FATFS 與硬件的接口實(shí)現(xiàn)文件模板ff.c // FATFS 核心源代碼ff.h // FATFS 核心源代碼ffconf.h // FATFS 的配置文件ffsystem.c // 定義了:可選的與操作系統(tǒng)對接的各接口相關(guān)實(shí)現(xiàn)示例。ffunicode.c // 提供了 Unicode 相關(guān)的轉(zhuǎn)換函數(shù)

以下主要介紹 source 目錄下的源代碼部分!

ffconf.h

??該文件是 FatFs 的配置文件。用戶需要根據(jù)自己的需求,來修改該文件中的各配置項(xiàng)。在 FatFs 默認(rèn)的配置文件中,很多我們常用的函數(shù)都是被禁用的,必須修改下面的配置項(xiàng)來啟用。這也就意味著,直接使用默認(rèn)的配置文件一般是無法滿足我們的需求的!接下來詳細(xì)介紹一下每個(gè)配置項(xiàng)的具體含義及使用時(shí)需要注意的問題。以下為 FatFs 源碼中默認(rèn)的配置項(xiàng)說明。

FatFs Functional Configurations

FFCONF_DEF

定義了 FatFs 的版本號,與實(shí)際功能無關(guān)。 主要是 FatFs 自身用來防止出錯(cuò)。具體在 ff.h 中,會檢查該文件中的改宏值是否與 ff.h 中版本一致。在 ff.h 中,有如下語句:

#if FF_DEFINED != FFCONF_DEF #error Wrong configuration file (ffconf.h). #endif

Function Configurations 功能配置

FF_FS_READONLY

定義 FatFs 是否工作在只讀模式。

  • 0:讀/寫。默認(rèn)值。
  • 1:只讀。只讀模式下,寫相關(guān)的函數(shù) f_write(), f_sync(), f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree() 以及其他和寫操作相關(guān)的函數(shù)都將被移除。

FF_FS_MINIMIZE

用來極限精簡 FatFs,此選項(xiàng)定義最小化級別,以刪除一些基本 API 函數(shù),如下所示

  • 0:所有基本的 API 函數(shù)都可用。默認(rèn)值。
  • 1:f_stat,f_getfree,f_unlink,f_mkdir,f_chmod,f_utime,f_truncate和f_rename函數(shù)被刪除。
  • 2:除了移除 1 中的函數(shù),還將移除 f_opendir, f_readdir and f_closedir
  • 3:除了移除 2 中的函數(shù),還將移除 f_lseek

FF_USE_STRFUNC

定義字符操作的相關(guān)函數(shù) f_gets(), f_putc(), f_puts() 及 f_printf() 是否有效。

  • 0:禁用所有的字符串相關(guān)操作函數(shù)。默認(rèn)值。
  • 1:啟用,但是沒有 LF-CRLF 轉(zhuǎn)換。即:不會忽略回車符 \r
  • 2:啟用,且?guī)в?LF-CRLF轉(zhuǎn)換。即:忽略回車符 \r

FF_USE_FIND

定義目錄讀取的相關(guān)函數(shù)(f_findfirst(), f_findnext())是否有效

  • 0: 禁用。默認(rèn)值
  • 1: 啟用
  • 2: 啟用,且會檢查是否匹配 altname[]。在 1 情況下,匹配條件只有文件名。此情況下,如果 altname[]匹配也認(rèn)為是匹配的。FF_FS_MINIMIZE 必須為 0 或 1

FF_USE_MKFS

定義函數(shù) f_mkfs() 是否有效

  • 0: 禁用。默認(rèn)值
  • 1: 啟用

FF_USE_FASTSEEK

定義快速 seek 模式是否有效。

  • 0: 禁用。默認(rèn)值
  • 1: 啟用。會額外記錄很多信息,以供在 f_lseek 中使用

FF_USE_EXPAND

定義函數(shù) f_expand() 是否有效

  • 0: 禁用。默認(rèn)值
  • 1: 啟用

FF_USE_CHMOD

定義屬性操作函數(shù) f_chmod() 和 f_utime() 是否有效

  • 0: 禁用。默認(rèn)值
  • 1: 啟用。此外必須定義 FF_FS_READONLY 為 0。即:不能開啟只讀模式

FF_USE_LABEL

定義卷標(biāo)函數(shù) f_getlabel() 和 f_setlabel() 是否有效

  • 0: 禁用。默認(rèn)值
  • 1: 啟用

FF_USE_FORWARD

定義函數(shù) f_forward() 是否有效

  • 0: 禁用。默認(rèn)值
  • 1: 啟用

Locale and Namespace Configurations 本地化和命名空間設(shè)置

FF_CODE_PAGE

指定要在目標(biāo)系統(tǒng)上使用的 OEM 代碼頁,錯(cuò)誤的編碼頁設(shè)置將導(dǎo)致讀寫文件失敗。支持的編碼頁如下:

取值編碼頁
0包括以下的所有代碼頁并由 f_setcp() 配置
437U.S.
720Arabic
737Greek
771KBL
775Baltic
850Latin 1
852Latin 2
855Cyrillic
857Turkish
860Portuguese
861Icelandic
862Hebrew
863Canadian French
864Arabic
865Nordic
866Russian
869Greek 2
932Japanese (DBCS)
936Simplified Chinese (DBCS)
949Korean (DBCS)
950Traditional Chinese (DBCS)

如果路徑名未使用任何非ASCII字符,則任何代碼頁設(shè)置之間都沒有區(qū)別,將它設(shè)置為 437 即可。

關(guān)于編碼頁,可以參考一下博文 FatFs 之 路徑規(guī)則、字符編碼、編碼頁、卷管理詳解。

FF_USE_LFN

??此選項(xiàng)可切換對長文件名(LFN)的支持。 啟用 LFN 時(shí),需要將 Unicode 支持模塊 ffunicode.c 添加到項(xiàng)目中。 當(dāng)使用堆棧作為工作緩沖區(qū)時(shí),請注意堆棧溢出。 當(dāng)使用堆內(nèi)存作為工作緩沖區(qū)時(shí),需要將 ffsystem.c 添加到項(xiàng)目中,并實(shí)現(xiàn)其中的內(nèi)存管理函數(shù) ff_memalloc 和 ff_memfree。

  • 0: 不啟用。默認(rèn)值。FF_MAX_LFN 無效
  • 1: 啟用。且 LFN 在代碼段 BSS 上具有靜態(tài)工作緩沖區(qū)。 始終不是線程安全的。
  • 2: 啟用。且在 STACK 上具有動態(tài)工作緩沖區(qū)的 LFN。需要注意棧溢出的問題。
  • 3: 啟用。且在 HEAP 上具有動態(tài)工作緩沖區(qū)的 LFN。此時(shí),必須要啟用 ffsystem.c 中的動態(tài)內(nèi)存申請函數(shù) ff_memalloc() 和 ff_memfree()

注意:長文件名與上面的編碼頁有關(guān)系!有些編碼頁就是 Unicode 字符集,也因此需要長文件名支持!

關(guān)于長文件名,可以參考一下博文 FatFs 之 路徑規(guī)則、字符編碼、編碼頁、卷管理詳解。

FF_MAX_LFN

??啟用 LFN ,會增加 (FF_MAX_LFN + 1) * 2 字節(jié)的固定緩沖區(qū)空間。具體使用方式見 ff.c 文件的開頭部分的宏定義即可。如果是 exFAT 文件系統(tǒng),則還需要再占用 (FF_MAX_LFN + 44) / 15 * 32 字節(jié)的緩沖區(qū)空間。且 exFAT 必須啟用長文件名支持
??FF_MAX_LFN 以 UTF-16 代碼單位定義工作緩沖區(qū)的大小,它可以在 12 到 255 的范圍內(nèi)。建議將 255 設(shè)置為完全支持LFN規(guī)范。長文件名是微軟的專利,使用中與上面的編碼有關(guān)系。

FF_LFN_UNICODE

??此選項(xiàng)可在 API 上切換文件名的字符編碼。選擇 Unicode 時(shí),FF_CODE_PAGE 實(shí)際上沒有任何意義,除了與遺留系統(tǒng)的兼容性,例如 MS-DOS 和任何不支持 LFN 的系統(tǒng)。 FatFs 支持代碼點(diǎn)達(dá)到 U + 10FFFF。

  • 0: ANSI/OEM in current CP (TCHAR = char)。默認(rèn)值
  • 1: Unicode in UTF-16 (TCHAR = WCHAR)
  • 2: Unicode in UTF-8 (TCHAR = char)
  • 3: Unicode in UTF-32 (TCHAR = DWORD)

此外,字符串輸入/輸出函數(shù)的行為也會受到此選項(xiàng)的影響。如果關(guān)閉了長文件名支持,則該項(xiàng)無效!

FF_LFN_BUF 和 FF_SFN_BUF

??這組選項(xiàng)在 FILINFO 結(jié)構(gòu)中定義了文件名成員 fname[] 和 altname[] 的大小,FILINFO 結(jié)構(gòu)用于讀取目錄項(xiàng)。這些值應(yīng)該足夠讀取文件名。讀取文件名的最大可能長度取決于API上的字符編碼,如下所示:

EncodingLFN lengthSFN length
ANSI/OEM at SBCS255 items12 items
ANSI/OEM at DBCS510 items12 items
Unicode in UTF-16/32255 items12 items
Unicode in UTF-8765 items34 items

如果名稱成員的大小不足以用于LFN,則該項(xiàng)目將被視為沒有LFN。 如果未啟用LFN,則這些選項(xiàng)無效。

FF_STRF_ENCODE

??當(dāng) API 上的字符編碼為 Unicode(FF_LFN_UNICODE> = 1)時(shí),字符串 I/O 函數(shù),f_gets,f_putc,f_puts和 f_printf 將轉(zhuǎn)換其中的字符編碼。 此選項(xiàng)定義了要通過這些函數(shù)讀取/寫入的文件的字符編碼。 當(dāng)LFN 未啟用或 FF_LFN_UNICODE 為 0 時(shí),字符串函數(shù)在沒有任何編碼轉(zhuǎn)換的情況下工作,此選項(xiàng)無效。

取值文件字符編碼
0ANSI/OEM in current code page
1Unicode in UTF-16LE
2Unicode in UTF-16BE
3Unicode in UTF-8

FF_FS_RPATH

定義是否支持相對路徑

  • 0: 禁用。且相對路徑相關(guān)的函數(shù)也被移除
  • 1: 支持。f_chdir() 和 f_chdrive() 有效
  • 2: 支持。除了提供 1 中的函數(shù),還提供 f_getcwd()

Volume/Drive Configurations 驅(qū)動器/卷配置

FF_VOLUMES

此選項(xiàng)配置要使用的卷數(shù)(邏輯驅(qū)動器最多10個(gè)),最小值 1。

FF_STR_VOLUME_ID

??此選項(xiàng)定義對字符串卷ID的支持。當(dāng)為驅(qū)動器前綴啟用任意卷ID字符串時(shí),可以使用 FF_VOLUME_STRS 預(yù)定義的字符串或用戶定義的字符串作為路徑名稱中的驅(qū)動器前綴。無論該選項(xiàng)是什么,數(shù)字驅(qū)動器號總是有效的,而且該選項(xiàng)還可以啟用驅(qū)動器前綴的任何一種格式。

取值描述示例
0僅 DOS/Windows 風(fēng)格的數(shù)字ID前綴可用0:/filename
1DOS/Windows 風(fēng)格的字符串ID前綴也可用flash:/filename
2Unix 風(fēng)格的字符串ID前綴也可用/flash/filename

FF_VOLUME_STRS

??此選項(xiàng)定義每個(gè)邏輯驅(qū)動器的卷ID字符串。項(xiàng)目數(shù)不得少于FF_VOLUMES。 卷ID字符串的有效字符是A-Z,a-z和0-9,但是,它們在不區(qū)分大小寫的情況下進(jìn)行比較。
??如果 FF_STR_VOLUME_ID == 0,則此選項(xiàng)無效。 如果 FF_STR_VOLUME_ID > = 1且未定義此選項(xiàng),則需要定義用戶定義的卷字符串表,如下所示。 該表不應(yīng)動態(tài)修改。

/* User defined volume ID strings for 0: 1: 2: 3: ... */ const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sdc","usb"};

FF_MULTI_PARTITION

??禁用(0)或啟用(1)。 此選項(xiàng)可切換多分區(qū)功能。 默認(rèn)情況下(0),每個(gè)邏輯驅(qū)動器號綁定到相同的物理驅(qū)動器號,并且僅安裝物理驅(qū)動器中的卷。 啟用后,每個(gè)邏輯驅(qū)動器都綁定到用??戶定義的分區(qū)解析表 VolToPart [] 中列出的物理驅(qū)動器上的分區(qū)。 此外,還將提供 f_fdisk功能。

FF_MIN_SS, FF_MAX_SS

??這組選項(xiàng)定義了低級磁盤 I/O 接口,disk_read 和 disk_write函數(shù)使用的扇區(qū)大小范圍。 有效值為 512、1024、2048 和 4096。FF_MIN_SS定義最小扇區(qū)大小,FF_MAX_SS 定義最大扇區(qū)大小。 始終為存儲卡和硬盤設(shè)置 512。 但是,板載閃存和某些類型的光學(xué)介質(zhì)可能需要更大的值。 當(dāng)FF_MAX_SS > FF_MIN_SS 時(shí),啟用對可變扇區(qū)大小的支持,并且需要對 disk_ioctl 函數(shù)實(shí)現(xiàn) GET_SECTOR_SIZE 命令。

FF_USE_TRIM

定義是否支持 ATA-TRIM

  • 0: 禁止
  • 1: 支持。此時(shí),disk_ioctl() 函數(shù)需要實(shí)現(xiàn) CTRL_TRIM 命令。

FF_FS_NOFSINFO

??取值 0 到 3。如果您需要知道FAT32 卷上的正確可用空間,請?jiān)O(shè)置此選項(xiàng)的第0位,并且在卷 mount 后第一時(shí)間執(zhí)行 f_getfree函數(shù),將強(qiáng)制進(jìn)行完整的FAT掃描。 位1 控制最后分配的簇編號的使用。

取值描述
bit0=0Use free cluster count in the FSINFO if available.
bit0=1Do not trust free cluster count in the FSINFO.
bit1=0Use last allocated cluster number in the FSINFO to find a free cluster if available.
bit1=1Do not trust last allocated cluster number in the FSINFO.

System Configurations (嵌入式)操作系統(tǒng)相關(guān)的配置

FF_FS_TINY

??取值為 正常(0)或微小(1)。 在微小的配置中,文件對象 FIL 的大小減少了 FF_MAX_SS 字節(jié)。 不是從文件對象中消除私有數(shù)據(jù)緩沖區(qū),而是將文件系統(tǒng)對象 FATFS 中的公共扇區(qū)緩沖區(qū)用于文件數(shù)據(jù)傳輸。

FF_FS_EXFAT

??此選項(xiàng)定義對 exFAT 文件系統(tǒng)的支持,Enabled(1)或 Disabled(0)。開啟之后,將同時(shí)支持 exFAT、FAT/FAT32。要啟用 exFAT,還必須啟用LFN 并為全功能 exFAT 功能配置 FF_LFN_UNICODE> = 1 和 FF_MAX_LFN == 255。 請注意,由于需要64位整數(shù)類型,啟用 exFAT會丟棄ANSI C(C89)兼容性。

FF_FS_NORTC

??此選項(xiàng)控制時(shí)間戳功能,0:使用RTC;1:不使用 RTC。 如果系統(tǒng)沒有任何 RTC 功能或不需要有效時(shí)間戳,請將 FF_FS_NORTC 設(shè)置為1 以禁用時(shí)間戳功能。此時(shí),FatFs 修改的每個(gè)對象都有一個(gè)由 FF_NORTC_MON,FF_NORTC_MDAY 和 FF_NORTC_YEAR 定義的固定時(shí)間戳。 要使用時(shí)間戳功能,請?jiān)O(shè)置 FF_FS_NORTC == 0 并將 get_fattime 函數(shù)添加到項(xiàng)目中以從 RTC 獲取當(dāng)前時(shí)間。 此選項(xiàng)對只讀配置無效。

FF_NORTC_MON, FF_NORTC_MDAY, FF_NORTC_YEAR

這組選項(xiàng)定義了在無 RTC 系統(tǒng)中使用的時(shí)間。 此選項(xiàng)在只讀配置或 FF_FS_NORTC == 0 時(shí)無效。

FF_FS_LOCK

??選項(xiàng)切換文件鎖定功能,以控制打開重復(fù)文件和打開對象的非法操作。 請注意,文件鎖定功能獨(dú)立于重入。 只讀配置時(shí),此選項(xiàng)必須為 0。

取值描述
0禁用文件鎖定功能。 為避免文件操作錯(cuò)誤導(dǎo)致文件崩潰,應(yīng)用程序需要避免非法打開,刪除和重命名為打開的對象。
>0啟用文件鎖定功能。 該值定義在文件鎖定控制下可以同時(shí)打開多少文件/子目錄。 使用FR_LOCKED將拒絕對打開對象的非法操作。

FF_FS_REENTRANT

??此選項(xiàng)可切換 FatFs 模塊本身的重入(線程安全),取值為 禁用(0)或啟用(1)。 請注意,對不同卷的文件/目錄訪問始終是可重入的,無論此選項(xiàng)如何,它都可以同時(shí)工作。但是,卷管理函數(shù) f_mount,f_mkfs 和 f_fdisk 始終不可重入。
??只有文件/目錄訪問同一個(gè)卷,換句話說,獨(dú)占使用每個(gè)文件系統(tǒng)對象,才能受此功能的控制。 要啟用此功能,用戶需要將 ffsystem.c 添加到自己的項(xiàng)目中,同時(shí)實(shí)現(xiàn)其中的同步處理程序 ff_req_grant,ff_rel_grant,ff_del_syncobj和ff_cre_syncobj。

FF_FS_TIMEOUT

??當(dāng)?shù)却龝r(shí)間太長時(shí),使用 FF_FS_TIMEOUT中止文件功能的時(shí)間滴答數(shù)。 當(dāng) FF_FS_REENTRANT == 0 時(shí),此選項(xiàng)無效。

FF_SYNC_t

??此選項(xiàng)定義 OS 相關(guān)的同步對象類型。 例如 HANDLE,ID,OS_EVENT *,SemaphoreHandle_t等。用于OS 定義的頭文件需要包含在 ff.c范圍內(nèi)的某處。 當(dāng) FF_FS_REENTRANT == 0 時(shí),此選項(xiàng)無效。

ff.c/h

??這兩個(gè)文件是 FatFs 的核心源碼文件。所有的 FatFs 的操作函數(shù)均位于這個(gè)了文件中。我們在使用時(shí),使用的 API 也均是出自于這兩個(gè)文件。
?? 其中各函數(shù)比較多,后續(xù)單獨(dú)來介紹!

ffsystem.c

??當(dāng)使用了操作系統(tǒng)時(shí),該文件必須要由用戶來實(shí)現(xiàn)!源碼包中的 ffsystem.c 給出了需要實(shí)現(xiàn)的各函數(shù)接口!用戶需要根據(jù)自己使用的操作系統(tǒng),修改其中的各接口的實(shí)現(xiàn)。注意:即使不使用系統(tǒng),如果我們啟用了長文件名,且長文件名的配置為 3,則也必須要實(shí)現(xiàn)以下兩個(gè)動態(tài)內(nèi)存申請函數(shù)! 下面我們看看該文件中的各個(gè)函數(shù)接口

動態(tài)內(nèi)存申請

??該文件中的第一部分函數(shù)就是動態(tài)內(nèi)存申請接口。當(dāng)然,其受制于在ffconf.h中的配置項(xiàng)FF_USE_LFN的限制。也就說,如果不使用長文件名,則 FatFs 不需要使用動態(tài)內(nèi)存申請。 標(biāo)準(zhǔn)接口和標(biāo)準(zhǔn)C語言類似,就是名字稍有變化,有以下兩個(gè):

  • void* ff_memalloc (UINT msize); 申請動態(tài)內(nèi)存
  • msize: 要申請的內(nèi)存的大小
  • 返回值:成功,返回指向申請的內(nèi)存的指針;失敗返回空指針
  • void ff_memfree (void* mblock); 釋放之前申請的動態(tài)內(nèi)存
  • mblock: 之前申請的動態(tài)內(nèi)存的指針
  • 返回值: 無
  • ??為什么要自定義這兩個(gè)函數(shù)?在使用了嵌入式操作系統(tǒng)之后,嵌入式操作系統(tǒng)一般都會提供對內(nèi)存的管理功能。其一般也會重新定義動態(tài)內(nèi)存的相關(guān)函數(shù),而不是直接使用標(biāo)準(zhǔn) C 語言定義的 malloc 和 free 函數(shù)。

    可重入性

    ??該文件中的第二部分函數(shù)是與系統(tǒng)緊密相關(guān)的相關(guān)的函數(shù)接口。這主要用來處理在多任務(wù)操作系統(tǒng)中,多線程操作相關(guān)的問題。在單線程進(jìn)程(單任務(wù))中,只存在一個(gè)控制流。因此,這些進(jìn)程所執(zhí)行的代碼無需重入或著說是線程安全的。但是在多線程(多任務(wù))程序中,相同的功能和資源可以通過多個(gè)控制流并發(fā)訪問。
    ??FatFs 使用了同步對象(Synchronization Object)這個(gè)稱呼,在實(shí)際系統(tǒng)中,通常為 信號量 或者 互斥量。當(dāng)然,也不局限于這兩種。
    ??以下為 FatFs 默認(rèn)提供的示例代碼。其中給出了常用的系統(tǒng)下的基本操作。如果使用其中的一種,則直接修改注釋即可,否則,需要根據(jù)自己使用的系統(tǒng)來修改。

    創(chuàng)建同步對象

    該函數(shù)在 f_mount() 函數(shù)中被調(diào)用,用來為指定的卷創(chuàng)建一個(gè)同步對象。

    int ff_cre_syncobj ( /* 1:成功, 0:失敗 */BYTE vol, /* 對應(yīng)卷(邏輯驅(qū)動器號) */FF_SYNC_t* sobj /* 返回創(chuàng)建的同步信號量的指針 */ ) {/* Win32 */*sobj = CreateMutex(NULL, FALSE, NULL);return (int)(*sobj != INVALID_HANDLE_VALUE);/* uITRON */ // T_CSEM csem = {TA_TPRI,1,1}; // *sobj = acre_sem(&csem); // return (int)(*sobj > 0);/* uC/OS-II */ // OS_ERR err; // *sobj = OSMutexCreate(0, &err); // return (int)(err == OS_NO_ERR);/* FreeRTOS */ // *sobj = xSemaphoreCreateMutex(); // return (int)(*sobj != NULL);/* CMSIS-RTOS */ // *sobj = osMutexCreate(&Mutex[vol]); // return (int)(*sobj != NULL); }

    刪除同步對象

    這個(gè)函數(shù)在f mount()函數(shù)中調(diào)用,以刪除使用ff_cre_syncobj ()函數(shù)創(chuàng)建的同步對象。

    int ff_del_syncobj ( /* 返回值:1:成功, 0:刪除失敗 */FF_SYNC_t sobj /* 要刪除的同步對象 */ ) {/* Win32 */return (int)CloseHandle(sobj);/* uITRON */ // return (int)(del_sem(sobj) == E_OK);/* uC/OS-II */ // OS_ERR err; // OSMutexDel(sobj, OS_DEL_ALWAYS, &err); // return (int)(err == OS_NO_ERR);/* FreeRTOS */ // vSemaphoreDelete(sobj); // return 1;/* CMSIS-RTOS */ // return (int)(osMutexDelete(sobj) == osOK); }

    鎖定卷

    此函數(shù)在輸入文件函數(shù)時(shí)調(diào)用,以鎖定卷。

    int ff_req_grant ( /* 返回值:1:獲取鎖定許可, 0:失敗 */FF_SYNC_t sobj /* Sync object to wait */ ) {/* Win32 */return (int)(WaitForSingleObject(sobj, FF_FS_TIMEOUT) == WAIT_OBJECT_0);/* uITRON */ // return (int)(wai_sem(sobj) == E_OK);/* uC/OS-II */ // OS_ERR err; // OSMutexPend(sobj, FF_FS_TIMEOUT, &err)); // return (int)(err == OS_NO_ERR);/* FreeRTOS */ // return (int)(xSemaphoreTake(sobj, FF_FS_TIMEOUT) == pdTRUE);/* CMSIS-RTOS */ // return (int)(osMutexWait(sobj, FF_FS_TIMEOUT) == osOK); }

    釋放卷

    此函數(shù)在離開文件函數(shù)以解鎖卷時(shí)調(diào)用。

    void ff_rel_grant (FF_SYNC_t sobj /* Sync object to be signaled */ ) {/* Win32 */ReleaseMutex(sobj);/* uITRON */ // sig_sem(sobj);/* uC/OS-II */ // OSMutexPost(sobj);/* FreeRTOS */ // xSemaphoreGive(sobj);/* CMSIS-RTOS */ // osMutexRelease(sobj); }

    ffunicode.c

    ??該文件很大,用來處理 Unicode 編碼相關(guān)的功能。如果在以上配置中,啟用了相關(guān)功能,則需要將該文件添加到自己的項(xiàng)目中。用戶無需修改其中的任何內(nèi)容。所有函數(shù)均由 FatFs 調(diào)用!
    ?? FatFs 建議,如果系統(tǒng)中存在 Unicode 相關(guān)的處理函數(shù),則應(yīng)該以系統(tǒng)自帶的為準(zhǔn),盡量減少對該文件的使用即可!

    diskio.c/h

    ??由于 FatFs 模塊是獨(dú)立于平臺和存儲介質(zhì)的文件系統(tǒng)層,因此它與物理設(shè)備(例如存儲卡,硬盤和任何類型的存儲設(shè)備)完全分離。 低級設(shè)備控制模塊不是 FatFs 模塊的一部分,需要由使用者提供。
    ??diskio.c/h 這兩個(gè)文件用于實(shí)現(xiàn) FatFs 與硬件的交互。其中定義了 FatFs 與硬件交互使用的接口。FatFs 中的這兩個(gè)文件僅僅是個(gè)模板,用戶需要根據(jù)需要來實(shí)現(xiàn)其中的各接口,并不能直接使用!其中:

    • diskio.h: 其中聲明了各接口的形式以及一些 FatFs 使用的宏,用戶不得更改!ff.c 直接包含該頭文件,并使用該文件中定義的一些內(nèi)容!
    • diskio.c: 其中存放了需要用戶實(shí)現(xiàn)的各接口!用戶需要根據(jù)自己的硬件平臺(RAM、MMC、USB等)以及 ffcong.h中的配置(例如,配置項(xiàng) FF_USE_TRIM定義為 1,則需要在 disk_ioctl() 函數(shù)中實(shí)現(xiàn)對 CTRL_TRIM 命令的處理)

    ??一般的使用了 FatFs 的第三方庫,都會提供該文件的實(shí)現(xiàn)!我們可以參考。例如,在 STM32 的USB 驅(qū)動庫中,有個(gè)名為 usbh_msc_fatfs.c 的文件,它其實(shí)就是 diskio.c 改了個(gè)名字而已。里面的函數(shù)就是 diskio.h 所聲明的那些函數(shù)!也因此在使用 STM32 的USB 驅(qū)動庫 + FatFs 時(shí),我們不再需要 diskio.c了,但是 diskio.h 仍然是必須的!
    下面我們來看看具體的各函數(shù)

    DSTATUS disk_status (BYTE pdrv);

    FatFs 調(diào)用此函數(shù),查詢當(dāng)前驅(qū)動器狀態(tài)

    • 參數(shù):
      • pdrv:用于標(biāo)識目標(biāo)設(shè)備的物理驅(qū)動器號。 單驅(qū)動系統(tǒng)始終為零。
    • 返回值:當(dāng)前驅(qū)動器狀態(tài)以下面描述的狀態(tài)標(biāo)志的組合返回(狀態(tài)宏值是按位定義并使用的,具體見 diskio.h)。 FatFs 僅使用了 STA_NOINIT 和 STA_PROTECT 這兩個(gè)。
      • STA_NOINIT:表示設(shè)備尚未初始化且未準(zhǔn)備好工作。 此標(biāo)志在系統(tǒng)重置,介質(zhì)刪除或 disk_initialize 功能失敗時(shí)設(shè)置。 在disk_initialize函數(shù)成功后清除它。 必須捕獲異步發(fā)生的任何介質(zhì)更改并將其反映到狀態(tài)標(biāo)志,否則自動安裝功能將無法正常工作。 如果系統(tǒng)不支持介質(zhì)更改檢測,則應(yīng)用程序需要在每次更改介質(zhì)后使用 f_mount 函數(shù)顯式重新裝入卷。
      • STA_NODISK:表示驅(qū)動器中沒有介質(zhì)。 在固定磁盤驅(qū)動器上清除這項(xiàng)始終被清除。 請注意,FatFs 不會使用此標(biāo)志。
      • STA_PROTECT:表示介質(zhì)受寫保護(hù)。 在沒有寫保護(hù)功能的驅(qū)動器上始終清除此值。 如果設(shè)置了STA_NODISK,則此項(xiàng)無效。

    DSTATUS disk_initialize (BYTE pdrv);

    FatFs 調(diào)用此函數(shù),以初始化存儲設(shè)備

    • 參數(shù):
      • pdrv:用于標(biāo)識目標(biāo)設(shè)備的物理驅(qū)動器號。 單驅(qū)動系統(tǒng)始終為零。
    • 返回值:與 disk_status 的返回值相同!

    此函數(shù)初始化存儲設(shè)備并使其準(zhǔn)備好進(jìn)行通用讀/寫。 當(dāng)函數(shù)成功時(shí),返回值中的STA_NOINIT標(biāo)志被清除。此功能需要受FatFs模塊的控制。 應(yīng)用程序不得調(diào)用此函數(shù),否則可能會破壞卷上的FAT結(jié)構(gòu)。 要重新初始化文件系統(tǒng),請改用f_mount函數(shù)。

    DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);

    FatFs 調(diào)用此函數(shù),以從存儲設(shè)備的扇區(qū)讀取數(shù)據(jù)

    • 參數(shù):
      • pdrv:用于標(biāo)識目標(biāo)設(shè)備的物理驅(qū)動器號。
      • buff:指向存儲讀取數(shù)據(jù)的字節(jié)數(shù)組的第一項(xiàng)的指針。 讀取數(shù)據(jù)的大小將是扇區(qū)大小*計(jì)數(shù)字節(jié)。
      • sector:32 位 LBA(Logical Block Address,邏輯區(qū)塊地址) 的開始扇區(qū)號。
      • count:要讀取的扇區(qū)數(shù)。
    • 返回值:
      • RES_OK:成功
      • RES_ERROR:在讀取操作期間發(fā)生了不可恢復(fù)的硬錯(cuò)誤。
      • RES_PARERR:無效的參數(shù)
      • RES_NOTRDY:設(shè)備尚未初始化。

    ??對通用存儲設(shè)備(例如存儲卡,hadddisk和光盤)的讀/寫操作是以稱為扇區(qū)的數(shù)據(jù)字節(jié)塊為單位完成的。 FatFs支持512到4096字節(jié)范圍內(nèi)的扇區(qū)大小。 當(dāng)FatF配置為固定扇區(qū)大小(FF_MIN_SS == FF_MAX_SS,這是大多數(shù)情況)時(shí),讀/寫功能必須以該扇區(qū)大小工作。 當(dāng)FatFs配置為可變扇區(qū)大小(FF_MIN_SS <FF_MAX_SS)時(shí),在disk_initialize函數(shù)成功后立即使用disk_ioctl函數(shù)查詢media的扇區(qū)大小。
    ??buff 指定的內(nèi)存地址并不總是與字邊界對齊,因?yàn)閰?shù)定義為BYTE* 類型。 未對齊的讀/寫請求可以在直接傳輸時(shí)發(fā)生。 如果總線體系結(jié)構(gòu)(尤其是DMA控制器)不允許未對齊的內(nèi)存訪問,則應(yīng)在此函數(shù)中處理該問題。 下面介紹了一些解決方法以避免此問題。

    • 在此函數(shù)中使用某些方法將字轉(zhuǎn)換為字節(jié)來進(jìn)行傳輸。
    • 在 f_read() 調(diào)用中,避免包含整個(gè)扇區(qū)的長讀取請求。 - 任何直接傳輸都不會發(fā)生。
    • 在 f_read(fp, dat, btw, bw) 調(diào)用中,確保 (((UINT)dat & 3) == (f_tell(fp) & 3)) 為真。 - 保證了 buff 的字對齊。

    此外,DMA 可能無法訪問內(nèi)存區(qū)域。如果內(nèi)存區(qū)域位于通常用于堆棧的緊密耦合的內(nèi)存中,情況就是這樣。使用雙緩沖傳輸,或者避免將任何文件 I/O 緩沖區(qū)、FATFS 和 FIL 結(jié)構(gòu)定義為堆棧中的局部變量。
    通常,多扇區(qū)讀請求不能被分割成對存儲設(shè)備的單扇區(qū)事務(wù),否則讀吞吐量會變得更差。

    DRESULT disk_write (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);

    FatFs 調(diào)用此函數(shù),將數(shù)據(jù)寫入存儲設(shè)備的扇區(qū)

    • 參數(shù):
      • pdrv:用于標(biāo)識目標(biāo)設(shè)備的物理驅(qū)動器號。
      • buff:指向要寫入的字節(jié)數(shù)組的第一項(xiàng)的指針。 要寫入的數(shù)據(jù)大小是扇區(qū)大小*計(jì)數(shù)字節(jié)。
      • sector:32 位 LBA(Logical Block Address,邏輯區(qū)塊地址) 的開始扇區(qū)號。
      • count:要寫的扇區(qū)數(shù)。
    • 返回值:
      • RES_OK:成功
      • RES_ERROR:在寫入操作期間發(fā)生了不可恢復(fù)的硬錯(cuò)誤。
      • RES_WRPRT:介質(zhì)是寫保護(hù)的
      • RES_PARERR:無效的參數(shù)
      • RES_NOTRDY:設(shè)備尚未初始化。

    ??指定的內(nèi)存地址并不總是與字邊界對齊,因?yàn)閰?shù)定義為 BYTE*。 有關(guān)更多信息,請參閱 disk_read 函數(shù)的說明。
    ??通常,多扇區(qū)寫請求(計(jì)數(shù)> 1)不得拆分為存儲設(shè)備的單扇區(qū)事務(wù),否則文件寫吞吐量將大幅降低。
    ??FatFs期望磁盤控制層的寫入功能延遲。 該函數(shù)返回后,寫操作可能并沒有完成,因?yàn)槊襟w介質(zhì)可能正在執(zhí)行寫操作或者 僅僅是將數(shù)據(jù)放到了媒體介質(zhì)的緩沖區(qū)中。但是從此函數(shù)返回后,buff 中的數(shù)據(jù)將無效。 寫完成請求由 disk_ioctl 函數(shù)的 CTRL_SYNC 命令完成。 因此,如果實(shí)現(xiàn)延遲寫入功能,則將改善文件系統(tǒng)的寫入吞吐量。

    DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);

    FatFs 調(diào)用此函數(shù),來控制設(shè)備特定的功能和除通用讀/寫之外的其他功能。

    • 參數(shù):
      • pdrv:用于標(biāo)識目標(biāo)設(shè)備的物理驅(qū)動器號。
      • cmd:命令代碼,在 diskio.h 中有定義。
      • buff:指向參數(shù)的指針,是否有意義取決于命令代碼。 如果命令代碼不需要傳遞該參數(shù),則忽略即可。
    • 返回值:
      • RES_OK (0):成功
      • RES_ERROR:出錯(cuò)
      • RES_PARERR:命令代碼或參數(shù)無效。
      • RES_NOTRDY:設(shè)備尚未初始化。

    FatFs模塊僅需要五個(gè)與設(shè)備無關(guān)的命令,如下所述:

    命令描述
    CTRL_SYNC用來確保設(shè)備已完成了掛起的寫入過程。 如果磁盤 I/O 模塊或存儲設(shè)備具有回寫高速緩存,則必須立即將標(biāo)記為臟的高速緩存數(shù)據(jù)寫回介質(zhì)。 如果在 disk_write 函數(shù)內(nèi)完成對介質(zhì)的每個(gè)寫操作,此命令中無需任何處理。
    GET_SECTOR_COUNT將驅(qū)動器上的可用扇區(qū)數(shù)返回到 buff 指向的 DWORD 類型的變量中。 f_mkfs 和 f_fdisk 函數(shù)使用此命令來確定要創(chuàng)建的卷/分區(qū)大小。 在配置了 FF_USE_MKFS == 1 時(shí),必須要實(shí)現(xiàn)對該名利的處理。
    GET_SECTOR_SIZE將設(shè)備的扇區(qū)大小返回到 buff 指向的 WORD 類型的變量中。 此命令的有效返回值為 512,1024,2048和4096. 僅當(dāng)FF_MAX_SS > FF_MIN_SS 時(shí)才需要此命令。 當(dāng) FF_MAX_SS == FF_MIN_SS 時(shí),從不使用此命令,并且設(shè)備必須以該扇區(qū)大小工作。
    GET_BLOCK_SIZE將以扇區(qū)為單位將閃存介質(zhì)的擦除塊大小返回到 buff 指向的 DWORD 類型的變量中。 允許值為 1 到 32768的 2 次方。如果擦除塊大小未知或非閃存介質(zhì),則返回1。 該命令僅由 f_mkfs 函數(shù)使用,它嘗試對齊擦除塊邊界上的數(shù)據(jù)區(qū)域。 在FF_USE_MKFS == 1 時(shí) 必須實(shí)現(xiàn)對改命令的處理
    CTRL_TRIM通知設(shè)備不再需要扇區(qū)塊上的數(shù)據(jù),并且可以擦除它。 扇區(qū)塊由 buff 指向的DWORD數(shù)組 {,} 指定。 這是一個(gè)與 ATA 設(shè)備修剪完全相同的命令。 如果不支持此功能或閃存設(shè)備不支持此命令,則無需執(zhí)行此操作。 FatFs 不檢查結(jié)果代碼,即使扇區(qū)塊沒有被很好地擦除,文件功能也不會受到影響。 該命令在刪除簇和 在 f_mkfs 函數(shù)中被調(diào)用。 在 FF_USE_TRIM == 1 時(shí)必須實(shí)現(xiàn)對改命令的處理

    FatFs從不使用任何依賴于設(shè)備的命令或用戶定義的命令。下表顯示了一個(gè)可能對某些應(yīng)用程序有用的非標(biāo)準(zhǔn)命令示例。

    命令描述
    CTRL_FORMAT在媒體上創(chuàng)建物理格式。 如果 buff 不為 null,則它是指向進(jìn)度通知的回調(diào)函數(shù)的指針。
    CTRL_POWER_IDLE將設(shè)備置于空閑狀態(tài)。 如果設(shè)備通過通用讀/寫功能進(jìn)入活動狀態(tài),則可能不會設(shè)置當(dāng)前狀態(tài)標(biāo)志中的STA_NOINIT。
    CTRL_POWER_OFF將設(shè)備置為關(guān)閉狀態(tài)。 如果需要,關(guān)閉設(shè)備電源并取消初始化設(shè)備接口。 必須設(shè)置當(dāng)前狀態(tài)標(biāo)志中的STA_NOINIT。 設(shè)備通過disk_initialize功能進(jìn)入活動狀態(tài)。
    CTRL_LOCK鎖定介質(zhì)彈出機(jī)制。
    CTRL_UNLOCK解鎖媒體彈出機(jī)制。
    CTRL_EJECT彈出介質(zhì)盒。 功能成功后,將設(shè)置狀態(tài)標(biāo)志中的STA_NOINIT和STA_NODISK。
    CTRL_GET_SMART閱讀SMART信息。
    MMC_GET_TYPE獲取卡類型。 類型標(biāo)志bit0:MMCv3,bit1:SDv1,bit2:SDv2 +和bit3:LBA存儲在buff指向的BYTE變量中。 (MMC / SDC特定命令)
    MMC_GET_CSD將CSD寄存器讀入buff指向的16字節(jié)緩沖區(qū)。 (MMC / SDC特定命令)
    MMC_GET_CID將CID寄存器讀入buff指向的16字節(jié)緩沖區(qū)。 (MMC / SDC特定命令)
    MMC_GET_OCR將OCR寄存器讀入buff指向的4字節(jié)緩沖區(qū)。 (MMC / SDC特定命令)
    MMC_GET_SDSTAT將SDSTATUS寄存器讀入buff指向的64字節(jié)緩沖區(qū)。 (SDC特定命令)
    ATA_GET_REV將修訂字符串轉(zhuǎn)換為buff指向的16字節(jié)緩沖區(qū)。 (ATA / CFC特定命令)
    ATA_GET_MODEL將模型字符串放入buff指向的40字節(jié)緩沖區(qū)中。 (ATA / CFC特定命令)
    ATA_GET_SN將序列號字符串放入buff指向的20字節(jié)緩沖區(qū)中。 (ATA / CFC特定命令)
    ISDIO_READ讀取由buff指向的命令結(jié)構(gòu)指定的iSDIO寄存器塊。 (FlashAir特定命令)
    ISDIO_WRITE將數(shù)據(jù)塊寫入由buff指向的命令結(jié)構(gòu)指定的iSDIO寄存器。 (FlashAir特定命令)
    ISDIO_MRITE更改由buff指向的命令結(jié)構(gòu)指定的iSDIO寄存器中的位。 (FlashAir特定命令)

    移植說明

    第一步:源碼文件整理

    ??根據(jù)上面的介紹,其中,ff.c、ff.h、ffconf.h、diskio.c、diskio.h 這六個(gè)文件是最基本的,必須要包含在我們的項(xiàng)目中!除此之外,根據(jù)自己的配置:

    • 如果需要 FatFs 支持可重入, 則 必須要包含 ffsystem.c, 且必須實(shí)現(xiàn) ffsystem.c 中的 ff_req_grant(), ff_rel_grant(), ff_del_syncobj() 和 ff_cre_syncobj() 這四個(gè)函數(shù)!
    • 如果需要 FatFs 支持長文件名,則必須要包含 ffunicode.c,如果配置長文件名模式為 3 (FF_USE_LFN == 3),則必須同時(shí)包含 ffsystem.c, 且必須實(shí)現(xiàn) ffsystem.c 中的 ff_memalloc() 和 ff_memfree() 這兩個(gè)函數(shù)。

    第二步:修改配置

    ??根據(jù)自己的需要修改 ffconf.h 中的各個(gè)配置項(xiàng)!

    第三步:實(shí)現(xiàn)必要的函數(shù)

    ??首先要實(shí)現(xiàn) diskio.c/h 其中各接口!需要注意的是,一般的使用了 FatFs 的第三方庫,都會提供該文件的實(shí)現(xiàn)!例如,在 STM32 的USB 驅(qū)動庫中,有個(gè)名為 usbh_msc_fatfs.c 的文件,它其實(shí)就是 diskio.c 改了個(gè)名字而已。里面的函數(shù)就是 diskio.h 所聲明的那些函數(shù)!也因此在使用 STM32 的USB 驅(qū)動庫 + FatFs 時(shí),我們不再需要 diskio.c了,但是 diskio.h 仍然是必須的!
    下表顯示了需要實(shí)現(xiàn)的函數(shù)(部分需要看自己在ffconf.h 的配置):

    在 FatFs 源碼的 diskio.c 中給出的示例是以默認(rèn)的配置來說的,在 ffconf.h 中,有如下配置:

    /*---------------------------------------------------------------------------/ / Drive/Volume Configurations 驅(qū)動器/卷配置 /---------------------------------------------------------------------------*//* 要使用的卷(邏輯驅(qū)動器)數(shù)。 取值 1 ~ 10*/ #define FF_VOLUMES 1 /* Number of volumes (logical drives) to be used. (1-10) *//* 這兩個(gè)宏值用來給每個(gè)卷定義一個(gè)名字* 0: 不啟用卷名字,默認(rèn)值* 1 或 2: 對應(yīng)的卷名由 FF_VOLUME_STRS 給出。 FF_VOLUME_STRS 的個(gè)數(shù)必須小于 FF_VOLUMES。* 名字的規(guī)則為 A-Z, a-z and 0-9 組合,且字母開頭。不區(qū)分大小寫!* 如果定義為了 >= 1 但是沒有定義 FF_VOLUME_STRS,則 用戶必須自己定義 const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",...* * 在 ff.c 中,我們可以發(fā)現(xiàn)如下語句:* #if FF_STR_VOLUME_ID* #ifdef FF_VOLUME_STRS* static const char* const VolumeStr[FF_VOLUMES] = {FF_VOLUME_STRS};* #endif* #endif*/ #define FF_STR_VOLUME_ID 0 #define FF_VOLUME_STRS "RAM","NAND","CF","SD","SD2","USB","USB2","USB3" /* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings. / When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive / number in the path name. FF_VOLUME_STRS defines the volume ID strings for each / logical drives. Number of items must not be less than FF_VOLUMES. Valid / characters for the volume ID strings are A-Z, a-z and 0-9, however, they are / compared in case-insensitive. If FF_STR_VOLUME_ID >= 1 and FF_VOLUME_STRS is / not defined, a user defined volume string table needs to be defined as: / / const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",... */

    我們必須根據(jù)自己的需求來更改。結(jié)合上文對于這個(gè)文件中每個(gè)函數(shù)的說明來實(shí)現(xiàn)即可!

    第四步:實(shí)現(xiàn) get_fattime

    ??如果在 ffconf.h 中配置了 FF_FS_NORTC == 0,則必須自己實(shí)現(xiàn)函數(shù) DWORD get_fattime (void); 該函數(shù)返回一個(gè) 4 字節(jié)的時(shí)間戳!例如在上面的 STM32 的 USB 中,在 usbh_msc_fatfs.c 中 有 該函數(shù)的實(shí)現(xiàn),但是默認(rèn)為空(根據(jù)配置,用戶需要修改該函數(shù)實(shí)現(xiàn))!
    ??如果在 ffconf.h 中配置了 FF_FS_NORTC == 1,則可省略該函數(shù)的實(shí)現(xiàn)!具體見上文的說明即可!

    該函數(shù)的格式:DWORD get_fattime (void);

    • 參數(shù):
    • 返回值:當(dāng)前本地時(shí)間應(yīng)作為包含在DWORD值中的位字段返回。 位字段如下:
      • bit31:25:從 1980 年開始的年份 ,取值 0 ~ 127。例如 37 for 2017)
      • bit24:21:月份(1…12)
      • bit20:16:日期 (1…31)
      • bit15:11:小時(shí)(0…23)
      • bit10:5:分鐘 (0…59)
      • bit4:0:秒 / 2 ( 0…29, e.g. 25 for 50)

    第五步:應(yīng)用層使用

    ??經(jīng)過以上四步之后,就可以在項(xiàng)目中使用 FatFs了。可用的接口全部在于 ff.h 中,其與標(biāo)準(zhǔn) C 語言中各函數(shù)用法基本一致!

    error: #20: identifier “BYTE” is undefined

    ??這個(gè)問題應(yīng)該是是由于沒有正確包含頭文件導(dǎo)致的。在 R0.13c 的時(shí)候,作者更新: Supported stdint.h for C99 and later. (integer.h was included in ff.h),然后刪除了原來的 integer.h。這樣,diskio.h 中也刪除了對于該文件的包含。這樣就導(dǎo)致了 diskio.h 中某些數(shù)據(jù)類型未定義!如下圖:

    解決方法就是在 diskio.h 中包含數(shù)據(jù)類型的定義文件。根據(jù) 00history.txt 中的更新說明,現(xiàn)在的數(shù)據(jù)類型定義就在 ff.h 中。

    參考

  • ST 官網(wǎng)
  • FatFs 官網(wǎng)
  • 總結(jié)

    以上是生活随笔為你收集整理的FatFs 之一 R0.13c版源码目录文件、函数、全配置项详解及移植说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    精品视频免费观看 | 97精产国品一二三产区在线 | 精品国产一区二区三区久久影院 | www.夜夜爱| 久久天天躁狠狠躁亚洲综合公司 | 久久成年人网站 | 国产黄色免费看 | 久久人人爽av | 日韩极品在线 | 国产精品99视频 | 三级在线视频播放 | 国产成人精品亚洲精品 | 亚洲一区精品人人爽人人躁 | 美州a亚洲一视本频v色道 | av线上免费看| 国产免费久久久久 | 亚洲 欧美 综合 在线 精品 | 玖玖视频国产 | 在线成人短视频 | 999在线视频 | 99产精品成人啪免费网站 | 国产专区在线看 | 日韩高清成人 | 日韩av在线免费看 | 欧美精品久久久久久久久久久 | 狠狠的日 | 99国产精品久久久久老师 | 国产一区二区久久久久 | 麻豆视频免费网站 | 深爱激情五月网 | 91精品视频免费看 | 免费看黄色91 | 欧美激情在线看 | 日本精a在线观看 | 久久精品电影院 | 激情欧美一区二区三区免费看 | 五月婷婷丁香激情 | 国产青草视频在线观看 | 深爱综合网 | 亚洲婷婷在线视频 | 久久久久免费网 | 国产美女久久 | 国产在线综合视频 | 国产一在线精品一区在线观看 | 黄色一级大片在线观看 | 免费观看成人网 | 中文字幕日本在线 | 香蕉视频国产在线观看 | 国产一区二区在线播放视频 | 亚洲小视频在线观看 | 91丨九色丨国产女 | 综合网中文字幕 | 亚洲精品久久久蜜桃直播 | 国产黄色片在线免费观看 | 亚洲国产电影在线观看 | 国产视频一区二区三区在线 | 久久国色夜色精品国产 | 亚洲黄色小说网址 | 国产成人一区二区在线观看 | 欧美日韩中 | 亚洲国产成人久久 | 国内毛片毛片 | 亚洲电影网站 | 国产精品久久久久久久久久妇女 | 日韩欧美在线一区二区 | 久久综合亚洲鲁鲁五月久久 | 久久国产麻豆 | 欧美亚洲另类在线视频 | 91av视频免费观看 | 日本精油按摩3 | 国产精品麻豆欧美日韩ww | 色全色在线资源网 | 国产精品热视频 | 精品国产黄色片 | 色综合久久88色综合天天人守婷 | 久久久久久久18 | 国产人在线成免费视频 | 日本中文字幕网址 | 久草精品电影 | 久久久久久久毛片 | 深爱开心激情网 | av理论电影 | 亚洲国产成人精品在线观看 | 久久国产精品小视频 | 天天av在线播放 | 色婷婷综合久久久中文字幕 | 91av官网 | 国产男男gay做爰 | 精品一区二区三区在线播放 | 国产视频在线一区二区 | 国产日韩精品在线观看 | 午夜资源站| 天天亚洲 | 狠狠色丁香久久婷婷综合_中 | 久久在线精品 | 尤物一区二区三区 | 成人久久影院 | 日日夜夜亚洲 | 久久成人国产精品入口 | av电影在线不卡 | 亚洲精品小区久久久久久 | 日韩免费观看高清 | 亚洲另类视频在线观看 | 丝袜制服综合网 | av在线播放快速免费阴 | 国产色就色| 波多野结衣理论片 | 综合色影院 | av亚洲产国偷v产偷v自拍小说 | 天天干,天天射,天天操,天天摸 | 婷婷色在线 | 久久久久亚洲精品中文字幕 | 国产婷婷 | 天天玩天天干天天操 | 国产手机在线精品 | 国产亚洲精品久久久久久久久久久久 | 中文字幕在线播放日韩 | 国产精品av免费观看 | 探花视频在线观看免费 | 日p在线观看 | 欧美性粗大hdvideo | 在线观看黄网站 | 天天色欧美 | 精品一区av | 久久精品国产精品亚洲精品 | 欧美日产在线观看 | 久久精品一区二区国产 | 亚洲乱码精品久久久 | 狠狠躁夜夜躁人人爽超碰91 | 亚洲国产精品一区二区久久hs | 久久久久这里只有精品 | 国产电影黄色av | 国产小视频免费观看 | 在线观看黄色小视频 | 新版资源中文在线观看 | 91精品日韩 | 天天插综合 | 国产精彩视频一区二区 | 日韩国产欧美在线视频 | 日韩免费不卡av | 色婷婷国产精品一区在线观看 | 国产精品热视频 | 久久看片网 | 美女国内精品自产拍在线播放 | 午夜av免费观看 | 国产精品永久免费 | 午夜精品视频福利 | 欧美a级片免费看 | 九九九九精品九九九九 | 在线中文字母电影观看 | 亚洲午夜电影网 | 美女网站视频免费都是黄 | 四虎影院在线观看av | 香蕉影视在线观看 | 亚洲成人黄色 | 亚洲精品国产精品国自产 | av夜夜操| 亚洲人久久久 | 国产日产精品一区二区三区四区的观看方式 | 免费日韩一区二区三区 | 亚洲国产精品日韩 | 精品99免费视频 | 四虎成人精品 | 成人在线视频论坛 | 超碰在线9| 欧美日韩精品在线免费观看 | 国产一级免费视频 | 在线视频app| 五月天丁香综合 | 日韩精品一区二区三区免费观看 | 日韩经典一区二区三区 | 99久久99精品 | 成人在线视频网 | 天天色天天综合网 | www.色爱| 日韩激情视频在线 | 超碰午夜| 亚洲区视频在线观看 | 欧美国产三区 | 日韩国产精品久久 | 国产精品久久久久久一区二区三区 | 2019中文字幕第一页 | 国产精品视频最多的网站 | av品善网 | 天天操综合 | 91在线小视频 | 国产不卡免费av | 欧美成人性战久久 | 亚洲专区中文字幕 | 久久这里只有精品视频99 | 成人动漫一区二区三区 | 免费在线观看91 | 人人插人人插 | 97精品国产91久久久久久久 | 日韩精品一区二区在线观看 | 中文区中文字幕免费看 | 天天干天天做天天操 | 五月开心综合 | 国产美女在线观看 | 国产亚洲欧美在线视频 | 欧美在线资源 | 国产成人精品综合久久久 | 69av视频在线观看 | 亚洲午夜精品在线观看 | 91精品视频免费 | 西西人体4444www高清视频 | 日本九九视频 | 亚洲精品视频网 | 国内综合精品午夜久久资源 | 在线国产日本 | 亚洲视频播放 | 很黄很黄的网站免费的 | 日韩视频一区二区在线观看 | 久久免费国产视频 | 中文字幕在线免费观看视频 | 九色精品免费永久在线 | 成人欧美一区二区三区在线观看 | 久久免费精品 | 免费在线观看一区二区三区 | 久久天| 99久久99视频只有精品 | av中文资源在线 | 中文字幕乱码电影 | 日韩a在线 | 欧美日韩激情视频8区 | 色婷婷色 | 少妇精品久久久一区二区免费 | 91传媒在线播放 | 免费网站在线观看人 | 日本精品视频在线观看 | 九九视频免费观看视频精品 | 精品黄色在线观看 | 综合网在线视频 | 日本 在线 视频 中文 有码 | 国产精品不卡一区 | 999久久a精品合区久久久 | 99视频在线免费观看 | 亚洲黄色免费网站 | 国产亚洲欧美在线视频 | 99精品视频免费看 | 国产一区二区久久久 | 久久天天躁狠狠躁夜夜不卡公司 | 久久涩涩网站 | 欧美美女一级片 | 欧美成人tv | 在线a人v观看视频 | 欧洲精品一区二区 | 成人久久久精品国产乱码一区二区 | 久久色中文字幕 | 射射射av | 欧美精品二 | 欧美 亚洲 另类 激情 另类 | 亚洲婷婷伊人 | 色av男人的天堂免费在线 | 国产成人免费在线观看 | av中文天堂在线 | 亚洲精品综合一二三区在线观看 | 免费观看91| 狠狠干狠狠久久 | www天天干| 亚一亚二国产专区 | 国产精品久久久久久吹潮天美传媒 | 在线精品视频免费播放 | 久久久久国产精品免费免费搜索 | 免费高清男女打扑克视频 | 91三级视频| 成人免费毛片aaaaaa片 | 成人三级视频 | 国产精品久久久av | 超碰97在线看 | 成人国产精品免费观看 | 激情视频免费在线 | 天天色天天骑天天射 | 成在线播放 | 免费亚洲视频在线观看 | 黄色高清视频在线观看 | 成人在线视频网 | 99久久99久久免费精品蜜臀 | 又黄又刺激| 国产二级视频 | 久草网站在线观看 | 婷婷国产v亚洲v欧美久久 | 在线观看爱爱视频 | 久久久精品视频成人 | 色悠悠久久综合 | 在线视频18在线视频4k | 日韩精品大片 | 日韩欧美黄色网址 | 亚洲成 人精品 | 欧美日本啪啪无遮挡网站 | 婷婷久久国产 | 成人在线播放网站 | 久久综合99 | 在线日本看片免费人成视久网 | 婷婷久久一区 | 久久精品99国产国产 | 中文字幕在线播放第一页 | 亚洲美女精品 | 少妇bbb搡bbbb搡bbbb | 91超国产 | 依人成人综合网 | 国产精品综合久久久久 | 中日韩在线视频 | 天天操天天玩 | 亚洲精品国产精品乱码不99热 | 婷婷丁香激情综合 | 久久精品最新 | 久久久高清视频 | 在线国产欧美 | av日韩精品| 视频99爱 | 五月天亚洲激情 | 四虎在线永久免费观看 | 欧美国产精品一区二区 | 婷婷网址| 色欧美日韩 | 韩国av在线 | 色午夜影院 | 不卡的av在线播放 | 999国内精品永久免费视频 | 国产精品国产精品 | 日本不卡一区二区三区在线观看 | 国产成人福利在线观看 | 国产日韩欧美视频在线观看 | 国产精品久久久久一区二区国产 | 国产资源精品 | 日韩大片免费在线观看 | 亚洲精品五月 | 97色涩| 免费a级毛片在线看 | 中文超碰字幕 | 精品国产一区二区三区在线观看 | 日p视频 | 日本久热 | 正在播放 国产精品 | 亚洲视频99 | 国产精品一区久久久久 | 久久精品国产精品亚洲 | 免费观看9x视频网站在线观看 | 国产精品久久久久国产精品日日 | 五月婷婷一区 | 国内视频一区二区 | 国产一区二区久久精品 | 久久国产精品久久国产精品 | 婷婷丁香激情综合 | 成年人视频在线免费 | 在线免费观看国产精品 | 精品国产伦一区二区三区 | 日韩中午字幕 | 人人澡人摸人人添学生av | 麻豆激情电影 | 公与妇乱理三级xxx 在线观看视频在线观看 | 丁香婷婷网 | 91视频麻豆 | 日韩免费不卡视频 | 日日日网| 国产欧美日韩视频 | 久久久久久黄色 | 欧美另类亚洲 | 五月婷婷久草 | 国产高清免费av | 18网站在线观看 | 国产原创av片 | 免费在线观看日韩欧美 | 毛片网站在线看 | 国产一区二区电影在线观看 | 国产亚洲一区二区三区 | 99re久久精品国产 | 黄色avwww | 国产高清精品在线 | 久久福利综合 | 中文字幕永久在线 | 婷婷色网址 | 欧美视频18 | 日韩综合第一页 | 中文字幕在线免费 | 国产日产精品一区二区三区四区的观看方式 | 国产一区二区在线精品 | 国内外成人在线视频 | 揉bbb玩bbb少妇bbb | 99热在线精品观看 | 亚洲国产精品电影 | 亚欧洲精品视频在线观看 | 91av在线免费视频 | 美女网站黄在线观看 | 99在线观看免费视频精品观看 | 日日操日日操 | 久草电影在线观看 | 国产成人精品电影久久久 | 久久免费99精品久久久久久 | 国模视频一区二区三区 | 色噜噜日韩精品一区二区三区视频 | 日韩理论片在线 | 天天爱天天操 | www色| 超碰国产在线观看 | 国产精品久久久久久超碰 | 久久人人爽人人 | 349k.cc看片app| 国产精品99久久免费黑人 | 久久久久国产成人精品亚洲午夜 | 天天做综合网 | 日本免费久久高清视频 | 亚洲国产美女精品久久久久∴ | www.国产视频 | 久久久午夜视频 | www.av在线.com| 六月婷色 | 免费在线观看av网站 | 免费看麻豆 | 免费大片黄在线 | 肉色欧美久久久久久久免费看 | 国产99久久久国产精品免费二区 | 99亚洲视频 | 国产精品精品久久久久久 | 免费在线观看黄 | 免费成人av在线看 | av免费播放 | 国产在线观看二区 | 精品久久99 | 色资源二区在线视频 | 亚洲色图色 | 国产小视频你懂的在线 | 精品国产91亚洲一区二区三区www | 操操操影院 | 69av在线播放 | 不卡av免费在线观看 | 综合激情久久 | 99精品国产99久久久久久福利 | 免费日韩三级 | 在线日韩中文字幕 | а天堂中文最新一区二区三区 | 在线看小早川怜子av | 狠狠色香婷婷久久亚洲精品 | 国产99久久久精品 | 九九久久精品 | 一区二区激情 | 91视频免费视频 | www.夜夜骑.com | 91豆花在线观看 | 色综合久久久久综合体桃花网 | 色中色综合 | 天天综合天天做 | 91视频下载 | 日韩试看 | 夜夜躁狠狠躁日日躁视频黑人 | 国产91精品一区二区绿帽 | 亚洲精品黄色片 | 免费av小说 | 91在线免费观看网站 | 人人澡人人爽欧一区 | 亚洲最新av在线网址 | 色婷婷激情综合 | 成人免费视频网站 | 久久免费av电影 | 婷婷开心久久网 | 国产小视频精品 | 在线看黄色的网站 | 久久成人国产精品入口 | 久久视频免费在线 | aaa日本高清在线播放免费观看 | 日韩精品免费一区二区三区 | 天天色天天干天天 | 亚洲最大av网站 | 超碰在线中文字幕 | 日韩激情av在线 | 精品福利av| 九九久久久久久久久激情 | 日韩v欧美v日本v亚洲v国产v | 精品国产一区二区三区久久久蜜臀 | 日韩欧美综合 | 九九九在线观看 | 成人黄性视频 | 精品国产伦一区二区三区观看体验 | 中文字幕网站视频在线 | 成人午夜免费福利 | 99热最新在线| 黄色小网站免费看 | 狠狠操操操 | 97伊人网| 99精品视频在线观看视频 | 欧美日韩免费观看一区=区三区 | 一级成人在线 | 不卡电影免费在线播放一区 | 成人综合婷婷国产精品久久免费 | 亚洲精品高清视频在线观看 | 射九九| 中文字幕av电影下载 | 欧美精品二 | www.天天操.com| www.com.日本一级 | 久久亚洲影院 | 日韩欧美视频免费看 | 亚洲精品美女在线观看播放 | 二区三区视频 | 中文字幕在线观看国产 | 欧美日韩高清在线一区 | 99热在线国产 | h网站免费在线观看 | 国产中文字幕视频在线观看 | 肉色欧美久久久久久久免费看 | 超碰99在线 | www.xxx.性狂虐 | 久久久久久蜜av免费网站 | 91av九色 | 99在线观看视频网站 | 激情欧美丁香 | 中文字幕色婷婷在线视频 | 日韩免费二区 | 国产 日韩 在线 亚洲 字幕 中文 | 四虎在线视频免费观看 | 992tv人人草 黄色国产区 | 天天操天天干天天爱 | 91av电影在线| 天天搞天天干 | 成人黄色毛片视频 | 中文字幕在线播放第一页 | 97成人精品区在线播放 | 国产精品毛片一区二区三区 | 国产精品欧美久久久久天天影视 | 成 人 黄 色 视频免费播放 | 免费无遮挡动漫网站 | 日韩一级理论片 | 西西444www大胆高清视频 | 四虎影视成人永久免费观看亚洲欧美 | 国产色综合天天综合网 | 精品视频亚洲 | 五月色丁香 | 97av.com| 久久久久久不卡 | 免费的黄色av | 最新av网址在线 | 日韩精品久久久免费观看夜色 | 在线看小早川怜子av | 亚洲欧美国产精品va在线观看 | 女人高潮一级片 | 五月开心网 | 国产精品igao视频网网址 | 欧美一级性 | 久久久精品免费观看 | 久久毛片高清国产 | 免费在线观看日韩视频 | 一区二区三区精品在线视频 | 欧洲精品视频一区 | 在线免费观看黄色小说 | 日韩av片在线| 久久国语| 久久久999| 国产一区视频免费在线观看 | 欧美极品少妇xbxb性爽爽视频 | 久久精品99国产精品酒店日本 | 国产美女主播精品一区二区三区 | 日韩黄色av网站 | 亚洲五月六月 | 日韩欧美国产视频 | 久久精品91久久久久久再现 | 国产手机视频精品 | 中文字幕第一页在线播放 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 精品国产乱码久久久久久浪潮 | 蜜臀av性久久久久av蜜臀妖精 | 久久久久高清毛片一级 | 久久免费视频播放 | 国内视频在线 | 大荫蒂欧美视频另类xxxx | 国产精品美女免费视频 | 天天色棕合合合合合合 | 最近高清中文在线字幕在线观看 | 日韩精品一区二区三区中文字幕 | 国产黄a三级三级 | 五月婷婷久草 | 亚洲第一伊人 | 国产99视频在线观看 | 久草在线在线视频 | 天天干天天拍天天操天天拍 | 国产精品国产三级国产aⅴ无密码 | 欧美午夜剧场 | 美女av电影 | 99九九视频 | 欧美三人交| 欧美色伊人 | 天天搞天天干天天色 | www.99热精品 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 日韩视频免费观看高清完整版在线 | 色综合久久88色综合天天免费 | 久久久电影网站 | 欧美久久综合 | 中文字幕一区二区三区四区在线视频 | 丁香婷婷色综合亚洲电影 | 在线a视频| 国产成人一区二区啪在线观看 | 香蕉精品视频在线观看 | www.五月天 | 在线观看黄色免费视频 | 蜜桃视频日本 | 伊人网av| 一区免费观看 | 亚洲精品天天 | 婷婷国产在线 | 国产精品久久久视频 | 九九视频免费在线观看 | 精品国产亚洲日本 | 在线三级播放 | 中文字幕在线免费播放 | 国产在线播放观看 | 手机av网站 | 国产 日韩 中文字幕 | 亚洲国内精品在线 | 国产精品女 | 色在线免费观看 | 亚洲国产小视频在线观看 | 伊人天堂网 | 99热国产在线观看 | 国内精品久久久久影院男同志 | 日本午夜在线亚洲.国产 | 美女视频黄免费的 | 亚洲开心激情 | 一区二区三区免费在线观看视频 | 在线观看麻豆av | 国产日韩欧美在线观看 | 狠狠操狠狠干天天操 | 国产精品久久久久久久久久99 | 国产精品久久久久久av | 国产视频精品久久 | 天天综合精品 | 国产在线a | 69亚洲精品| 国产在线观看地址 | 国产麻豆精品传媒av国产下载 | 伊人干综合 | 国产在线精品福利 | av大全在线| 中文字幕乱码日本亚洲一区二区 | 九九有精品 | 97免费在线观看视频 | 日韩精品视频免费看 | 国产午夜精品一区二区三区 | 99在线视频精品 | 日韩精品你懂的 | 亚州人成在线播放 | 青青河边草观看完整版高清 | 久久夜靖品 | 欧美日韩性生活 | 99精品毛片 | www最近高清中文国语在线观看 | www视频在线观看 | 又黄又刺激视频 | 成人久久18免费 | 国产精品欧美久久久久天天影视 | 精品欧美日韩 | 国产在线a不卡 | 亚洲天堂在线观看完整版 | 三级a视频 | 中文字幕在线观看一区 | 97成人在线免费视频 | 人人插人人玩 | 久久精品福利视频 | 久久久久中文 | 激情五月***国产精品 | 久久不卡免费视频 | 最近日本韩国中文字幕 | 国内精品久久久久久 | 91视频免费观看 | 精品国产_亚洲人成在线 | 成人av影视在线 | 91免费日韩 | 亚洲精品国产精品乱码在线观看 | 成片视频免费观看 | 丁香六月在线观看 | 二区三区在线观看 | 激情综合网在线观看 | 婷婷丁香在线 | 色综合久久久久综合体 | 综合久久精品 | 五月婷婷在线观看视频 | 国产人成在线观看 | 天天摸天天弄 | 涩涩爱夜夜爱 | 81国产精品久久久久久久久久 | a黄色| 亚洲美女精品视频 | 日韩电影中文字幕 | 国产精品福利在线 | 91久久人澡人人添人人爽欧美 | 国产高清一区二区 | 国产午夜视频在线观看 | 日日夜夜婷婷 | 国产专区日韩专区 | 永久黄网站色视频免费观看w | av韩国在线| 天天做天天射 | 久久久精品免费看 | 免费黄色在线网站 | 人人插人人草 | www.久久久 | 天堂久色 | 国产无遮挡又黄又爽在线观看 | 久9在线| a视频在线观看免费 | 在线影视 一区 二区 三区 | 808电影 | 亚洲免费高清视频 | 精品国产乱码久久 | 人人爱人人射 | 日韩高清av在线 | 日本动漫做毛片一区二区 | 97人人射 | 久久久国产精品亚洲一区 | 欧美国产亚洲精品久久久8v | 日本公妇在线观看 | 久久九九影院 | 免费久久网站 | 午夜美女福利直播 | 欧美激情片在线观看 | 亚洲视频在线免费看 | 欧美一级欧美一级 | 一区二区三区手机在线观看 | 五月婷婷激情综合网 | 在线免费精品视频 | 韩国一区二区av | 人人干干人人 | 高潮久久久久久 | 中文字幕日韩有码 | 日本在线视频网址 | 免费的黄色的网站 | 精品国产aⅴ一区二区三区 在线直播av | 韩国av免费在线 | 最新日韩视频在线观看 | 久久免费视频国产 | 亚洲国产三级在线观看 | 久久精品免费看 | 99视频在线精品国自产拍免费观看 | 综合激情网... | 91久久偷偷做嫩草影院 | 一区二区视频欧美 | 一级黄色大片在线观看 | a级免费观看 | av亚洲产国偷v产偷v自拍小说 | 欧美激情精品久久久 | 黄色网址在线播放 | 久久艹久久 | 国产精品成人一区二区 | 国产欧美在线一区二区三区 | 最新av网址大全 | 久久国产精品免费观看 | 中文字幕中文字幕在线中文字幕三区 | 青青河边草手机免费 | 500部大龄熟乱视频 欧美日本三级 | 国产91精品欧美 | 亚洲一级久久 | 久久久亚洲网站 | 在线免费观看黄色小说 | 99 久久久久 | 成人在线观看资源 | 成人aⅴ视频| 毛片美女网站 | 干天天 | 久久超碰网 | 天天干人人 | 亚洲日本在线视频观看 | 米奇狠狠狠888 | 成人在线一区二区三区 | 日本久久99 | 天天综合日日夜夜 | 国产成人av综合色 | 五月开心网 | 日韩精品91偷拍在线观看 | 久久天天综合网 | 国产精品久久久久久久久久免费看 | 天天射天天色天天干 | 久久国产午夜精品理论片最新版本 | 国产精品九色 | 九九视频一区 | 一级性av| 大荫蒂欧美视频另类xxxx | 狠狠色丁香久久婷婷综合丁香 | 玖操 | 亚洲一区视频在线播放 | 国产在线不卡视频 | 国产在线免费 | 日本性xxxxx 亚洲精品午夜久久久 | 久久国产一区 | 色夜影院| 欧美国产高清 | 久草免费在线观看视频 | 热久久精品在线 | 国产成人免费观看久久久 | 一区二区三区免费在线观看视频 | 国产美女搞久久 | 久久精品免费看 | 亚洲精品视频第一页 | 天天色影院 | 久草精品视频 | 青青久视频 | 天天综合网~永久入口 | 三级av小说 | 综合婷婷久久 | 久久久99精品免费观看乱色 | 免费观看丰满少妇做爰 | 激情视频免费在线观看 | 91精品视频免费观看 | 一级c片 | 久青草国产在线 | 99精品一区二区 | 国产福利91精品 | 国产精品自产拍在线观看中文 | av大片网站 | 午夜丁香网 | 久久久鲁 | 久久精品人人做人人综合老师 | 色999视频 | 激情视频在线高清看 | 免费在线观看日韩 | 色综合久久综合网 | 综合网天天色 | 久久久久久久久久久久久9999 | 日韩一区二区三区视频在线 | 国产高清综合 | 国产精品久久久久av免费 | 欧美亚洲xxx| 国产亚洲精品中文字幕 | 黄色软件视频网站 | 婷婷丁香激情综合 | 免费中文字幕 | av大片免费看 | 欧美一区二区视频97 | 激情网第四色 | 国产一级免费视频 | 玖玖视频网 | 91精品国产综合久久婷婷香蕉 | 最新中文字幕 | 字幕网资源站中文字幕 | 天天操天天操天天操天天操 | 字幕网资源站中文字幕 | 成人午夜精品久久久久久久3d | 国产免费中文字幕 | 久久99热这里只有精品国产 | 免费a网| 久99精品 | 欧美激情综合五月 | 国产精品久久人 | 粉嫩av一区二区三区入口 | 亚洲欧美视频在线 | 国产在线观看高清视频 | 92精品国产成人观看免费 | 五月开心网 | av短片在线观看 | 成人免费在线电影 | 日日天天狠狠 | 99精品久久久久久久久久综合 | 天天做日日爱夜夜爽 | 天天干天天操人体 | 亚洲无人区小视频 | av导航福利 | 国产高清中文字幕 | 国内丰满少妇猛烈精品播 | 不卡视频一区二区三区 | 亚洲黄色免费网站 | 97热视频 | www.91av在线 | 国产一及片 | 久久九九免费 | 天天干,天天射,天天操,天天摸 | 欧美永久视频 | 日韩激情三级 | 国产精品视频99 | 91精品办公室少妇高潮对白 | 国产成人精品999在线观看 | 国产精品黄色av | 国产毛片久久久 | 免费在线国产黄色 | 亚洲欧洲国产精品 | 天天av在线播放 | 91精品免费在线视频 | 国产黄色大片 | 亚洲资源视频 | 黄色免费观看视频 | 99精品国产兔费观看久久99 | 亚洲天堂精品 | 日韩免费观看一区二区三区 | 久久久久伦理电影 | 天堂av在线网址 | 99色| 91丨九色丨丝袜 | 欧美日韩亚洲在线 | 最近中文字幕视频网 | 91视频麻豆视频 | 热99久久精品 | 欧美成人999 | 精品高清视频 | 国产麻豆电影在线观看 | 国内精品久久久久影院优 | 欧美在线视频一区二区三区 | 欧美一级性生活视频 | 成年人黄色在线观看 | 国产99久久久精品视频 | 99久久久久久久久久 | 99爱这里只有精品 | 成年人免费观看国产 | 天天综合在线观看 | 日韩中文在线观看 | av一级黄| 香蕉视频在线免费 | 日日夜精品 | 97超碰人人 | 久久看看 | 国产剧情一区在线 | 久久99免费 | www.久久免费视频 | 久久久蜜桃| 国产九色视频在线观看 | 国产不卡精品 | 色吊丝在线永久观看最新版本 | 黄色网址在线播放 | 免费情缘| av观看免费在线 | 国产一级大片免费看 | 欧美a级成人淫片免费看 | 9i看片成人免费看片 | 国产色啪 | 欧美日韩免费视频 | 人人干人人爽 | 成人免费共享视频 | 黄色com | 92国产精品久久久久首页 | 国产 日韩 中文字幕 | 色五月色开心色婷婷色丁香 | 人人揉人人揉人人揉人人揉97 | 91精品久久久久久久91蜜桃 | 美女福利视频网 | 久久理论电影 | 丝袜美腿在线 | 国产字幕在线观看 | 麻豆视频在线观看 | 欧美一级专区免费大片 | 久久精品久久99精品久久 | 黄色三级在线看 | 手机av看片| 国产精品久久久久久久久免费看 | 2019中文| 激情网色 | 天天草天天干天天 | 婷婷婷国产在线视频 | 青青草在久久免费久久免费 | 成年人视频在线免费 | 亚洲美女免费精品视频在线观看 | 日韩.com| 免费一级特黄毛大片 | 欧美亚洲国产日韩 | 久久超级碰视频 | 在线天堂8√ | 欧美日本啪啪无遮挡网站 | www最近高清中文国语在线观看 | 六月丁香色婷婷 | 99热最新| 又大又硬又黄又爽视频在线观看 | 午夜精品在线看 | 天天色天天操综合网 | 久草免费在线 | 国产日韩欧美在线播放 | 99精品视频免费看 | 日韩国产高清在线 | 亚洲人人爱 | 久草在线播放视频 | 国产v在线 | 91精品国产三级a在线观看 | 日本在线观看中文字幕 | 黄色三级久久 | 操天天操| 黄色成人在线网站 | 黄色精品久久久 | 国产91免费在线观看 | 国产精品久久久久久久久久不蜜月 | 亚洲国产精品日韩 | 亚洲国产精品激情在线观看 | 国产亚洲精品久久久久久电影 | 在线观看色网站 | 香蕉在线观看视频 | 精品国产一区二区在线 | 国产精品免费久久久久影院仙踪林 | av播放在线| av免费在线看网站 | 国产综合小视频 | 最近日本中文字幕 | 黄色中文字幕 | 国产专区在线 | 亚洲成av人影院 | 黄污视频大全 | 欧美国产精品久久久久久免费 | 日韩中文字幕在线观看 | 久久久噜噜噜久久久 | 日本黄色黄网站 | 久久久久久久久久伊人 | 九九有精品 | 成人国产电影在线观看 | 成人av资源网 | 91麻豆精品国产91久久久久久久久 |