stm32 fatfs fopen err_disk__小型文件系统FatFS和LittleFS对比和区别
素材来源:网络编辑整理:strongerHuang
对于许多物联网设备而言,拥有一个小型且具有弹性的文件系统至关重要。
在MCU上运行的文件系统不多,绝大部分人应该知道FatFS这个文件系统,今天就给大家讲讲FatFS和LittleFS的内容,以及他们之间的一些差异。
一、文件系统FatFS
FatFs是一个通用的文件系统(FAT/exFAT)模块,用于在小型嵌入式系统中实现FAT文件系统。
网址:
http://elm-chan.org/fsw/ff/00index_e.html
FatFs组件的编写遵循ANSI C(C89),完全分离于磁盘 I/O 层,因此不依赖于硬件平台。它可以嵌入到资源有限的微控制器中,如 8051, PIC, AVR, ARM, Z80, RX等等,不需要做任何修改。
---来自百度百科
特征
a.DOS/ Windows兼容的FAT/exFAT文件系统。
b.平台无关,容易移植。
c.程序代码和工作区的占用空间非常小。
d.支持以下各种配置选项:
- ANSI / OEM或Unicode中的长文件名。
- exFAT文件系统,64位LBA和GPT可存储大量数据。
- RTOS的线程安全。
- 多个卷(物理驱动器和分区)。
- 可变扇区大小。
- 多个代码页,包括DBCS。
- 只读,可选API,I / O缓冲区等...
如果你会使用STM32CubeMX,想要使用FatFS非常容易,轻松几步就能将STM32“变成”一个U盘。
二、文件系统Littlefs
知道Littlefs文件系统的人相对比较少,但是如果使用过Mbed OS系统的人绝大部分都应该知道。
Mbed OS是Arm公司针对Cortex-M系列处理器,面向IoT开发的一套免费、开源开源嵌入式操作系统,专门为物联网中的“things”而设计。
而Littlefs只是Mbed其中的一部分内容,如下框图:
源码地址:
https://github.com/armmbed/mbed-littlefs
Littlefs特点:
占用资源小:物联网设备受到ROM和RAM的限制。
断电恢复能力:要求文件系统保持一致,并将数据刷新到底层存储。
平均磨损:通常情况下,存储支持每块数量有限的擦除,因此使用整个存储设备对于可靠性非常重要。
用法也挺简单,参看官方例程:
#include "LittleFileSystem2.h"#include "SPIFBlockDevice.h"// Physical block device, can be any device that supports the BlockDevice APISPIFBlockDevice bd(PTE2, PTE4, PTE1, PTE5);// Storage for the littlefsLittleFileSystem2 fs("fs");// Entry pointint main() { // Mount the filesystem int err = fs.mount(&bd); if (err) { // Reformat if we can't mount the filesystem, // this should only happen on the first boot LittleFileSystem2::format(&bd); fs.mount(&bd); } // Read the boot count uint32_t boot_count = 0; FILE *f = fopen("/fs/boot_count", "r+"); if (!f) { // Create the file if it doesn't exist f = fopen("/fs/boot_count", "w+"); } fread(&boot_count, sizeof(boot_count), 1, f); // Update the boot count boot_count += 1; rewind(f); fwrite(&boot_count, sizeof(boot_count), 1, f); // Remember that storage may not be updated until the file // is closed successfully fclose(f); // Release any resources we were using fs.unmount(); // Print the boot count printf("boot_count: %ld\n", boot_count);}
三、文件系统对比
每一种产物都有它存在的价值,文件系统也同样如此,各有各的优缺点,下面简单罗列几点它们的区别。
1.资源RAM / ROM大小
Littlefs是Mbed OS中的高完整性嵌入式文件系统,经过优化可与RAM和ROM有限的MCU一起使用。
Littlefs高度集成的嵌入式文件系统使用比FAT少的13K ROM和少于4K的RAM。
2.失电恢复能力
littlefs具有强大的copy-on-write保证,并且磁盘上的存储总是保持有效状态,可能有随机电源故障的系统适合该文件系统。
3.磨损均衡
嵌入式设备使用的大多数存储芯片都支持每个扇区有限的擦除集,如果没有均衡,则嵌入式设备的寿命可能会受到影响。
参考来源:
https://os.mbed.com/blog/entry/littlefs-high-integrity-embedded-fs/
免责声明:本文来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧推荐阅读:精选汇总 | 目录 | 搜索为什么CPU流水线会提高代码执行效率?假冒芯片的套路,如何鉴别仿冒料件?关注微信公众号『strongerHuang』,后台回复“1024”查看更多内容,回复“加群”按规则加入技术交流群。
长按前往图中包含的公众号关注
stm32 fatfs fopen err_disk__小型文件系统FatFS和LittleFS对比和区别相关推荐
- 小型文件系统FatFS和LittleFS对比和区别
关注.星标公众号,不错过精彩内容 素材来源:网络 编辑整理:strongerHuang 对于许多物联网设备而言,拥有一个小型且具有弹性的文件系统至关重要. 在MCU上运行的文件系统不多,绝大部分人应该 ...
- Stm32文件系统FATFS(开始于2021-09-09)
Stm32文件系统FATFS 参考资料主要是原子和野火两家的讲解. 1.FATFS简介: 适合嵌入式小型单片机,是一个 独立 的软件层文件系统,我们只需要将底层硬件的读取函数移植到FATFS提供的向下 ...
- [笔记]STM32基于HAL库的SDIO+FATFS文件系统
1.背景 要用到Bootloader升级,APP部分要写运行日志.所以在Bootloader部分的FATFS要做裁剪,裁剪到只剩只读的操作就可以了,而APP端做可读可写. 2.开发板 用的是野火的ST ...
- STM32 串行FLASH文件系统FatFs
目录 一.Windows系统为例 二.文件系统的结构与特性 为什么要应用文件分配表? 三.FatFs文件系统 1- FatFs 文件系统源码介绍 2- FatFs在程序中的关系网 四.配置FatFs移 ...
- 嵌入式文件系统FatFS和LittleFS对比
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 对于许多嵌入式电子设备而言,拥有一个小型且具有"弹性"的文件系统 ...
- 文件系统FATFS的移植教程
最新FatFs:http://elm-chan.org/fsw/ff/00index_e.html 一.FATFS文件系统简介 FATFS是面向小型嵌入式系统的一种通用的FAT文件系统.它完全是由C语 ...
- c++ 文件读写_串行FLASH 文件系统FatFs
文件系统 即使大家可能不了解文件系统,但也一定对"文件"这个概念十分熟悉.数据在PC上是以文件的形式储存在磁盘中的,这些数据的形式一般为ASCII 码或二进制形式.如需要记录本书的 ...
- STM32-串行FLASH文件系统FatFs
串行FLASH文件系统FatFs FatFs官方链接 FatFs文件系统的源码可以从FatFs官方下载:官方链接http://elm-chan.org/fsw/ff/00index_e.html Fa ...
- 第 26 章 串行 FLASH 文件系统 FatFs
26.1 文件系统 26.2 FatFs 文件系统简介 2.1 FatFs 的目录结构 2.2 FatFs 帮助文档 2.3 FATFS 源码 src 文件夹下的源码文件功能 (1)integer.h ...
最新文章
- 【Java】Java连接Mysql数据库的demo示例
- 《构建之法》第6 - 7章
- MySQL Access denied错误的缘故情由
- 协同推荐算法没有这么复杂,真的
- 支持分布式数据库同步操作的一个设计点:主键问题
- java 静态方法 变量_Java变量的初始化及静态方法的实现
- 20155319 2016-2017-2 《Java程序设计》第5周学习总结
- 如何保证Session值不丢失
- Heavyocity PUNISH Lite for Mac - 虚拟自动音频增强效果器
- Mac无损音乐播放器:Audirvana
- (原)ubuntu上安装Torch7及nn及dpnn
- html 颜色在线取色器
- 【weblogic部署应用】
- js:使用a标签下载图片及pdf文件等资源
- matlab三相逆变电路仿真,matlab三相逆变电路设计与仿真介绍.doc
- 多重序列比对 CLUSTALX
- Integer division by zero
- Fireshot——很棒的的网页截图扩展
- 2021年少儿编程未来趋势分析
- linux 系统重启过程,linux 系统启动流程
热门文章
- 一加会搭载鸿蒙,华为P50用液态镜头,小米11于29日发布,一加9一季度发布
- Struts2中将表单数据封装到List和Map集合中
- spring boot+shiro中使用@RequiresRoles不生效,访问报错404
- Vue——[Props with type Object/Array must use a factory function to return the default value.]解决方案
- ASP——Request.Form()方法获取POST提交方式的表单中文乱码解决方案
- BugKuCTF WEB flag在index里
- Colored Boots
- 微服务秒杀项目整合网关+feign+redis分离热点商品分别下单示例
- spring event的事件驱动模型的最佳实践@EventListener
- sqoop1.4.5 导入 hive IOException running import job: java.io.IOException: Hive exited with status 1