在EEPROM等小容量储存器建立文件系统
本帖最后由 mugenwon 于 2011-11-7 09:19 编辑SD卡之类的容量很大,一般都用fat之类的文件系统。有操作系统给你,大堆函数给你甚至硬件也支持,那没问题。如果我要在一个24C04什么的上面,做类似的操作,用文件的方式,只给你一个51单片机,要做个简单的文件系统,怎么做?要求能放不限数量的文件,有文件名,能自动分配空间,整理空间,文件可以不连续存放。能随机删除,读取。有没有前辈做过分享一下经验?方法当然是越简单越好。(这里说的文件不是真正意义上的文件,只是一堆数据而已。例如放一段程序) 使用动态内存分配不就可以了 给你一片论文 应该用得上 我是这样想的,但没试验过,首先提个想法。
第一,必须有个文件分配表。因为假如我要找某个文件,难道我必须从0开始整个空间完全读完才找到吗?那太慢了。有了文件分配表,我只要查这个表就知道某个文件在什么地方,多大,还有没有空间等等。
于是这里就有问题,这个分配表,大小是不是固定?固定的,虽然操作简单,显然不够灵活(但对于有限或已知的文件数量,用固定的方法更简单)。如果我要不固定,那这个表大小不固定,会影响到真正文件的存放。那么这个文件分配表也应该动态。
第二,我知道磁盘的组织,不是一字节一字节都给你用光的,他一簇一簇的用。就算你用一个字节,他也占了一簇空间。那我用EEPROM或者FLASh之类的,我也可以用这个办法简化操作(简化擦除)。例如24C某某,他一次能连续写64个字节一页,那我也干脆这么搞。以64字节为一单元。一来操作简单,二来寻址可以把地址低6位去掉,寻址空间变大64倍。
第三,分配表和文件区,如何实现动态分配。以前学过毛皮但真没实践过!原理大概是,一片数据里面,除了数据还有指针,指向下一个储存位置开头。做起来也不难,例如我64字节一单元,我可以第一单元为开始标志(为了标式,例如坏了就变成坏的标志,空就空标志),第2单元可以指向下一片地址,第三可以是长度等等,还加个结束标志的。
第四,为了区分哪个是分配表,哪个是真正文件储存区,这个储存器开头必须有个特别的区域,表明分配表在哪里,文件在哪里,这个区域可以固定死大小和格式。还可以加进什么ID之类的,总占用空间,总储存空间或者其他什么功能区以后开发用。
第五,文件不外乎读,写,擦除。读,首先在文件分配表找到文件开头位置,然后读即可。擦除,只要把文件分配表头干掉即可。或者也可以把真正文件区域也一同干掉(也是把几个关键字节干掉便行,如果是falsh只能一页干掉了),写的话,首先要知道有没有相同文件名。没有就看有无空间,有的话要判断是干掉旧的还是取消操作。这涉及到另一层次了。属于操作的层面。
操作层面就是,读,写,擦除,格式化等等动作,当然有返回值,成不成功,询问下一步确认等等。
当然,为了保险还可以加上校验功能,读写次数等等,看自己需要了。 感谢3楼的资料。但说实话,这样就能做一篇论文我觉得也太简单了吧。我觉得不如写篇如何提高文件系统的性能的论文好了。我发现windows系统,某个文件夹文件太多,打开就会蜗牛。假如有100个文件那还好,给你来个10万个文件,1000万个文件,一打开电脑不崩溃人都崩溃了。。。 呵呵 这个是针对eeprom的"小型文件系统",主要针对的eeprom.那么他的容量就不会太大 也就不会有那么多文件.这个东东只是便于存储少量数据,方便检索.
当然如果你要通过单片机操作SD卡 那么你可以用fatfs这样的开源文件系统,编译之后也就几K,可以完成和电脑几乎一样的操作.但是不能用在eeprom上面啊. 结构化数据存储,比文件系统省钱. mark收下! 呵呵 这个是针对eeprom的"小型文件系统",主要针对的eeprom.那么他的容量就不会太大 也就不会有那么多文件.这个东东只是便于存储少量数据,方便检索.
当然如果你要通过单片机操作SD卡 那么你可以用fatfs这样的开源文件 ...
uurun 发表于 2011-11-7 14:19 https://bbs.21ic.com/images/common/back.gif
请问FATFS为什么不能用到eeprom? 没有必要,应用不需求 可以参考FAT12,做一个FAT8来用 没有必要.
如 24C01,就那么点容量,等所谓的"文件系统"上去,装东西的空间都没有了.
再说,用到24C这类东西的控制MCU,也是ROM很小的东西,操作"文件系统"
也不现实. 好东西~~~ 很好 文件系统用空间使用效率换来方便灵活,对于2404这么少的memory 得不偿失。 学习万岁!! 楼主成功了吗?
我最经在考虑用STM32的单片机在SST25VF016中以文件的方式存储数据。想请教一下。
谢谢 spi方面文件系统多得多了
页:
[1]