打印
[牛人杂谈]

嵌入式单片机用的文件系统

[复制链接]
1035|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xinxianshi|  楼主 | 2024-2-27 22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
嵌入式单片机用的文件系统是一种专为嵌入式系统设计的文件管理系统,它通常具有轻量级、高效率和适应性强的特点,能够在资源受限的环境下运行。这些文件系统通常被设计为适用于闪存、EEPROM等非易失性存储设备,并且能够支持快速的读写操作以及对嵌入式设备的快速启动和稳定运行。

以下是一些常见的嵌入式单片机文件系统:

FAT文件系统:FAT(File Allocation Table)是一种简单而常见的文件系统,通常用于嵌入式系统。它的结构简单,易于实现,支持快速的读写操作,并且能够被许多嵌入式设备所支持。

YAFFS(Yet Another Flash File System):YAFFS是专门为闪存设备设计的文件系统,它具有高效的垃圾回收机制和可靠的错误处理能力,适用于对闪存进行频繁写入操作的场景。

JFFS2(Journaling Flash File System 2):JFFS2是一种支持日志功能的闪存文件系统,它通过日志记录文件系统的变化,以提高数据的可靠性和稳定性,并且支持高效的读写操作。

ext2/3/4文件系统:ext系列文件系统是Linux系统中常用的文件系统,它们具有较好的性能和稳定性,可以被移植到嵌入式系统中使用。

ROM文件系统:ROM文件系统通常将文件直接嵌入到程序代码中,以减少文件系统的复杂性和存储开销,适用于存储固定不变的数据或程序代码的场景。

使用特权

评论回复
沙发
xinxianshi|  楼主 | 2024-2-27 22:45 | 只看该作者
选择文件系统时,需要根据嵌入式设备的具体需求来进行权衡。例如,如果需要频繁进行写操作,则需要选择具有良好写入性能和可靠性的文件系统;如果对存储空间有较高要求,则需要选择存储效率高的文件系统。

使用特权

评论回复
板凳
xinxianshi|  楼主 | 2024-2-27 22:47 | 只看该作者
atFs 是用于小型嵌入式系统的通用 FAT/exFAT 文件系统模块。FatFs 模块按照 ANSI C (C89) 编写,与磁盘 I/O 层完全分离。因此,它独立于平台。它可以集成到资源有限的小型微控制器中,如8051、PIC、AVR、ARM、Z80、RX等。此外,这里还提供用于微型微控制器的 Petit FatFs 模块。

使用特权

评论回复
地板
xinxianshi|  楼主 | 2024-2-27 22:47 | 只看该作者
特征
DOS/Windows 兼容的 FAT/exFAT 文件系统。
与平台无关。易于移植。
程序代码和工作区域占用空间非常小。
支持各种配置选项:
ANSI/OEM 或 Unicode 格式的长文件名。
exFAT 文件系统、64 位 LBA 和 GPT,用于大型存储。
适用于 RTOS 的线程安全。
多个卷。(物理驱动器和分区)
可变扇区大小。
多个代码页,包括 DBCS。
只读、可选 API、I/O 缓冲区等...

使用特权

评论回复
5
xinxianshi|  楼主 | 2024-2-27 22:47 | 只看该作者
由于 FatFs 模块是独立于平台和存储介质的文件系统层,因此它与物理设备(如存储卡、硬盘和任何类型的存储设备)完全分离。存储设备控制模块不是 FatFs 模块的任何部分,需要由实现者提供。FatFs 通过如下所示的简单媒体访问接口控制存储设备。此外,下载中还提供了某些平台的示例实现。此处提供了存储设备控制模块的功能检查器。

存储设备控制
disk_status - 获取设备状态
disk_initialize - 初始化设备
disk_read - 读取数据
disk_write - 写入数据
disk_ioctl - 控制设备相关功能
实时时钟
get_fattime - 获取当前时间

使用特权

评论回复
6
xinxianshi|  楼主 | 2024-2-27 22:48 | 只看该作者
FatFs 为应用程序提供了各种文件系统功能,如下所示。

文件访问
f_open - 打开/创建文件
f_close - 关闭打开的文件
f_read - 从文件中读取数据
f_write - 将数据写入文件
f_lseek - 移动读/写指针,扩展大小
f_truncate - 截断文件大小
f_sync - 刷新缓存的数据
f_forward - 将数据转发到流
f_expand - 为文件分配一个连续块
f_gets - 读取字符串
f_putc - 写一个字符
f_puts - 编写字符串
f_printf - 编写格式化字符串
f_tell - 获取当前读/写指针
f_eof - 测试文件末尾
f_size - 获取尺寸
f_error - 测试错误
目录访问
f_opendir - 打开目录
f_closedir - 关闭打开的目录
f_readdir - 读取目录项
f_findfirst - 打开目录并读取匹配的第一个项目
f_findnext - 读取匹配的下一项
文件和目录管理
f_stat - 检查文件或子目录是否存在
f_unlink - 删除文件或子目录
f_rename - 重命名/移动文件或子目录
f_chmod - 更改文件或子目录的属性
f_utime - 更改文件或子目录的时间戳
f_mkdir - 创建子目录
f_chdir - 更改当前目录
f_chdrive - 更改当前驱动器
f_getcwd - 检索当前目录和驱动器
卷管理和系统配置
f_mount - 注册/取消注册卷的工作区域
f_mkfs - 在逻辑驱动器上创建 FAT 卷
f_fdisk - 在物理驱动器上创建分区
f_getfree - 获取卷上的可用空间
f_getlabel - 获取卷标
f_setlabel - 设置卷标
f_setcp - 设置活动代码页

使用特权

评论回复
7
天灵灵地灵灵| | 2024-2-28 15:26 | 只看该作者
FatFs 应该是最多用的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

879

帖子

1

粉丝