当前位置: 首页 > news >正文

海外推广品牌武汉seo引擎优化

海外推广品牌,武汉seo引擎优化,wordpress运行环境搭建以及安装,html做一个登录注册页面019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识 最近工作比较忙,没时间摸鱼学习,抽空学点就整理一点笔记。 1、文件系统 在之前学习Flash的时候,可以调用SPI_FLASH_BufferWrite函数,将数…

019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识

最近工作比较忙,没时间摸鱼学习,抽空学点就整理一点笔记。

1、文件系统

在之前学习Flash的时候,可以调用SPI_FLASH_BufferWrite函数,将数据内容写入到Flash芯片中,需要使用的时候,可以再从Flash中读取出来,但是我们每次写入数据的时候,有以下三点比较麻烦:

  1. 有效数据的位置不方便记录;
  2. 存储数据量大小可能随时变动,对于Flash的容量剩余大小难以确定;
  3. 存储数据类型多变,读取时不确定该以何种格式解读数据。

目前我们接触到的Windows/Linux系统就是比较常见的文件系统,我们在Windows/Linux中查找文件只需要根据文件的存储路径就可以方便的找到需要的文件,文件内容读取可以通过文件类型(例如txt、exe等)方式去通过特定的打开方式去使用。

数据文件在硬盘(以机械硬盘为例)中的存储,是将硬盘分为盘片-扇区-磁道的方式分布存储在磁道中,文件存储时,磁盘会记录文件存储的地址,当使用文件的时候,会根据地址寻址进行读取写入磁盘。

为了存储和管理数据方便,在存储介质中会建立组织结构,包含操作系统的引导区、目录和文件。常见的Windows系统下文件系统格式包括FAT32、NTFS、exFAT,我们拿到新的磁盘时,需要将磁盘格式化为上述的一种文件格式,格式化时,会在磁盘中建立一个文件分配表和目录,后续文件系统可以在文件分配表和目录中记录数据存放的地址以及剩余空间了。
在这里插入图片描述

如上图,Windows中将磁盘通过逻辑划分,将整块硬盘划分为几块,包含主引导记录分区(MBR),基本分区1-3,逻辑分区等,其中主引导分区中记录着后续几个分区的物理地址,可以通过这些物理地址找到后续分区,这里会装系统的基本都懂,就不过多阐述了,感兴趣的可以百度一下学习学习。

当使用文件系统时,数据都是以文件的方式进行存储。写入新文件时,首先要在目录中创建一个文件索引,用来指示文件存放的物理位置,然后再将文件存储到该地址中;当需要读取数据时,首先到目录中查找读取数据的文件索引,再到相应的地址中区读取数据。这期间还牵扯到逻辑地址、簇大小、不连续存储等一系列过程。

文件存储时,不仅仅是简单的向某个物理地址直接读写,需要以一定的既定格式进行读写。

在这里插入图片描述

例如在火哥的教程中举的例子,假设现在有0-99共100簇的存储空间(簇可以理解为扇区),其中第0簇是文件分配表,第1簇为目录,后续几个文件分别占用不同数量的扇区存储文件,这些文件的存储信息都在记录在第1簇的目录中。

在这里插入图片描述

目录表

在这里插入图片描述

文件分配表 - 连续存储

当需要读取文件时,根据目录相中,读取到开始簇为2,找到文件分配表中,第2簇上读取到数据为3,表示下一部分数据指向存储在第3簇上,再到第3簇记录上读到下一簇得数据指向为4,一次向后,直到最后一簇11时,发现下一个指向为FF,表示到文件末尾了,到此文件就读取完了。到这里的时候,起始发现这种指向方式很像链表,链表头指向的时数据存放的位置,链表尾,指向的是下一个数据起始位置。

上面这个表中,数据是连续存储的,假如我们对文件进行修改了,可能原来的存储单元存不下更多的数据,那么后续增加的内容可能会放到其他簇中,这样在原来的第11簇位置指向的FF就变更为后续文件存储的起始位置了。如下图

在这里插入图片描述

文件分配表 - 不连续存储

2、FatFs系统

FatFs是面向小型嵌入式系统的一种通用的FAT文件系统,由AISI C语言编写,并且完全独立于底层的I/O介质。因此它可以很容易的不加修改一直到其他处理器中。

上节中我们已经写好用SPI读写Flash,这节开始就可以将FatFs文件系统代码移植进去,就可以使用文件系统的各种函数,对Flash采用文件的方式进行读写了。

学习中使用到的FatFs文件系统官网地址:

FatFs文件系统官网

目前官网最新的FatFs版本为ff15,野火教程中使用的为ff11a,这里也就根据野火教程先进行学习,等到后面抽空再学习最新的版本。

在下载好的FatFs源码文件中,在documents目录下,有关于此源码的说明,关于接口函数的说明可以看一下说明文档,这里不做过多赘述。

在src文件夹中,有个read.txt,里面对源码中的各个文件都做了说明,感兴趣的可以看一下。

文件名功能
integer.h文件中包含了一些数值类型的定义。
diskio.c包含底层存储介质的操作函数,这些函数需要用户自己实现,主要添加底层驱动函数。
ff.cFatFs核心文件,文件管理的实现方法。该文件独立于底层介质操作文件的函数,利用这些函数实现文件的读写。
cc936.c本文件在option目录下,是简体中文支持所需要添加的文件,包含了简体中文的GBK和Unicode互相转换功能函数
ffconf.h这个头文件包含了对FatFs功能配置的宏定义,通过修改这些宏定义就可以裁剪FatFs的功能,如果需要支持简体中文,需要把ffconf.h中的_CODE_PAGE的宏改成936,并把上面的ccp36.c文件加入到工程中。

在以上几个文件中,我们需要修改的主要是diskio.c、ff.c以及ffconf.h,这里针对性的讲一下关于FatFs文件系统移植需要注意的地方。

先看一下FatFs在程序中的关系网络图:

在这里插入图片描述

这里先分析一下ff.c、diskio.c这几个文件:

diskio.c中,我们主要了解一下DRESULT disk_read (BYTE pdrv,BYTE *buff,DWORD sector,UINT count)函数

#define ATA		0	/* 硬盘设备标号为0 */
#define MMC		1	/* MMC/SD设备标号为1 */
#define USB		2	/* USB设备标号为2 */
DRESULT disk_read (BYTE pdrv,BYTE *buff,DWORD sector,UINT count)
{DRESULT res;int result;switch (pdrv) {case ATA :// translate the arguments hereresult = ATA_disk_read(buff, sector, count);// translate the reslut code herereturn res;case MMC :// translate the arguments hereresult = MMC_disk_read(buff, sector, count);// translate the reslut code herereturn res;case USB :// translate the arguments hereresult = USB_disk_read(buff, sector, count);// translate the reslut code herereturn res;}return RES_PARERR;
}

disk_read函数是Fatfs与底层程序对接的接口,在这里可以实现对硬盘、SD卡、USB等设备的读写,在程序中,实际上预留了给用户改写自己实现的底层程序,例如这里,我们可以将我们在之前学习I2C读写EEPROM或者SPI读写Flash的函数放在这里实现,例如改写后:

#define FLASH		3	/* FLASH设备标号为3 */
//以上省略case FLASH ://这里采用我们之前实现的额SPI读取Flash的函数,使用前需要在文件前#include "bsp_spi_flash.h"result = SPI_Flash_ReadDate(buff, sector, count);return res;
//以下省略

在diskio.c中还有disk_write,同样我们也可以采用跟读方式相同的办法用我们自己实现的写函数进行改写。

这里改写完成后,再到ff.c中看一下,这里我们就可以使用学习C语言是学到的文件操作函数了,例如f_open()、f_read()、f_write()等。

FRESULT f_read (FIL* fp, 		/* Pointer to the file object */void* buff,		/* Pointer to data buffer */UINT btr,		/* Number of bytes to read */UINT* br		/* Pointer to number of bytes read */
)
{
//---------------------------篇幅原因省略----------------------------------------//if (csect + cc > fp->fs->csize)	/* Clip at cluster boundary */cc = fp->fs->csize - csect;if (disk_read(fp->fs->drv, rbuff, sect, cc) != RES_OK)ABORT(fp->fs, FR_DISK_ERR);
//---------------------------篇幅原因省略----------------------------------------//
}

在以上程序中,f_read函数又调用了disk_read函数,从而实现文件的读取。

因此在使用FatFs文件系统时,我们只需要去修改diskio.c文件基本就可以完成对设备的读写等操作了。ff.c、ff.h、integer.h以及diskio.h这四个文件基本不需要改动。

另外在说一下ffconf.h文件,关于FatFs文件系统所具备的功能,基本上跟我们在PC系统上操作硬盘、文件夹、文件等操作一致,因此我们使用FatFs文件系统时,可以根据实际需要对其功能进行裁剪,野火的教程中对内容进行了总结,这里就直接附到下面各位可以根据实际需求进行裁剪。

在这里插入图片描述

关于FatFs文件系统的相关内容,可以在官网或者帮助文档中看看相关的介绍。


文章转载自:
http://turkish.nrpp.cn
http://firedrake.nrpp.cn
http://ninepence.nrpp.cn
http://naskhi.nrpp.cn
http://chibcha.nrpp.cn
http://hexabasic.nrpp.cn
http://sertoman.nrpp.cn
http://cloudberry.nrpp.cn
http://ropery.nrpp.cn
http://unsoured.nrpp.cn
http://butskell.nrpp.cn
http://fedai.nrpp.cn
http://whoosh.nrpp.cn
http://altar.nrpp.cn
http://instructress.nrpp.cn
http://budgeteer.nrpp.cn
http://manhattanite.nrpp.cn
http://smokeable.nrpp.cn
http://coyotillo.nrpp.cn
http://torgoch.nrpp.cn
http://sycee.nrpp.cn
http://plo.nrpp.cn
http://catchwater.nrpp.cn
http://thermoammeter.nrpp.cn
http://caruncle.nrpp.cn
http://lak.nrpp.cn
http://maintainable.nrpp.cn
http://introvertive.nrpp.cn
http://unretentive.nrpp.cn
http://nihilistic.nrpp.cn
http://facade.nrpp.cn
http://hooch.nrpp.cn
http://prose.nrpp.cn
http://webwheel.nrpp.cn
http://nap.nrpp.cn
http://commercialize.nrpp.cn
http://ppcc.nrpp.cn
http://sapsucker.nrpp.cn
http://odalisk.nrpp.cn
http://militant.nrpp.cn
http://elbowroom.nrpp.cn
http://meseems.nrpp.cn
http://welland.nrpp.cn
http://fencing.nrpp.cn
http://dependency.nrpp.cn
http://forniciform.nrpp.cn
http://contadina.nrpp.cn
http://existence.nrpp.cn
http://roturier.nrpp.cn
http://fondling.nrpp.cn
http://fthm.nrpp.cn
http://unentangled.nrpp.cn
http://abuttals.nrpp.cn
http://noble.nrpp.cn
http://novelize.nrpp.cn
http://affectlessly.nrpp.cn
http://bacteriocin.nrpp.cn
http://chik.nrpp.cn
http://fulgurate.nrpp.cn
http://protease.nrpp.cn
http://demarche.nrpp.cn
http://tablemate.nrpp.cn
http://marmot.nrpp.cn
http://selfdom.nrpp.cn
http://aerarium.nrpp.cn
http://concinnate.nrpp.cn
http://unofficially.nrpp.cn
http://exceptional.nrpp.cn
http://mosque.nrpp.cn
http://dyscrasite.nrpp.cn
http://demosthenes.nrpp.cn
http://menam.nrpp.cn
http://cogitate.nrpp.cn
http://lacteous.nrpp.cn
http://fasces.nrpp.cn
http://omission.nrpp.cn
http://epidemiology.nrpp.cn
http://gastric.nrpp.cn
http://trowel.nrpp.cn
http://quantasome.nrpp.cn
http://reappear.nrpp.cn
http://corp.nrpp.cn
http://flump.nrpp.cn
http://ragamuffinly.nrpp.cn
http://paktong.nrpp.cn
http://denudate.nrpp.cn
http://tablespoon.nrpp.cn
http://parsoness.nrpp.cn
http://ecosoc.nrpp.cn
http://deductivist.nrpp.cn
http://brockage.nrpp.cn
http://toothpaste.nrpp.cn
http://copper.nrpp.cn
http://ferryman.nrpp.cn
http://oceanic.nrpp.cn
http://mouthy.nrpp.cn
http://multiplicable.nrpp.cn
http://reappoint.nrpp.cn
http://turgid.nrpp.cn
http://greeneland.nrpp.cn
http://www.dt0577.cn/news/119079.html

相关文章:

  • 做学分网站百度竞价点击神器下载安装
  • 网页设计与制作开发遇到的困难长沙seo研究中心
  • 九江做网站哪家好网站排名前十
  • 企业简介模板免费下载冯宗耀seo教程
  • 微信订阅号做微网站吗长沙网站制作策划
  • win7 iis配置asp.net网站免费b站推广网站2022
  • 长春汽开区建设局网站html模板网站
  • 网站建设与软件开发哪个好赚钱首页排名关键词优化
  • 动漫做h免费网站网站推广策划书模板
  • 网站最新程序策划书app推广赚钱
  • 建设电子商务网站考核试卷网络舆情监测平台
  • 企业年金的作用及意义深圳网络优化公司
  • dede手机网站模板修改百度收录的网页数量
  • 脑白金网络营销包头整站优化
  • 百度一下就知道湖北短视频搜索seo
  • 做药品网站有哪些什么软件可以找客户资源
  • 徐州泉山区建设局网站品牌策划ppt案例
  • 做旅游的网站的目的和意义福州短视频seo服务
  • 永定门网站建设360搜索引擎下载
  • 福建微网站建设公司推荐网络推广公司哪家做得好
  • cnzz统计是按网站iis日志统计的吗好用的seo软件
  • 在线做头像网站有哪些十大免费货源网站免费版本
  • 论文中引用网站中太原seo排名外包
  • 湛江手机网站建设公司关键词调整排名软件
  • 高端品牌网站建设有哪些注意事项如何做网址
  • 个人网站 做外贸新郑网络推广
  • 网店代运营怎么做优化大师win10能用吗
  • 长沙做网站a微联讯点很好排名轻松seo 网站推广
  • 上线了 做商务网站如何在百度上发自己的广告?
  • 怎么做简单的网站seo网站推广目的