一步步教你移植FatFS文件系统_FatFs移植后怎么跟电脑.docVIP

一步步教你移植FatFS文件系统_FatFs移植后怎么跟电脑.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

前段时间移植了一个FATFS文件系统之后总是有人问我FATFS移植的问题,有时候很多问题都一样,只是有些人太浮躁,没有好好的把那不到1K的源文件给看一遍而已,今天整理文件,发现之前下载的一个很不错的介绍FATFS的文章,里面基本上把代码全部都注释了,奉献给大家。原文如下,地址已经找不到了,就不在附上了,感谢写这篇文章的人。

=====================我是分割线============================================

最近做的spiflash,本打算弄个文件系统,由于之前用过了JFFS、YAFFS和TrueFFS,代码量都相当的大,这次想找款代码量不那么吓人的,学习一下,听说配置会相对复杂一些。选来选去,最终选定了FatFS,代码量足够的小,最新的R0.09版本只有1个.c文件(当然,还有一个底层的要自己写,option文件夹里的无视),老点版本就更小了。而且更新很频繁,用户量也够大,就选定它了。尽管最后由于硬件和项目原因未能实际的移植它到vxWorks,但学过的还是要记录下。

??在这里/fsw/ff/00index_e.html下载源码,只有800多K,小的可怜,还可以下载示例程序,有AVR、Win32、lpc等多平台已实现的方案。打开看src文件夹,一个option文件夹、00readme.txt、diskio.h、ff.c、ff.h、ffconf.h和interger.h。移植时需要修改的文件主要包括ffconf.h和interger.h,后者是在它的定义与目标平台上的有冲突,或者用的不习惯时修改的。

??在做具体修改之前,先大概阅读下FatFS的源代码,可以先读integer.h,了解所用的数据类型,然后是ff.h,了解文件系统所用的数据结构和各种函数声明,再就是diskio.h,了解与介质相关的数据结构和操作函数。ff.c这个文件相对较大,可以在最后将所实现的函数大致扫描一遍,之后根据用户应用层程序调用函数的次序仔细阅读相关代码。各个文件都可以直接用记事本打开查阅,非常方便。ff.h中的几个结构体十分重要,列举如下,首先是最基础的文件系统结构体:

/*Filesystemobjectstructure(FATFS)*/

typedefstruct{

????BYTE????fs_type;????????/*FAT子类型,一般在mount时用,置0表示未挂载*/

????BYTE????drv;????????????/*物理驱动号,一般为0*/

????BYTE????csize;????????????/*每个簇的扇区数目(1,2,4...128)*/

????BYTE????n_fats;????????????/*文件分配表的数目(1,2)*/

????/*FAT文件系统依次为:引导扇区、两个文件分配表、根目录区和数据区*/

????BYTE????wflag;????????????/*标记文件是否被改动过,为1时要回写*/

????BYTE????fsi_flag;????????/*标记文件系统信息是否被改动过,为1时要回写*/

????WORD????id;????????????????/*文件系统挂载ID*/

????WORD????n_rootdir;????????/*根目录区入口(目录项)的个数(用于FAT12/16)*/

#if_MAX_SS!=512

????WORD????ssize;????????????/*每扇区的字节数(用于扇区大于512Byte的flash)*/

#endif

#if_FS_REENTRANT

????_SYNC_t????sobj;????????????/*允许重入,即定义同步对象,用在tiny中*/

#endif

#if!_FS_READONLY

????DWORD????last_clust;????????/*最后一个被分配的簇*/

????DWORD????free_clust;????????/*空闲簇的个数*/

????DWORD????fsi_sector;

文档评论(0)

wszwtlg202 + 关注
实名认证
文档贡献者

一页纸且

1亿VIP精品文档

相关文档