振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(4)

news2024/11/15 0:05:38

注解目录

1、znFAT 的起源

1.1 源于论坛

(那是一个论坛文化兴盛的年代。网友 DIY SDMP3 播放器激起了我的兴趣。)

1.2 硬盘 MP3 推了我一把

(“坤哥”的硬盘 MP3 播放器,让我深陷 FAT 文件系统不能自拔。)

1.3 我的导师-- 顾国昌教授

(哈军工时期的老教授,德高望重的人生导师。)

1.4 我的母校-- 哈工程

(隐藏牛校哈工程,网络名嘴张雪峰所言非虚。振南给你讲讲母校历史:哈军工、

工程学院、哈船院、哈工程。)

1.5 那场严重超时的答辩会

(20 分钟的答辩超时 1 小时,老师表示赞叹。现场承诺要把文件系统写成书。)

1.6 时隔多年的谢师会

(承诺必须兑现,5 年之后的谢师会,我擎书谢师。不要轻易作出承诺,除非你真

得能作到!)

2、高手如云 认清对手

2.1 国外 FAT 方案简介

1 )FATFS

2 )EFSL

3 )UCFS

4 )TFFS

5 )DOSFS

(列举那些主流 FAT 文件系统方案,并进行详细介绍。)

2.2 国内 FAT 方案简介

1 )ZLG/FS

2 )沁恒 FAT

(国内尚无成型开源的 FAT 文件系统方案。但是我们要支持国货。)

3、硬刚高手 挑战自己

3.1 与高手竞速

3.2 挑战自己

(这一节我写了一个月。环比各大知名方案,看看到底谁更快!最终,挑战了自我。)

4、znFAT 精彩应用大赏

4.1 振南的精彩实验

4.1.1 SD 卡 卡 WAV 音频播放器

4.1.2 SD 卡电子滚动屏

4.1.3 SD 卡 卡 MP3 播放器

4.1.4 AT89S51 离线下载器

4.1.5 数据采集导入 EXCEL

4.1.6 串口文件窃取器

4.1.7 录音笔于 (基于 VS1003B) )

4.1.8 文件无线传输实验

4.1.9 嵌入式脚本程序解释器

4.1.10 绘图板实验(基于 STM32F4 ,屏幕截图存为 BMP 图片)

4.1.11 MEMS 声音传感器“ 硅麦” 录音实验

(znFAT 的最大亮点在于各种精彩的应用,希望振南的这些实验可以让你眼前一亮。)

4.2 精彩的第三方项目应用

4.2.1 仿 仿 Metro UI 系统应用实验

4.2.2 通过 U 盘对产品进行升级

4.2.3 嵌入式网页服务器

4.2.4 STM32+LD3320 作声控音频播放器

4.2.5 BMP 图片浏览

4.2.6 VGA 显示 SD 卡中的图片(基于 FPGA) )

4.2.7 汉字电子书(基于 STM8) )

4.2.8 文本语音合成实验(TTS ,基于 NUC120) )

4.2.9 《跳跃小猫》动画播放(基于 FPGA NIOSII)

3

硬刚高手 挑战自己

列举了这么多的方案,是不是感觉 nFAT 其实很渺小。尽管如此,nFAT 还是要向它们发起挑战。也许,它可以像《兵临城下》中的瓦西里一样将敌人个个秒杀。你看到战火硝烟了吗?

3.1 与高手竞速


下面我们就从诸多方案中选取两个最具代表性的方案(FATFS 与 EFSL)来与 nFAT 进行较量,同时还要兼顾它们在空间方面(ROM 与 RAM)的占用情况。

在这场较量之中,我们会让各个方案都运行在各自最高速的极限状态下。谁能做到既省内存,速度又快,谁就是真正的胜者

测试方法很简单,我们用它们向文件中写入相同长度的数据,看看它们分别会花费多少时间。在具体测试方法的细节上,分为以下 4 种情况。

(1)向文件写入 10 000 次数据,每次数据量 512 字节;

(2)向文件写入 10 000 次数据,每次数据量 578 字节;

(3)向文件写入 1 000 次数据每次数据量 5678 字节(不使用硬件多扇区驱动)(4)向文件写入1000 次数据,每次数据量 5678 字节(使用硬件多扇区动)。

有人可能会问:“为什么要分这 4 种情况?它们各有什么用意呢?”前两项可以测出小数据量频繁写入时的效率表现,(2)比(1)多出了 55 个字节的不足扇区数据(很多时候这个数据尾巴是造成效率不高的原因);后两项则可以用于测试在频繁大数据量写人时,文件系统方案的效率表现,尤其是使用软硬两种多扇区实现方式的情况下(可以看到 nFAT 中振南所创造的算法能起到多大的作用)。

表 18.1 列出了在 ZN—X 开发板( 51 平台)上所测出的上述 4 种情况下各方案的实际结果。

表 18.1 znFAT 、 FATFS 与 EFSL 与在 51 平台的数据写入效率比较


从表 18.1中我们可以看到,在以整扇区或者以较大数据量进行数据写入时,数据的平均写人速度已经逼近物理层直接写单扇区的速度。我们要明白一点,文件系统层面上的数据写人速度再快也不可能比物理层快,顶多与之持平。(因为文件系统是基于物理驱动的。)所以说znFAT的数据写入效率已经达到极限。

另一方面,在使用硬件多扇区驱动的情况下,znFAT 把数据写入速度从 126KB/s 提升到了162 KB/s,而FATFS从 123 KB/s提升到了 150 KB/s,分别提升了36 和27 个单位。很显然,znFAT 对硬件多扇区优势的利用更加充分。说白了就是 nFAT 比 FATFS找到了更多的连续扇区。这背后就是振南创造的算法在起作用,它使得 znFAT 更加优越,更加强劲。最后,大家不要忽略更重要的一点:znFAT 比FATFS 还少用了 500 多字节的内存资源

曾经有人指着上面的测试结果,向我质疑:“我觉得你这个测试实验还不太具有代表性,也许FATFS 在 51 平台上确实表现不力,但这并不能说明它在其他 CPU 平台上也不敌 nFAT!”确实是这么回事,不过振南要说:水涨船高,随着 CPU 性能的提升,nFAT 的效率表现也会更加出色。为了证明这一点,振南把 nFAT 移植到了很多其他的 CPU 上来进行测试包括 Cortex-M3、ColdFire、AVR,MSP430 等,实际测试结果请看表 18.2~18.4。

表 18.2 FATFS 、 EFSL 与 znFAT 在 Cortex M3 平台上的数据写入速率比较


我相信上面的这些测试数据已经足够说明问题了。说实话,为了得到上面的这些表格中的测试数据,振南花了将近 1个月的时间,有人说不就是几个表格吗?为什么要花这么多时间?其主要原因在于:

(1) 测试中涉及的 CPU 平台比较多,很多芯片振南也是第一次使用,所以基本都是现学现用。当然,这里面也有一些网友和爱好者的协助:(限于篇幅很多 CPU上的测试结果并没有列举出来。)

(2)将 znFAT 移植到这些 CPU 上也要花费大量的时间和精力。

“对哦?znFAT 具体该如何移植呢?怎么应用?能不能详细全面地介绍一下?”

你猜得到振南要说什么,对!请去看《嵌入式 FAT32 文件系统设计与实现一-基于振南znFAT》一书

表 18.3 FATFS 、 EFSL 与 znFAT 在 AVR 平台上的数据写入速率比较


表 18.4 FATFS 、 EFSL 与 znFAT 在 ColdFile V2 平台上的数据写入速率比较


3.2 挑战自己


“你一直在跟别人比,你有没有和自己比过?”

“我没太明白!怎么个比法?”

我看了 znFAT 的代码了,也看了书了,它不是有多种模式嘛,各种模式在不同的 CPU平台上数据读/写性能怎么样,可以比较一下!好让我们使用者心里有个数。”

OK ,明白了。说比就比,如表 18.5~18.8 所列。

表 18.5 znFAT 在 51 平台上各种工作模式下的数据写入速度表现


表 18.6 znFAT 在 Cortex M3 平台上各种工作模式下的数据写入速度表现


如果说 znFAT 与FATFSEFSL 的较量是“横向较量”那上面我所做的就是针对 nFAT自身各种工作模式之间的“纵向较量”

我们可以看到,在各种 CPU 平台上,实时+无缓冲模式(即最原始的全实时模式,没有任何优化与加速机制)所占用的内存资源是最少的,但是它的数据写入速度也是最低的(下降到了全速模式下速度的 10%~30%)。这再一次印证了“时空平衡”的基本原理。其他模式对资源占用量与数据写人速度也都有不同程度的影响,希望可以为大家的实际应用提供参考。

另外,我们还留意到:znFAT 的内存使用量可以最低降到 819 字节这个水平。即使是把CCCB 用上(振南创造的一种算法),也只不过是 867 字节而已。(仅仅多占用了几十个字节但是数据的写人速度却提升了 20%~30%,基本已达到全速的一半,这也充分说明了 CCCB确实是一种很好的算法,它是巧妙而实用的,感兴趣了?买书去看看 CCCB 到底精妙在哪?)这也许是一项突破,它象征着 znFAT 可以应用到像 51 AVRPIC 这种内存资源相对较少的单片机上,而且速度也不会有太多损失(FATFS 最少需要 1300 字节左右的内存资源,虽然它有精简的 Tiny 版,但在功能和速度上有较大程度的裁减和损失)。

表 18.7 znFAT 在 AVR 平台上各种工作模式下的数据写入速度表现


表 18.8 znFAT 在 ColdFile V2 平台上各种工作模式下的数据写入速度表现

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

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

相关文章

新疆大学与优艾智合机器人成立联合创新实验室

11月22日至24日,第五届中国工业互联网大赛新疆赛站决赛在新疆维吾尔自治区昌吉回族自治州昌吉市举行。在大赛中崭露头角的优秀解决方案,将为绿色工厂、绿色园区、绿色供应链等建设提供新的动能,促进工业绿色发展。 作为大赛的成果延伸&#…

ESP32-Web-Server编程-建立第一个网页

ESP32-Web-Server编程-建立第一个网页 HTTP 简述 可能你每天都要刷几个短视频,打开几个网页来娱乐一番。当你打开一个网络上的视频或者图片时,其实际发生了下面的流程: 其中客户端就是你的浏览器啦,服务器就是远程一个存放视频或…

线性表的逻辑结构

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 只有靠自己的毅力忍耐&#xff0…

详解混合整数二次规划 (MIQP) 投资组合优化问题--附Matlab和Python实现

🔗 运行环境:Matlab、Python 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&am…

sqli-labs靶场详解(less11-less16)

目录 less-11 less-12 less-13 less-14 less-15 less-16 提交参数后 动态参数不存在url中 存在于post表单中 于是在表单中进行注入点测试 先看一看这种提交数据的关卡输入提交后会有什么反应 unameadmin&passwdadmin&submitSubmit 输出 usernameadmin passwordadmin un…

基于mpvue实现的cnode社区demo(附精选源码32套,涵盖商城团购等)

社区类目没有开放给个人开发者,所以没能上线。 预览 项目配置文件,更改appid {"description": "项目配置文件","setting": {"urlCheck": true,"es6": false,"postcss": false,"minif…

万字+28张图带你探秘小而美的规则引擎框架LiteFlow

大家好,今天给大家介绍一款轻量、快速、稳定可编排的组件式规则引擎框架LiteFlow。 一、LiteFlow的介绍 前言 在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关&…

触控板窗口管理软件Swish mac中文版

Swish mac是一款触控板窗口管理工具,它允许用户通过简单的手势来控制窗口。Swish利用MacBook的触控板,使得用户可以更加便捷地管理窗口。它支持多种手势,例如捏合、拖动、放大和缩小等,使得用户可以轻松地实现窗口的切换、最小化、…

代码随想录-刷题第十天

459. 重复的子字符串 题目链接:459. 重复的子字符串 提示:Java中转为字符数组,不使用charAt(),效率会更高。 思路1:暴力解法。起始下标从0开始,第一个for循环寻找子串的结束位置。只需要遍历到中间位置&…

代码随想录训练营第30天 | 332.重新安排行程、51. N皇后、37. 解数独

332.重新安排行程 题目链接:重新安排行程 解法: 这个题,卡哥的思路会超时。辛辛苦苦看懂了卡哥的思路,结果超时了,直接崩溃。 看了leetcode官方的思路,非常简洁,但是里面的深意还是不太懂。 由…

Python实现WOA智能鲸鱼优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

Linux常用命令——batch命令

在线Linux命令查询工具 batch 在系统不繁忙的时候执行定时任务 补充说明 batch命令用于在指定时间,当系统不繁忙时执行任务,用法与at相似。 语法 batch(选项)(参数)选项 -f:指定包含具体指令的任务文件; -q:指定…

【论文阅读笔记】InstructDiffusion: A Generalist Modeling Interface for Vision Tasks

【论文阅读笔记】StyleAvatar3D: Leveraging Image-Text Diffusion Models for High-Fidelity 3D Avatar Generation 论文阅读笔记论文信息引言动机挑战 方法结果 关键发现相关工作1. 视觉语言基础模型2. 视觉通用模型 方法/模型视觉任务的统一说明训练数据构建网络结构 实验设…

扫地机器人市场持续火爆,景联文科技数据采集标注方案助力扫地机器人智能化升级

随着消费者对智能家居和清洁卫生的需求增加,扫地机器人市场规模不断扩大。市场竞争也日益激烈,各品牌都在努力提升产品性能和服务质量,以获取更大的市场份额。 IDC的统计数据显示,今年双十一前两周(2023年10月23日至20…

u盘打不开,提示需要格式化怎么办

U盘作为一种常见的便携式存储设备,被广泛应用于生活和工作中。然而,有时当我们尝试打开U盘时,会出现提示需要格式化的错误信息,这是一种常见的故障。造成这种故障的原因可能包括U盘文件系统错误、病毒感染、物理损坏等。为了解决这…

Python网络爬虫练习

爬取历年中国大学排名(前20名),并随机选取一所高校画图展示其历年总分变化,并计算平均分,在图上展示该平均分直线: 代码如下: import matplotlib.pyplot as plt import pandas as pd import requests import randomdef main(yea…

如何在C/C++中测量一个函数或者功能的运行时间(串行和并行,以及三种方法的实际情况对比)

本文算是一个比较完整的关于在 C/C 中测量一个函数或者功能的总结,最后会演示三种方法的对比。 最常用的clock() 最常用的测量方法是使用clock()来记录两个 CPU 时间点clock_t,然后做差。这个方法的好处在于非常简单易写,如下(第…

语音机器人的两种常见业务场景

第一个业务场景 之前写过一篇语音机器人是真人录音好,还是TTS转语音更好的文章。今天再来说一说TTS一个很细微的场景。 假设一句话 这里是*****银行委托机构,您在*****银行的信用卡长期逾期至今仍未依照约定履行还款义务,为避免逃废债给您…

vue3父子组件通过$parent与ref通信

父组件 <template><div><h1>ref与$parents父子组件通信 {{ parentMoney }}</h1><button click"handler">点击我子组件的值会减20</button><hr><child ref"children"></child></div> </te…

vue3+ts 指令简写

<template><div class"btns"><button v-has-show"shop:create">创建</button><button v-has-show"shop:edit">编辑</button><button v-has-show"shop:delete">删除</button></div…