1. FATFS简介
Fatfs是嵌入式上常间的文件系统, 其源文件结构上如下图所示:
该文件系统模块,支持FAT12/FAT16/FAT32。通常配置FATFS时,
需要设置簇大小(cluster size)。
fatfs文件系统上布局
2. Fatfs特性
2.1 复制文件访问
Fatfs模块默认不支持对复制文件的共享控制,仅当文件的打开方式为只读模式,才允许共享控制, 禁止以写入模式对文件进行复制打开,而且打开的文件不允许被重命名和删除,否则会破坏卷的FAT 结构。
2.2 可重入性
不同卷的文件操作是可以重入的,并且可以同时工作,同一个卷是不可重入的,但是可以利用 _FS_REENTERANT option选项配置为线程安全。在这种情况下,必须将依赖操作系统的同步 控制函数ff_cre_syncobj()、ff_del_syncobj()、等。当卷被其它任务使用时,如果文件 函数被调用,则这个文件函数会保持挂起,直至改任务结束,如果等待时间超过_TIMEOUT设定 时间,那么文件函数会以FR_TIMEOUT退出。 可重入性时独立和RTOS模式配置之间的主要差异,这一点可以在fatfs配置文件ffconf.h中设置。 #define _FS_REENTRANT 0 #独立模式禁用可重入性 #define _FS_REENTRANT 1 #RTOS模式中使能可重入,一旦使能,用户必须提供依赖于OS 的同步对象(#define _SYNC_t osSemaphoreld)
3. 科普
3.1 扇区管理
扇区是磁盘最小的物理存储单元,一般一个扇区512B大小,但是操作通常不直接操作每一个扇区, 而是通过将扇区组合成一个更大的集合进行管理操作。 这个比扇区更大的集合,在windows上称为簇(cluster),在Linux上称为块(block)。 在windows上,常见的设置簇大小一般为4K,所以对于存储一个10kB的文件,就会使用到 3个簇,也就是实际占用空间为12KB。 在设置簇大小过程中,如果簇设置较小,此时空间利用率较高,但是在操作读取数据时,是以 簇为单位进行检索的,识别到空白的簇会直接跳过,例如当簇设置为4k时,1MB就是256个簇, 而设置为8K簇,1MB为128个簇,识别效率上会有提升。
4.实践操作
实际使用中,请注意一些配置从而提升效率(非改造代码进行提升)
4.1 合理配置缓存
增大缓存可以减小对存储介质的直接读取次数,比如:对于频繁访问文件数据,优先从缓存中读取,或者先写入缓存, 在批量写入存储介质。(缺点内存消耗,小心掉电)
4.2 优化文件系统参数
根据存储介质特性和应用需求,合理调整FATFS参数: 簇大小:簇较小时,存储效率高,空间利用率高,但是对于读取大量文件,效率就明显不佳,簇设置较大,存储空间 利用率低,但是文件读写上有一定的性能提升。
您还没有登录,请您登录后发表评论。