FATFS基本入门教程(2)-什么是文件系统

作者注:FATFS应该是一个比较常用的嵌入式文件系统,支持FAT12/FAT16/FAT32/EXFAT格式,很多开发人员都用过。我在这里会写一系列文章来介绍FATFS的基本使用,欢迎感兴趣的同学关注。

已发布的内容:

  1. FATFS基本入门指南(1)- 内容简介
  2. 继续发布中....

在学习FATFS之前,首先要搞清楚什么是文件系统,理解其中的基本原理、主要概念,然后再学学习如何使用。如果没有这些基础知识的理解,一上来就试图去使用FATFS;那么,在后续的使用过程中,你很有可能会遇到各种各样的问题。而实际上,这些问题往往是由于你对文件系统本身的基本概念和原理不理解导致的。

所以,我的个人建议是:先学习和理解基本的概念和原理,有基础之后再进行实践

为什么需要文件系统

在一些嵌入式设备中,有时需要进行数据存储。对于一些较小的、简单的数据(可能由几十字节、几百字节),可以直接存储在MCU内部的Flash区域里,或者外挂一颗小的EEPROM。如果数据量更大一些,可以外挂一颗大容量的SPI接口的Flash。

在这些场合中,数据的存储要求是比较简单的,大多只要求能够将数据存储起来就行。对具体的存储格式没有什么特定的要求,数据本身的结构也比较简单,对数据的修改也较为简单。所以,我们只需要编写简单的代码就能够完成这些要求。

但是在某些情况下,对数据存储有一定的要求,此时无论是片内MCU,还是EEPROM和Flash,满足不了需求。此时,需要使用文件系统。

  • 大数量数据存储:当需要存储大量的数据,包括配置文件、日志、固件升级等。MCU片内存储空间不够大,只能存储在外部存储设备,此时需要考虑数据在这些设备上如何存储。数量量大了之前,存储相对复杂
  • 数据组织:文件系统提供了一种结构化的方式来组织数据,包括文件和目录。这有助于在设备上创建层次结构和分类数据,使其更易于理解和维护。
  • 数据访问:文件系统提供了通用的数据访问接口,允许应用程序方便地读取和写入文件、随时增删文件。这使得开发嵌入式应用程序更加高效。

在这些复杂的场合中,我们就需要仔细设计数据如何在上面如何进行存储,数据的进行增删改查如何实现,然后根据需求设计相应的软件模块。这个过程,实际上就是设计一个自己的文件系统。

文件系统倒底是什么

文件系统倒底是什么,具体如何发挥作用。下面用一个简单的例子,让你了解文件系统倒底什么。

例如,在嵌入式系统中,如果需要将大量的数据存储到本地,可以使用到SD卡。由于没有文件系统,你就需要自己直接访问SD卡上的原始块数据。

如下所示,SD卡在逻辑上一系列连续的存储块集合,以块为单位进行读取和写入,每个块的大小通常为512字节。如果你只有20字节写入到指定的块中,则需要将数据所在的目的块内容读取出来,合并待写入的数据,最后再回写。不能直接只是将20字节写入到数据块中,这会导致该块中其它内部丢失。

另外,我们存储的数据往往是有不同的结构和含义的,比如日志、传感器采集结果。这些数据的具体格式、内容、大小完全不同,以及将来要对这些进行修改和删除。为了能够方便对这些数据进行有效存储管理,因此,不能简单地直接按顺序存取,我们需要采取一定的数据组织方案。具体数据在存储设备上如何进行存储和管理,以及其具体实现相关的软件或数据结构,就是文件系统。

(本课程会有一节课时以FAT32文件系统为例,介绍具体的存储原理)

具体来说,它往往要完成以下功能:

  1. 层次结构:文件系统通常采用树状结构,包括目录(或文件夹)和文件。目录可以包含其他目录和文件,形成一个树状的层次结构,使文件可以有组织地存储和访问。
  2. 文件:文件是存储在存储媒体上的数据单元。文件可以是文本文档、图像、音频、视频、可执行程序等。每个文件通常有一个唯一的名称,以便区分和访问。
  3. 目录:目录是用于组织文件的容器,类似于文件夹。目录可以包含其他目录和文件,并通过路径来标识其位置。路径是一种描述文件或目录位置的层次化表示,如/usr/documents/myfile.txt
  4. 文件属性:文件系统通常会记录文件的属性,包括文件大小、创建时间、修改时间、权限等信息。这些属性有助于文件的管理和访问控制。
  5. 数据组织:文件系统负责将文件数据分散存储在存储媒体上,并提供机制来定位和检索数据。这通常涉及到文件分配、簇/块管理等操作。

通过文件系统,我们就可以轻松地在存储设备上查找、创建、修改和删除文件。

常见的文件系统

我们可以自己定义一种文件系统,不过更常见的做法是采用已经成熟的文件系统,一些常见的文件系统如下:

  • FAT12/FAT16/FAT32:适用于各种计算机和嵌入式系统,具有广泛的兼容性和适用于小至中等容量存储介质的能力,本课程中会涉及的文件系统
  • NTFS:微软开发的文件系统, NTFS overview | Microsoft Learn
  • YAFFS (Yet Another Flash File System):专为闪存存储介质设计的文件系统,具有优化的擦除和写入操作,适用于嵌入式设备。 A Robust Flash File System Since 2002 | Yaffs - A Flash File System for embedded use
  • ROMFS:一个只读的嵌入式文件系统,通常用于将文件嵌入到固件中,不支持写入操作。 ROMFS - ROM File System — The Linux Kernel documentation
  • JFFS2 (Journaling Flash File System 2):具有日志功能的闪存文件系统,可用于提高数据的可靠性。 https://en.wikipedia.org/wiki/JFFS2
  • EXT2/EXT3/EXT4:通常用于Linux系统的文件系统,但也可以移植到嵌入式设备上,具有较强的性能和数据完整性保护。 Ext4

这些文件系统具有不同的特点和适用范围,嵌入式设备的选择取决于具体需求和硬件平台。


本系列文章连载中,欢迎继续关注

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

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

相关文章

wordpress安装之Linux ftp传输

工欲善其事,必先利其器。 最近准备在自己的服务器上搭建一个个人技术分享的平台。 因为我发现现在网络上的工具呀,还有一些问题的解答总是模棱两可,所以我打算自己做一个。 首先呢,我们需要有一个linxu的系统当服务器,然后呢&a…

Windows安装Mysql Workbench及常用操作

Mysql Workbench是mysql自带的可视化操作界面,功能是强大的,但界面和navicat比,就是觉得别扭,但其实用惯了也还好,各有特色吧。这里记录一下常用的操作。 官方手册:MySQL Workbench 一、安装 1. 下载 官方…

RPG项目01_场景及人物动画管理器

基于“RPG项目01_UI登录”,新建一个文件夹名为Model(模型) 将资源场景拖拽至Model中 找到相应场景双击进入 红色报错部分Clear清掉即可,我们可以重做 接下来另存场景 起名为Game 点击保存 场景就保存至Scene中了 在文件夹下新创建…

探究Kafka原理-4.API使用

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理🔥如果感觉博主的文章还不错的话,请&#x1f44…

[读论文]meshGPT

概述 任务:无条件生成mesh (无颜色)数据集:shapenet v2方法:先trian一个auto encoder,用来获得code book;然后trian一个自回归的transformermesh表达:face序列。face按规定的顺序&a…

SAP_ABAP_编程基础_列表_自定义列表 / 多页列表 / 列表页面设置

SAP ABAP 顾问(开发工程师)能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读494次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料!https://blog.csdn.net/j…

WebSocket 前端使用vue3+ts+elementplus 实现连接

1.配置连接 websocket.ts文件如下 import { ElMessage } from "element-plus";interface WebSocketProps {url: string; // websocket地址heartTime?: number; // 心跳时间间隔,默认为 50000 msheartMsg?: string; // 心跳信息,默认为pingr…

TCP 重传、滑动窗口、流量控制、拥塞控制

1:重传机制 超时重传 快速重传 SACK 方法 Duplicate SACK 1:重传机制 超时重传:重传机制的其中一个方式,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的ACK确认应答报文…

java:springboot3集成swagger(springdoc-openapi-starter-webmvc-ui)

背景 网上集成 swagger 很多都是 Springfox 那个版本的,但是那个版本已经不更新了,springboot3 集成会报错 Typejavax.servlet.http.HttpServletRequest not present,我尝试了很多才知道现在用 Springdoc 了,今天我们来入门一下 …

OCR原理解析

目录 1.概述 2.应用场景 3.发展历史 4.基于传统算法的OCR技术原理 4.1 图像预处理 4.1.1 灰度化 4.1.2 二值化 4.1.3 去噪 4.1.4 倾斜检测与校正 4.1.4.2 轮廓矫正 4.1.5 透视矫正 4.2 版面分析 4.2.1 连通域检测文本 4.2.2 MSER检测文本 4.3 字符切割 4.3.1 连…

TiDB 在咪咕云原生场景下的实践

导读 咪咕是中国移动旗下的视频科技公司,门户系统是其核心业务之一。 为满足用户的多样化需求,咪咕计划对其数据库进行升级。 经过对中国主流国产数据库的测试评估后,咪咕选择了 TiDB,并成功将其落地于门户系统云化项目。 TiDB 为…

Linux系统之centos7编译安装Python 3.8

前言 CentOS (Community Enterprise Operating System) 是一种基于 Red Hat Enterprise Linux (RHEL) 进行源代码再编译并免费提供给用户的 Linux 操作系统。 CentOS 7 采用了最新的技术和软件包,并提供了强大的功能和稳定性。它适用于各种服务器和工作站应用场景&a…

分布式架构demo

1、外层创建pom 版本管理器 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version><relativePath/> <!-- lookup parent from repository…

鉴源实验室 | 汽车网络安全攻击实例解析(三)

作者 | 张璇 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言&#xff1a;随着现代汽车技术的迅速发展&#xff0c;车辆的进入和启动方式经历了显著的演变。传统的物理钥匙逐渐被无钥匙进…

certbot—30秒部署你的HTTPS,永久免费,自动续约

在之前我已经介绍过部署反向代理的2种方式了。第一种是通过宝塔的反向代理配置然后开启HTTPS。 第二种是通过nginxproxymanager。 今天要给大家分享的是一个 certbot。 Certbot 是一个由 Lets Encrypt 开发的免费开源工具&#xff0c;用于自动化部署和管理 SSL/TLS 证书。它具有…

SpringBoot3.x + mp代码生成器(更新系列)

小伙伴们&#xff0c;有没有这样一个体验&#xff0c;每次开始写一个项目时&#xff0c;搭建项目环境&#xff0c;建entity&#xff0c;mapper&#xff0c;service&#xff0c;controller层文件的感到繁琐&#xff0c;这属实体力活呀&#xff01;然而&#xff0c;自从有了Mybat…

【二分查找】LeetCode1970:你能穿过矩阵的最后一天

本文涉及的基础知识点 二分查找算法合集 作者推荐 动态规划LeetCode2552&#xff1a;优化了6版的1324模式 题目 给你一个下标从 1 开始的二进制矩阵&#xff0c;其中 0 表示陆地&#xff0c;1 表示水域。同时给你 row 和 col 分别表示矩阵中行和列的数目。 一开始在第 0 …

【开源】基于JAVA的大病保险管理系统

项目编号&#xff1a; S 031 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S031&#xff0c;文末获取源码。} 项目编号&#xff1a;S031&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统配置维护2.2 系统参保管理2.3 大…

uniapp是否可以用elementUI等前端UI库、使用步骤以及需要注意的问题

文章目录 uniapp是否可以用elementUI等前端UI库使用方法和步骤问题如何解决 uniapp是否可以用elementUI等前端UI库 在PC端开发uniapp&#xff0c;可以用elementUI&#xff0c;因为elementUI就是PC端的。 在使用uniapp&#xff0c;选择vue2.0时&#xff0c;实测可以用nodejs16的…

java企业财务管理系统springboot+jsp

1、基本内容 &#xff08;1&#xff09;搭建基础环境&#xff0c;下载JDK、开发工具eclipse/idea。 &#xff08;2&#xff09;通过HTML/CSS/JS搭建前端框架。 &#xff08;3&#xff09;下载MySql数据库&#xff0c;设计数据库表&#xff0c;用于存储系统数据。 &#xff08;4…