1. 写数据
假设保存的数据虚拟地址是 0X7777,那么程序写数据是从当前有效页页首地址开始查询虚
拟地址位置为 0XFFFF 的空间,如果是 0XFFFF 那么该位置可以保存数据;如果不是,那
么继续找下 1 个位置,如果本页无 0XFFFF 的空间那么表示本页已满,那么将本页【有效
数据】复制到另外 1 页继续保存数据。
当两次保存同一虚拟地址的数据时如右图所示:从上到下,第 2 个虚拟地址是 0X7777 对应
的数据 1245 才是有效的。清楚了这点,那么读数据要怎么处理基本就明白了。
2. 读数据
读数据时是从有效页的末尾地址开始检测是否是有效数据,如果是那么立即返回,程序是通过虚拟地址判断有
效数据的,第 1 个匹配的虚拟地址的数据才是有效的
3. 页满时处理数据
说到这里,看到不少使用例子程序不成功的问题,那么就请注意下面了,他们的错误估计是下面的原因造成的。
当 1 页写满时其实里面有很多无效数据,你只需要将【有效数据】复制到另外 1 页就成。如何复制有效数据呢?
我想很多人估计忽略了 【#define NumbOfVar ((uint8_t)0x03) /* Variables‘ number */】,NumbOfVar 就是你程
序中实际要保存的数据量,这个必须与实际保持一致,不能多也不能少,这个如果不一致,那么在换页时将出
错,没换页之前倒是没问题的,原因在于:程序在换页时将根据 NumbOfVar 的值复制有效数据的个数,如果比
实际少,那么换页时将丢失数据,如果比实际多那么将出现旧数据覆盖最新数据
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !