<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
八、FatFS的其它特性和新进展
1、支持重入功能
在多任务操作系统中,各个任务是并发的。当它们要同时访问文件系统时,先要获得同步对象。比如在ucos中,可以采用互斥信号量来同步。在f_mount()时,创建同步对象,在check_mount()和validate()函数调用时,先申请同步对象,若是其它任务在使用文件系统,则在同步对象上等待。任务完成后,再释放同步对象。
这个功能与操作系统的任务同步特性相关,以后如果要使用这个特性的话在详细分析。
2、支持文件的共享打开(主要是多次以读的方式打开)
这是FatFs作者在3月份新上传的R008 Rev1版本里新增加的功能:
在ffconf.h中增加了_FS_SHARE共享数目定义。
在ff.h增加了:文件共享信息结构体定义,并在文件系统结构体中使用。
typedef struct _FILESEM_ {
DWORD clu; /* File ID 1, directory */
WORD idx; /* File ID 2, index in the directory */
WORD ctr; /* File open counter, 0:none, 0x01..0xFF:read open count, 0x100:in write open */
} FILESEM;
在ff.c中增加了四个函数:
FRESULT chk_lock ( /* 检查文件是否可以被访问 */
DIR* dj, /* Directory object pointing the file to be checked */
int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */
)
BOOL enq_lock ( /* 为一个新文件找到可用的文件共享结构体 */
FATFS* fs /* File system object */
)
UINT inc_lock ( /* Increment file open counter and returns its index (0:int error) */
DIR* dj, /* Directory object pointing the file to increment */
int acc /* Desired access mode (0:Read, !0:Write) */
)
FRESULT dec_lock ( /* Decrement file open counter */
FATFS* fs, /* File system object */
UINT i /* Semaphore index */
)
主要调用的地方是f_open()和f_close()函数。
3、支持文件的快速定位。
这是FatFs作者在3月份新上传的R008 Rev1版本里新增加的功能:
在ffconf.h 定义了_USE_FASTSEEK,用于支持文件的快速定位。
FRESULT f_lseek (
FIL *fp, /* Pointer to the file object */
DWORD ofs, /* File pointer from top of file */
DWORD *tbl /* Pointer to cluster link map table */
)
说明是这样描述的:
The f_lseek function has been changed to implement fast seek feature. But the additional 3rd argument is ignored unless fast seek feature is enabled (_USE_FASTSEEK == 1). To use this feature, give a pointer to the working buffer to store the cluster link map to the 3rd argument.
主要意思是在内存中划一块缓冲区用于存储 文件的簇链映射图,以方便查找簇链。稍微阅读了以下源代码,其实现方法是这样的:当给出参数ofs == CREATE_LINKMAP的时候,在tbl所指向的内存区域建立新的簇链映射。
表的第一项是整个映射表的长度,以后每两项为一对:前者存储相邻簇的数目,后者存储相邻簇的起始簇号。举个例子,某个文件占据5、6、7、8、15、16、17共7个簇,则需要两对表项。分别是(4,5)和(3,15)两项。
以后就可以利用该簇链映射图实现文件的快速定位了,不用沿着簇链一项一项找下去,最后实现定位。
4、支持长文件名缓冲区的动态分配。
这是FatFs作者在3月份新上传的R008 Rev1版本里新增加的功能:
这个主要靠运行时系统动态内存分配,这里就不再详细叙述了。
以上的功能实现和使用,我都会一直关注。如果以后学习过程中需要用到或者我的开发板满足使用要求了,再去实验这些功能。
文章评论(0条评论)
登录后参与讨论