找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4712|回复: 1
收起左侧

小型FLASH的管理(原理)

[复制链接]
ID:82781 发表于 2015-6-13 01:11 | 显示全部楼层 |阅读模式
                 最近有些问题困扰左右。一些小数据的存储问题,现在的片上系统或者单片机系统或多或少的会带一点DATA flash的存储区,大不比以前的24cxx的时代了,当然24CXX也算的上是经典的存储。但是就目前我做过的这种存储大都是一些简单的数据或者变量。只要存几个地址即可,根本不存在管理的问题。也正是基于此,导致现在如果要是实现一个小的FLASH管理就显得很繁杂,甚至无从下手,考虑了许久,想到了内存池,内存池的概念基本上和Data Flash 相似的,对比他们之间的差别主要在于扇区地址寻址和擦写上,SRAM当然是读写随便了,只要指针直捣之处即使原始物理地址写入读出即可,但是FLASH的特性注定不能这样子搞。他是块擦写的。如此就很难搞的和内存池一样灵活。
我想这样解决之:
1、建立一个数据结构来管理已知的FLASH,作一个记录,这个记录由若干个小块组成,小块用链表。
2、按照MEM_POOL构建FLASH的分配和释放机制,为APP提供接口。
3、建立中间区域,所谓中间区域即使最小可擦写扇区,一般标定为512byte,用来作为程序-中间缓冲区-FLASH三者协同。
4、在管理记录中加入两套函数指针,指向驱动层的驱动函数,以提高灵活性,适应片外EEPROM或者小容量FLASH。
5、块校验和存储自己的映像。管理为单链表结构,数据块为线性结构。以减低代码实现的复杂程度。

倘若是上百兆的FLASH或者NAND之类的,毫无疑问直接上文件系统是嘴有效的。主要是有些应用介于大容量之间,有没有足够的资源,只能是自己实现一套管理机制,


数据结构参考如下:
                                POOL list and BLOCK

                                BLOCK在这里不适用,换成最小的快,即=512BYTE
                                POOL管理FLASH
                                list 提供块数量,
                                自从此数据结构诞生之时起就决定了他的物理存储边界和块大小。
                                显然对mem_pool做了裁剪,变成了一个完全是单链表的结构,代码复杂度低得多。





说到底其实就是一张饼,然后用刀切,切成均匀的一小块一小块,小块上面有的有芝麻有的没有。
应该做出这张饼!


老伟
比特电子








回复

使用道具 举报

ID:353593 发表于 2018-6-18 11:32 | 显示全部楼层
您好,能发下flash管理的源码吗?谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表