FLASH可以循环使用,也就是每次烧写不同的页, 寿命增加倍数 = 总烧写次数/循环使用的页面个数。
参考思路
typedef struct{ int cnt, int par1;...} __T ; __T *pT_current;
__T T0 _at_ (Addr_page0);__T T1 _at_ (Addr_page1);...__T TN _at_ (Addr_pageN);
上电时遍历Tx(T0 to TN).判断Tx.cnt,最大值对应的Tx作为当前使用的的参数组实体。需要修改时则指向Tx+1,更新时保证cnt最大值保存到合适的组,以便下一次上电时遍历命中最末次更新的参数组。
当然每个页面擦除之后可以分开写入。stm的擦除寿命大概在1w次。 比如使用8个循环页的话就是8万次。每个页面指定多个参数组(多次写入)的话则可以在增加若干倍(当然数据擦写,需要做更加可靠,Flash特性中,写入操作可以将对应位置的位1改写为0, 擦除操作则可以将数据位0改写为1,擦除操作一次性修改一个页)。
网页链接
FLASH里多记一个作为标志的值不就行了?每次读写前判断此标志位是否有被更改过。或者判断此地址上的值是不是0xFFFF,没写值进FLASH里默认值是0xFFFF的。