小型文件系統(littlefs)


小型文件系統(littlefs)

概述

一個為微控制器設計的小故障安全文件系統。

  • 掉電恢復能力: 設計用於處理隨機電源故障。所有文件操作都有很強的寫時拷貝保證,如果斷電,文件系統將恢復到上一次已知的良好狀態。

  • 動態磨損均衡: 設計考慮到閃存,並提供動態塊磨損均衡。此外,littlefs可以檢測壞塊並在它們周圍工作。

  • 有限RAM/ROM: 被設計為使用少量內存。RAM的使用是嚴格限制的,這意味着RAM的使用不會隨着文件系統的增長而改變。文件系統不包含無界遞歸,動態內存僅限於可靜態提供的可配置緩沖區。

在lfs.h的評論中可以找到詳細的文檔(或者至少是目前可用的盡可能多的細節)。 littlefs采用了一種配置結構,定義了文件系統的運行方式。配置結構為文件系統提供了塊設備操作和維度、可調整的參數(用於在性能上權衡內存使用情況)以及可選的靜態緩沖區(如果用戶希望避免動態內存)。 littlefs的狀態存儲在lfs\t類型中,由用戶分配,允許同時使用多個文件系統。使用lfs\u t和configuration struct,用戶可以格式化塊設備或掛載文件系統。 掛載后,littlefs提供了一整套類似POSIX的文件和目錄功能,但文件系統結構的分配必須由用戶提供。 所有POSIX操作,比如remove和rename,都是原子的,即使在斷電的情況下也是如此。此外,在對文件調用sync或close之前,文件更新實際上不會提交到文件系統。

組件安裝

yoc init
yoc install littlefs

配置

// Maximum name size in bytes, may be redefined to reduce the size of the // info struct. Limited to <= 1022. Stored in superblock and must be // respected by other littlefs drivers. #define LFS_NAME_MAX 255  // Maximum size of a file in bytes, may be redefined to limit to support other // drivers. Limited on disk to <= 4294967296. However, above 2147483647 the // functions lfs_file_seek, lfs_file_size, and lfs_file_tell will return // incorrect values due to using signed integers. Stored in superblock and // must be respected by other littlefs drivers. #define LFS_FILE_MAX 2147483647  // Maximum size of custom attributes in bytes, may be redefined, but there is // no real benefit to using a smaller LFS_ATTR_MAX. Limited to <= 1022. #define LFS_ATTR_MAX 1022

接口列表

littlefs接口如下所示:

函數 說明
lfs_format 用littlefs格式化塊設備
lfs_mount 掛載文件系統
lfs_unmount 卸載文件系統
lfs_remove 刪除文件系統
lfs_rename 重命名或移動文件或目錄
lfs_stat 查找有關文件或目錄的信息
lfs_fstat 查找有關文件的信息
lfs_getattr 獲取自定義屬性
lfs_setattr 設置自定義屬性
lfs_removeattr 刪除自定義屬性
lfs_file_open 打開一個文件
lfs_file_opencfg 打開具有額外配置的文件
lfs_file_close 關閉文件
lfs_file_sync 同步存儲上的文件
lfs_file_read 從文件讀取數據
lfs_file_write 將數據寫入文件
lfs_file_seek 更改文件的位置
lfs_file_truncate 將文件的大小截斷為指定的大小
lfs_file_tell 返回文件的位置
lfs_file_rewind 將文件的位置更改為文件的開頭
lfs_file_size 返回文件的大小
lfs_mkdir 創建目錄
lfs_dir_open 打開目錄
lfs_dir_close 關閉目錄
lfs_dir_read 讀取目錄中的條目
lfs_dir_seek 更改目錄的位置
lfs_dir_tell 返回目錄的位置
lfs_dir_rewind 將目錄的位置更改為目錄的開頭
lfs_fs_size 查找文件系統的當前大小
lfs_fs_traverse 遍歷文件系統正在使用的所有塊
lfs_migrate 嘗試遷移以前版本的littlefs


函數 說明
lfs_format 用littlefs格式化塊設備
lfs_mount 掛載文件系統
lfs_unmount 卸載文件系統
lfs_remove 刪除文件系統
lfs_rename 重命名或移動文件或目錄
lfs_stat 查找有關文件或目錄的信息
lfs_fstat 查找有關文件的信息
lfs_getattr 獲取自定義屬性
lfs_setattr 設置自定義屬性
lfs_removeattr 刪除自定義屬性
lfs_file_open 打開一個文件
lfs_file_opencfg 打開具有額外配置的文件
lfs_file_close 關閉文件
lfs_file_sync 同步存儲上的文件
lfs_file_read 從文件讀取數據
lfs_file_write 將數據寫入文件
lfs_file_seek 更改文件的位置
lfs_file_truncate 將文件的大小截斷為指定的大小
lfs_file_tell 返回文件的位置
lfs_file_rewind 將文件的位置更改為文件的開頭
lfs_file_size 返回文件的大小
lfs_mkdir 創建目錄
lfs_dir_open 打開目錄
lfs_dir_close 關閉目錄
lfs_dir_read 讀取目錄中的條目
lfs_dir_seek 更改目錄的位置
lfs_dir_tell 返回目錄的位置
lfs_dir_rewind 將目錄的位置更改為目錄的開頭
lfs_fs_size 查找文件系統的當前大小
lfs_fs_traverse 遍歷文件系統正在使用的所有塊
lfs_migrate  

接口詳細說明

枚舉定義

lfs_type

類型 說明
LFS_TYPE_REG file types
LFS_TYPE_DIR file types
LFS_TYPE_SPLICE internally used types
LFS_TYPE_NAME internally used types
LFS_TYPE_STRUCT internally used types
LFS_TYPE_USERATTR internally used types
LFS_TYPE_FROM internally used types
LFS_TYPE_TAIL internally used types
LFS_TYPE_GLOBALS internally used types
LFS_TYPE_CRC internally used types
LFS_TYPE_CREATE internally used type specializations
LFS_TYPE_DELETE internally used type specializations
LFS_TYPE_SUPERBLOCK internally used type specializations
LFS_TYPE_DIRSTRUCT internally used type specializations
LFS_TYPE_CTZSTRUCT internally used type specializations
LFS_TYPE_INLINESTRUCT internally used type specializations
LFS_TYPE_SOFTTAIL internally used type specializations
LFS_TYPE_HARDTAIL internally used type specializations
LFS_TYPE_MOVESTATE internally used type specializations
LFS_FROM_NOOP internal chip sources
LFS_FROM_MOVE internal chip sources
LFS_FROM_USERATTRS internal chip sources

lfs_open_flags

類型 說明
LFS_O_RDONLY Open a file as read only
LFS_O_WRONLY Open a file as write only
LFS_O_RDWR Open a file as read and write
LFS_O_CREAT Create a file if it does not exist
LFS_O_EXCL Fail if a file already exists
LFS_O_TRUNC Truncate the existing file to zero size
LFS_O_APPEND Move to end of file on every write
LFS_F_DIRTY File does not match storage
LFS_F_WRITING File has been written since last flush
LFS_F_READING File has been read since last flush
LFS_F_ERRED An error occured during write
LFS_F_INLINE Currently inlined in directory entry
LFS_F_OPENED File has been opened

lfs_whence_flags

類型 說明
LFS_SEEK_SET Seek relative to an absolute position
LFS_SEEK_CUR Seek relative to the current file position
LFS_SEEK_END Seek relative to the end of the file

結構體定義

lfs_config

成員 類型 說明
context void* 傳遞給block驅動代碼的上下文
read int32_t 從設備讀數據
prog int32_t 向設備寫入數據,block設備在寫入前必須已經erase了
erase int32_t 擦除block
sync int32_t sync塊設備的狀態
read_size lfs_size_t 最小的讀取單元大小
prog_size lfs_size_t 最小的寫入數據單元大小,也是數據metadata pair中tag的對齊尺寸
block_size lfs_size_t 最小的擦除單元大小。可以比flash的實際block尺寸大。但是對於ctz類型的文件,block size是最小的分配單元。同時block size必須是read size和program size的倍數,block size會存儲在superblock中
block_count lfs_size_t 屬於文件系統的block數量,block count會存儲在superblock中
block_cycles int32_t 文件系統進行垃圾回收時的block的擦除次數,推薦取值100-1000.值越大垃圾回收的次數越少,性能越好
cache_size lfs_size_t littlefs需要一個read cache,一個program cache,每個文件也需要一個cache。cache越大性能越好,會減少會flash的訪問次數,cache必須是block的read size和program size的倍數,同時是block size的因數
lookahead_size lfs_size_t lookahead buffer的尺寸。lookahead buffer主要是block alloctor在分配塊的時候用到。lookahead size必須是8的倍數,因為它是采用bitmap的形式存儲的
read_buffer void* cache size大小的read buffer,可以靜態分配也可以動態分配
prog_buffer void* cache size大小的program buffer,可以靜態分配也可以動態分配
lookahead_buffer void* lookahead_size大小的lookahead buffer,且是32-bit對齊的,即可以靜態分配也可以動態分配
name_max lfs_size_t 文件名的最大長度,這個值會存儲在superblock中
file_max lfs_size_t 文件的最大長度,存儲在superblock中
attr_max lfs_size_t 用戶屬性的最大長度

lfs_info

成員 類型 說明
type uint8_t 文件類型, either LFS_TYPE_REG or LFS_TYPE_DIR
size lfs_size_t 文件大小, only valid for REG files,Limited to 32-bits
name char 文件名

lfs_attr

成員 類型 說明
type uint8_t 8位屬性類型,由用戶提供,用於標識屬性
buffer void* 指向包含屬性的緩沖區的指針
size lfs_size_t 以字節為單位的屬性大小,限制為LFS_ATTR_MAX

lfs_file_config

成員 類型 說明
buffer void* cache size長度的buffer,可以靜態分配也可以動態分配
attrs struct lfs_attr* 用戶屬性,讀文件時,attr存儲從flash上讀取的文件用戶屬性,寫入文件時,attr存放用戶指定的文件屬性並會寫入到flash中
attr_count lfs_size_t 用戶屬性的長度

lfs_cache_t

成員 類型 說明
block lfs_block_t cache中的數據屬於的block
off lfs_off_t cache中的數據在block上的偏移地址
size lfs_size_t cache的大小
buffer uint8_t* cache數據的存放地址

lfs_mdir_t

成員 類型 說明
pair lfs_block_t dir的metadata pair所在的block
rev uint32_t metadata pair的revision
off lfs_off_t tag的偏移地址
etag uint32_t tag標志
count uint16_t 計數
erased bool 擦除標志
split bool metadata pair是否是鏈表
tail lfs_block_t 用於metadata pair的鏈表

lfs_dir_t

成員 類型 說明
next struct lfs_dir* 指向下一個結點
id uint16_t 編號
type uint8_t 類型
m lfs_mdir_t 目錄
pos lfs_off_t 位置
head lfs_block_t 塊頭內容

lfs_ctz

成員 類型 說明
head lfs_block_t 當前塊頭指針地址
size lfs_size_t 塊大小

lfs_file_t

成員 類型 說明
next struct lfs_file* 指向下一個節點
id uint16_t metadata tag中的id,在文件open時獲取
type uint8_t LFS_TYPE_REG 或者 LFS_TYPE_DIR
m lfs_mdir_t 文件所在的目錄的metadata pair
ctz struct lfs_ctz 指向大文件的CTZ skip-list。對於小文件則直接inline了,無需CTZ skip-list
flags uint32_t lfs_open_flags中的值
pos lfs_off_t 文件訪問時的偏移
block lfs_block_t file當前的block
off lfs_off_t 在block內的offset
cache lfs_cache_t 文件訪問時的cache
cfg const struct lfs_file_config* 文件open時的配置參數,包含一個buffer以及用戶屬性

lfs_superblock_t

成員 類型 說明
version uint32_t 版本內容
block_size lfs_size_t 塊大小
block_count lfs_size_t 塊計數
name_max lfs_size_t 名稱最大長度
file_max lfs_size_t 文件最大長度
attr_max lfs_size_t 屬性最大長度

lfs_t

成員 類型 說明
rcache lfs_cache_t 讀緩存
pcache lfs_cache_t 程序緩存
root lfs_block_t 根目錄所在塊
mlist struct lfs_mlist* 元數據對鏈表
seed uint32_t block alloctor的隨機數生成的種子
gstate struct lfs_gstate 用於目錄操作sync的global state
gpending struct lfs_gstate 用於目錄操作sync的global pending
gdelta struct lfs_gstate 用於目錄操作sync的global delta
free struct lfs_free lookahead buffer,用於分配free block
cfg const struct lfs_config* 文件系統的配置參數
name_max lfs_size_t 文件名的最大長度,和superblock中的name_max值相同
file_max lfs_size_t 文件的最大長度,和superblock中的file_max值相同
attr_max lfs_size_t 用戶屬性的最大長度,和superblock中的attr_max值相同
lfs1 struct lfs1* 結構體

接口的具體形式如下:

lfs_format

int lfs_format(lfs_t *lfs, const struct lfs_config *config);

  • 功能描述:

    • 用littlefs格式化塊設備。
  • 參數:

    • lfs: 文件系統句柄。
    • config: 配置參數結構體。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_mount

int lfs_mount(lfs_t *lfs, const struct lfs_config *config);

  • 功能描述:

    • 掛載文件系統。
  • 參數:

    • lfs: 文件系統句柄。
    • config: 配置參數。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_unmount

int lfs_unmount(lfs_t *lfs);

  • 功能描述:

    • 卸載文件系統。
  • 參數:

    • lfs: 文件系統句柄。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_remove

int lfs_remove(lfs_t *lfs, const char *path);

  • 功能描述:

    • 刪除文件或目錄。
  • 參數:

    • lfs: 文件系統句柄。
    • path: 路徑。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_rename

int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath);

  • 功能描述:

    • 重命名或移動文件或目錄。
  • 參數:

    • lfs: 文件系統句柄。
    • oldpath: 原路徑。
    • newpath: 新路徑。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_stat

int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info);

  • 功能描述:

    • 查找有關文件或目錄的信息。
  • 參數:

    • lfs: 文件系統句柄。
    • path: 路徑。
    • info: 信息。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_fstat

int lfs_fstat(lfs_t *lfs, lfs_file_t *file, struct lfs_info *info);

  • 功能描述:

    • 查找有關文件的信息。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
    • info: 信息。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_getattr

lfs_ssize_t lfs_getattr(lfs_t *lfs, const char *path, uint8_t type, void *buffer, lfs_size_t size);

  • 功能描述:

    • 獲取自定義屬性。
  • 參數:

    • lfs: 文件系統句柄。
    • path: 路徑。
    • type: 文件類型。
    • buffer: 緩沖區的指針。
    • size: 文件大小。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_setattr

int lfs_setattr(lfs_t *lfs, const char *path, uint8_t type, const void *buffer, lfs_size_t size);

  • 功能描述:

    • 設置自定義屬性。
  • 參數:

    • lfs: 文件系統句柄。
    • path: 路徑。
    • type: 文件類型。
    • buffer: 緩沖區的指針。
    • size: 文件大小。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_removeattr

int lfs_removeattr(lfs_t *lfs, const char *path, uint8_t type);

  • 功能描述:

    • 刪除自定義屬性。
  • 參數:

    • lfs: 文件系統句柄。
    • path: 路徑。
    • type: 文件類型。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_open

int lfs_file_open(lfs_t *lfs, lfs_file_t *file, const char *path, int flags);

  • 功能描述:

    • 打開一個文件。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
    • path: 路徑。
    • flags: 文件標志。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_opencfg

int lfs_file_opencfg(lfs_t *lfs, lfs_file_t *file, const char *path, int flags, const struct lfs_file_config *config);

  • 功能描述:

    • 打開具有額外配置的文件。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
    • path: 路徑。
    • flags: 標志。
    • config: 配置參數。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_close

int lfs_file_close(lfs_t *lfs, lfs_file_t *file);

  • 功能描述:

    • 關閉文件。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_sync

int lfs_file_sync(lfs_t *lfs, lfs_file_t *file);

  • 功能描述:

    • 同步存儲上的文件。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_read

lfs_ssize_t lfs_file_read(lfs_t *lfs, lfs_file_t *file, void *buffer, lfs_size_t size);

  • 功能描述:

    • 從文件讀取數據。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
    • buffer: 讀出的數據緩存。
    • size: 讀出的數據大小。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_write

lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file, const void *buffer, lfs_size_t size);

  • 功能描述:

    • 將數據寫入文件。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
    • buffer: 寫入數據的緩存。
    • size: 寫入數據大小。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_seek

lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file, lfs_soff_t off, int whence);

  • 功能描述:

    • 更改文件的位置。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
    • off: 偏移量。
    • whence: 位置標志。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_truncate

int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size);

  • 功能描述:

    • 將文件的大小截斷為指定的大小。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
    • size: 文件大小。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_tell

lfs_soff_t lfs_file_tell(lfs_t *lfs, lfs_file_t *file);

  • 功能描述:

    • 返回文件的位置。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_rewind

int lfs_file_rewind(lfs_t *lfs, lfs_file_t *file);

  • 功能描述:

    • 將文件的位置更改為文件的開頭。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_file_size

lfs_soff_t lfs_file_size(lfs_t *lfs, lfs_file_t *file);

  • 功能描述:

    • 返回文件的大小。
  • 參數:

    • lfs: 文件系統句柄。
    • file: 文件。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_mkdir

int lfs_mkdir(lfs_t *lfs, const char *path);

  • 功能描述:

    • 創建目錄。
  • 參數:

    • lfs: 文件系統句柄。
    • path: 路徑。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_dir_open

int lfs_dir_open(lfs_t *lfs, lfs_dir_t *dir, const char *path);

  • 功能描述:

    • 打開目錄。
  • 參數:

    • lfs: 文件系統句柄。
    • dir: 目錄。
    • path: 路徑。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_dir_close

int lfs_dir_close(lfs_t *lfs, lfs_dir_t *dir);

  • 功能描述:

    • 關閉目錄。
  • 參數:

    • lfs: 文件系統句柄。
    • dir: 目錄。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_dir_read

int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info);

  • 功能描述:

    • 讀取目錄中的條目。
  • 參數:

    • lfs: 文件系統句柄。
    • dir: 目錄。
    • info: 信息。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_dir_seek

int lfs_dir_seek(lfs_t *lfs, lfs_dir_t *dir, lfs_off_t off);

  • 功能描述:

    • 更改目錄的位置。
  • 參數:

    • lfs: 文件系統句柄。
    • dir: 目錄。
    • off: 偏移量。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_dir_tell

lfs_soff_t lfs_dir_tell(lfs_t *lfs, lfs_dir_t *dir);

  • 功能描述:

    • 返回目錄的位置。
  • 參數:

    • lfs: 文件系統句柄。
    • dir: 目錄。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_dir_rewind

int lfs_dir_rewind(lfs_t *lfs, lfs_dir_t *dir);

  • 功能描述:

    • 將目錄的位置更改為目錄的開頭。
  • 參數:

    • lfs: 文件系統句柄。
    • dir: 目錄。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_fs_size

lfs_ssize_t lfs_fs_size(lfs_t *lfs);

  • 功能描述:

    • 查找文件系統的當前大小。
  • 參數:

    • lfs: 文件系統句柄。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_fs_traverse

int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data);

  • 功能描述:

    • 遍歷文件系統正在使用的所有塊。
  • 參數:

    • lfs: 文件系統句柄。
    • cb: 回調。
    • data: 數據。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

lfs_migrate

int lfs_migrate(lfs_t *lfs, const struct lfs_config *cfg);

  • 功能描述:

    • 嘗試遷移以前版本的littlefs。
  • 參數:

    • lfs: 文件系統句柄。
    • cfg: 配置信息。
  • 返回值:

    • 0: 成功 。
    • <0: 失敗。

示例

Here's a simple example that updates a file named boot_count every time main runs. The program can be interrupted at any time without losing track of how many times it has been booted and without corrupting the filesystem:

#include "lfs.h"  // variables used by the filesystem lfs_t lfs; lfs_file_t file;  // configuration of the filesystem is provided by this struct const struct lfs_config cfg = {  // block device operations  .read = user_provided_block_device_read,  .prog = user_provided_block_device_prog,  .erase = user_provided_block_device_erase,  .sync = user_provided_block_device_sync,   // block device configuration  .read_size = 16,  .prog_size = 16,  .block_size = 4096,  .block_count = 128,  .cache_size = 16,  .lookahead_size = 16,  .block_cycles = 500, };  // entry point int main(void) {  // mount the filesystem  int err = lfs_mount(&lfs, &cfg);   // reformat if we can't mount the filesystem  // this should only happen on the first boot  if (err) {  lfs_format(&lfs, &cfg);  lfs_mount(&lfs, &cfg);  }   // read current count  uint32_t boot_count = 0;  lfs_file_open(&lfs, &file, "boot_count", LFS_O_RDWR | LFS_O_CREAT);  lfs_file_read(&lfs, &file, &boot_count, sizeof(boot_count));   // update boot count  boot_count += 1;  lfs_file_rewind(&lfs, &file);  lfs_file_write(&lfs, &file, &boot_count, sizeof(boot_count));   // remember the storage is not updated until the file is closed successfully  lfs_file_close(&lfs, &file);   // release any resources we were using  lfs_unmount(&lfs);   // print the boot count  printf("boot_count: %d\n", boot_count); }

診斷錯誤碼

錯誤碼 錯誤碼說明
LFS_ERR_OK No error
LFS_ERR_IO Error during device operation
LFS_ERR_CORRUPT Corrupted
LFS_ERR_NOENT No directory entry
LFS_ERR_EXIST Entry already exists
LFS_ERR_NOTDIR Entry is not a dir
LFS_ERR_ISDIR Entry is a dir
LFS_ERR_NOTEMPTY Dir is not empty
LFS_ERR_BADF Bad file number
LFS_ERR_FBIG File too large
LFS_ERR_INVAL Invalid parameter
LFS_ERR_NOSPC No space left on device
LFS_ERR_NOMEM No more memory available
LFS_ERR_NOATTR No data/attr available
LFS_ERR_NAMETOOLONG File name too long


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM