flash 、NV等非易失外存中循环覆盖存取模式下如何获取实际存储编号

实际上是个数学归纳问题
例如:有顺序编号的5个水池,编号从1到5,水池总数为SUM = 5;
如果最后一次使用的水池编号为a,现在提问:第b次使用的水池的编号,这里的a为存储编号,b为读取编号。
u32 GetSaveNum(u32 ReadNum, u32 LastUsedNum)
{
if (LastUsedNum >= ReadNum)
{
return (LastUsedNum - ReadNum + 1);
}
else
{
return (SUM - ReadNum + LastUsedNum + 1);
}
}

使用场景:
多项数据连续存储在flash中,程序不定期以循环覆盖的方式存储,并记忆当前存储位置编号,客户需要不定期“倒叙”查询这些记录(0,代表读取倒数第0个项目,1代表读取倒数第1个项目。。。),显然存储的编号,客户是不知道的,他只提供 “读取”编号。该文给出从 读取编号 到 实际存储编号 以调取记录数据的一种解决方法。

你可能感兴趣的:(C语言)