FatFs(文件系统)

1官网

FatFs - 通用 FAT 文件系统模块 (elm-chan.org)

FatFs 是用于小型嵌入式系统的通用 FAT/exFAT 文件系统模块。FatFs 模块是按照 ANSI C (C89) 编写的,并且与磁盘 I/O 层完全分离。因此,它独立于平台。它可以集成到资源有限的小型微控制器中,如8051、PIC、AVR、ARM、Z80、RX等。此外,此处还提供用于微型微控制器的 Petit FatFs 模块。

特征
  • DOS/Windows 兼容 FAT/exFAT 文件系统。
  • 独立于平台。易于移植。
  • 程序代码和工作区的占用空间非常小。
  • 支持的各种配置选项:
    • ANSI/OEM 或 Unicode 格式的长文件名。
    • exFAT 文件系统、64 位 LBA 和 GPT 用于大型存储。
    • RTOS 的线程安全。
    • 多个卷。(物理驱动器和分区)
    • 可变扇区大小。
    • 包括 DBCS 在内的多个代码页。
    • 只读、可选 API、I/O 缓冲区等...

应用界面

层

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 - 设置活动代码页

媒体访问接口

层

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

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

项目的文件

文件类别文件名说明
FATFS核心文件ff.c, ff.hFAT文件系统的核心实现和头文件
磁盘I/O接口diskio.c, diskio.h底层磁盘I/O函数的实现和声明,用于硬件平台特定的存储设备操作
FATFS配置ffconf.hFATFS的行为配置,如文件系统类型、长文件名支持等
整数类型定义integer.h提供一致的数据类型定义,用于跨平台兼容性
内存管理ffsystem.c, ffsystem.hFATFS的内存分配和释放函数的实现和声明
Unicode支持ffunicode.c, ffunicode.hUnicode字符编码转换相关函数,用于长文件名支持
主程序入口main.c系统初始化、线程创建、文件系统管理等
项目构建Makefile自动化编译脚本,用于构建整个项目
MMC/SD卡驱动mmc_stm32f1_spi.cSTM32F103微控制器的SPI接口的MMC/SD卡驱动程序
实时时钟rtc_stm32f1.c, rtc_stm32f1.h实时时钟(RTC)功能的实现和声明
系统启动代码startup_stm32f100.c微控制器启动代码,负责硬件初始化和引导加载
链接脚本STM32F100RBT6.ld指定链接器如何将源文件组合成可执行文件,以及内存空间分配
配置文件stm32sp.ini, tt.ini可能用于配置STM32F103微控制器的特定参数或系统行为
图形界面相关stm32_mmc.png可能是用于显示MMC接口连接示意图的图像文件
微控制器型号相关STM32F100.h包含STM32F100微控制器型号的寄存器映射和功能描述
串行通信接口uart_stm32f1.c, uart_stm32f1.h串行通信接口(UART)的实现和声明
打印函数库xprintf.c, xprintf.h基于xprintf库的 printf 函数的实现和声明,用于高效的打印功能

FATFS的核心文件通常包括以下几个:

  1. diskio.c: 这是磁盘输入输出(Disk I/O)功能的C语言源代码文件。它可能包含了操作磁盘设备、读写数据等函数。
  2. diskio.h: 这是磁盘输入输出相关头文件,用于定义了在C语言中访问磁盘所需的结构和宏。
  3. ff.c: 这可能是名为“ff”的库或项目的C语言源代码文件。具体功能需要根据上下文来判断。
  4. ff.h: 这是名为“ff”的库或项目的头文件,用于定义了在C语言中使用该库所需的数据结构和接口。
  5. ffconf.h: 这是“ff”库的配置文件,其中可能包含了编译和链接时需要的特定选项或参数。
  6. ffunicode.c: 这可能是一个处理Unicode字符的C语言源代码文件,与文本编码转换有关。
  7. integer.h: 这是整数类型的头文件,通常包含了标准C语言中的int、long int等整数类型定义。
  8. ffsystem.c 和 ffsystem.h:这些文件包含了FATFS的内存分配和释放函数的实现和声明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全与加密常识(5)自签名证书

文章目录 什么是自签名证书?自签名证书有什么优势?自签名证书有什么缺陷?企业可以使用自签名证书吗?如何创建自签名证书?前面我们介绍了什么是证书签名请求:证书签名请求(Certificate Signing Request,CSR)是一种数据文件,通常由申请者生成,并用于向证书颁发机构(C…

webpack打包配置

基于webpack5.x 一、缓存设置 // 内存缓存: 速度快,配置简单,但占用内存且重启后失效 cache: {type: memory, }// 磁盘缓存 (filesystem):持久性好,适合大型项目,但速度较慢,配置相对复杂。 cache: {type:…

华为智能驾驶方案剖析

华为ADS智驾方案始终坚持激光雷达毫米波雷达摄像头的多传感器融合路线,行业降本压力下硬件配置从超配逐步转向贴合实际需求,带动整体硬件成本下降。 1)单车传感器数量呈现下降趋势,包括激光雷达从3个减配至1个、毫米波雷达从6R减配至3R、摄像…

【深度学习】GPU版本

我发现nvidia-smi的cuda版本不是我期望镜像中的版本,咨询一下还要选择对应的驱动,比如cuda12.2对应的 {"12.3": "525.60","12.2": "525.60","12.1": "525.60","12.0": "52…

【硬件开发】安规电容X电容和Y电容

为什么有安规电容 国家为了保护人民的安全要求,电容器失效后,不会导致电击,不危及人身安全的安全电容器 安规电容的作用 滤除雷电冲击波,以及插拔插座的高频噪声 X电容 聚酯电容 位置 X电容位于火线和零线之间 作用 滤除…

Swift 中更现代化的调试日志系统趣谈(二)

概述 在上篇 Swift 中更现代化的调试日志系统趣谈(一) 博文中,我们初步讨论了如何利用 Swift OSLog 框架中的 Logger 日志记录器替代“简陋”的 print 方法来记录我们的调试消息。 而接下来我们会再接再厉,继续调试日志系统的进一步介绍。 在本篇博文中,您将学到如下内容…

No module named ‘pytesseract‘

报错解释: 这个错误表示Python无法找到名为pytesseract的模块。pytesseract是一个用于OCR(光学字符识别)的库,它依赖于Google的Tesseract-OCR引擎。这个错误通常发生在尝试使用pytesseract之前未正确安装该模块的情况下。 解决方…

timm中模型更换huggingface模型链接

现在timm默认使用huggingface的链接了,错误链接如下: (MaxRetryError("HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /timm/swinv2_tiny_window8_256.ms_in1k/resolve/main/model.safetensors (Caused by C…

MySQL:表的内连接和外连接、索引

文章目录 1.内连接2.外连接2.1 左外连接2.2 右外连接 3.综合练习4.索引4.1见一见索引4.2 硬件理解4.3 MySQL 与磁盘交互基本单位(软件理解)4.4 (MySQL选择的数据结构)索引的理解4.5 聚簇索引 VS 非聚簇索引 5.索引操作5.1 创建索引5.2 查询索引5.3 删除索引 1.内连接 内连接实…

Keepalive技术

文章目录 一、Keepalive基础vrrp技术Keepalived介绍Keepalived架构 二、 Keepalived 相关文件配置文件组成全局配置虚拟路由器配置 三、配置lvs和keepalive联动服务器架构抢占模式配置配置单播、组播配置通知模块日志功能脑裂现象 四、keepalived和nginx联动keepalive和其他应用…

OSINT技术情报精选·2024年6月第4周

OSINT技术情报精选2024年6月第4周 2024.6.30版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 1、大数据技术标准推进委员会:《面向人工智能的数据治理(DG4AI)实践指南1.0》 2024年6月19-20日,“来这里,…

嵌入式Linux系统编程 — 5.5 sleep、usleep和nanosleep系统休眠函数

目录 1 为什么需要休眠 2 sleep、usleep和nanosleep函数 2.1 sleep函数 2.2 usleep函数 2.3 nanosleep函数 3 示例程序 1 为什么需要休眠 有时需要将进程暂停或休眠一段时间, 进入休眠状态之后,程序将暂停运行,直到休眠结束。 以下是一…

Is ChatGPT a Good Personality Recognizer? A Preliminary Study?

ChatGPT是一个很好的人格识别者吗?初步调研 摘要1 介绍2 背景和相关工作3 实验3.1 数据集3.2 提示策略3.3 基线3.4 评估指标3.5 实现细节3.6 Overall Performance (RQ1)3.7 ChatGPT在人格识别上的公平性 (RQ2)3.8 ChatGPT对下游任务的人格识别能力(RQ3&a…

javaEE——Servlet

1.web开发概述 所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行交互 2.java后端开发环境搭建 web后端(javaEE)程序需要运行在服务器中的,这样前端才可以访问得到 3.服务器是什么? ①服务器就是一款软件,可以向其发送请求&#…

如何根据两个关键字查询报错日志的位置

要根据两个关键字查询报错日志的位置,在Linux中,你可以使用grep命令结合正则表达式(regex)来实现。grep命令允许你在文件中搜索匹配特定模式的行。 假设你有两个关键字“keyword1”和“keyword2”,并且你想找到同时包…

教学常用内容

容器 #include<bits/stdc.h> #define fi first #define se second #define pb push_back #define PII pair<int,int > #define int long long #define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);using namespace std;const int N 1e610;vec…

深入解析HDFS:定义、架构、原理、应用场景及常用命令

引言 Hadoop分布式文件系统&#xff08;HDFS&#xff0c;Hadoop Distributed File System&#xff09;是Hadoop框架的核心组件之一&#xff0c;它提供了高可靠性、高可用性和高吞吐量的大规模数据存储和管理能力。本文将从HDFS的定义、架构、工作原理、应用场景以及常用…

【UML用户指南】-24-对高级行为建模-进程和线程

目录 1、概念 2、主动类 3、通信 4、同步 5、常用建模技术 5.1、对多控制流建模 5.2、对进程间通信建模 在UML中&#xff0c;可以将每一个独立的控制流建模为一个主动对象&#xff0c;它代表一个能够启动控制活动的进程或线程。 进程是一个能与其他进程并发执行的重量级…

2024新版大屏互动微信上墙源码大屏互动神器年会婚庆微现场3D签到

2024年大屏幕互动源码动态背景图和配乐素材搭建教程 php宝塔搭建部署活动现场大屏幕互动系统php源码&#xff0c;可以用来构建具有互动功能的大屏幕系统&#xff0c;为活动现场提供各种互动体验。 修复版的系统源码在原有功能的基础上&#xff0c;增加了更加完善的用户体验和稳…

【python学习】如何在一个python文件中调用另一个python文件的函数

在Python中&#xff0c;你可以通过import语句来调用另一个Python文件中的函数。假设你有两个Python文件&#xff1a;main.py 和 helper.py&#xff0c;并且你想要在main.py中调用helper.py中的函数。 首先&#xff0c;确保helper.py文件中有一个你可以调用的函数。例如&#x…