方法如图
由于Flash擦写次数的限制,并不适合用于存储每天需要更新的一些数据,比如生产计数类数据。按最坏情况计算的话,1K次擦写也就3年多点,对于设备来说三年是远远不够的。
我刚想了个解决办法,求拍砖,求改进。
将数据同时写入A,B,C三个区域,在D中记录三个区域的地址。
开机读取数据时从D中获取地址后获取数据并判断是否一致,如果一致就说明数据可靠,继续运行
如果不一致,丢弃不一致的那个(我认为同一块IC的Flash的不同区域擦写寿命不是完全一样的,会有差异,那么肯定会有一个先坏!即使是一样的,也可以在第一次存储的时候在区域A中多擦几次解决)
将数据搬移到另外三个区域,原来的都不要用了(继续用也是可以的),同时更新存储地址的D
STM32的Flash一般很大,无所谓一点让费。频繁修改的数据最好关机存。
以前是混阿mo的(付费用户)
第一次这里发帖
也说话你们的方法呗
LZ想法就是滚动利用整片区域,这没错;
但每份数据都要重复写几次,感觉没必要。
我这种方法可确保数据的正确性,比只是单纯滚动要好吧
想想看,
CPU里下载到FLASH的程序数据,重要不重要?
有没有采用备份的方式?类似的例子非常多。
如果你认为某个数据特别特别重要,这样做也可以吧。。。但我这么多年还没有遇到过这样的情况。
一周热门 更多>