利用官方给出的flash模拟eeprom的思路,进一步升级,可以考虑,用2个falsh页+ram,但是两个页功能不同,第一个页保存数据的地址索引,第二个页才是真正的
保存数据。这样的方案,第一个页的基本数据结构是:数据号(16bit)--对应的索引(16bit)。而第二页就是任意结构的数据在任意地址(由第一页的索引来索引)
每一个页都分成若干小页,小页的大小由使用的ram大小决定,比如512byte的ram,则应设置2K页面分成4个小页,考虑掉电保证数据完整性,每个2k页中,只有
前3个小页是作为存储索引或数据用的。最后一个小页的用处,后面会说。
当小页写满后,将小页内容拷贝到ram中,整理之后,重新写到下一个小页中,如此直到第三个个页写满后,把第三个页的内容拷贝到ram中并整理,然后将
这个内容写入到另外的2K页中的第四个页位置上。也就是说,第一个2k页的第四小页是暂时保存第二个2K页写满后的小页的,同理,第二个2k页的第四小页
是暂时保存第一个2K页写满后的小页的。这样做,是为了掉电时的数据完整性。
每个小页是512字节,但是保留12字节作为校验和之类的使用,更加保证了数据的完整性。
基本的结构就是这样,具体的实现细节做的时候再说。这里只是提供一个思路.
本贴只给有缘人,能看懂的话,把我这个思路实现了,保证是比原来官方的速度快上多少倍不止.原来官方的代码,读取数据的速度是变化的,随着数据的增多,读取就变慢了,各个网友提供的思路,虽然有所改善,但是本质不变,数据多了,都会变慢,只不过程度不同而已..而我的这个思路,实现之后,读取的速度是个常量,根据数据号直接映射到数据地址,和原来的官方方案比较,寻址是瞬间完成.而且永远这么快,存多少数据,都是这样.
|