一、原理图:


二、代码段:
//#tony#:
//Cache 0 列表是10
#define Cache0ListLen 10
//Cache 0 元数据22字节
#define Cache0ListMetaDataSize 22
//Cache 0
typedef struct _Cache0MetaDataStrcut{
union{
char array[Cache0ListMetaDataSize];
}metadata;
}Cache0MetaDataStrcut_T,*P_Cache0MetaDataStrcut_T;
//缓存列表
static Cache0MetaDataStrcut_T Cache0ListArray[Cache0ListLen] = {0};
//起始索引
static u8 Cache0ListStartIndex = 0;
//结束索引
static u8 Cache0ListEndIndex = 0;
//获取当前缓存列表Cache0的起始索引
u8 GetCache0ListStartIndexValue(void){
return Cache0ListStartIndex;
}
//获取当前缓存列表Cache0的结束索引
u8 GetCache0ListEndIndexValue(void){
return Cache0ListEndIndex;
}
//更新当前缓存列表的Cache0的起始索引
void UpdateCache0ListStartIndexValue(u8 SetVal){
Cache0ListStartIndex = SetVal;
}
//跟新当前缓存列表的Cache1的结束索引
void UpdateCache0ListEndIndexValue(u8 SetVal){
Cache0ListEndIndex = SetVal;
}
//缓存数据的数据初始化处理
void Cache0ListInit(void){
Cache0ListStartIndex = 0;
Cache0ListEndIndex = 0;
osal_memset((void*)Cache0ListArray, 0, (int)(sizeof(Cache0MetaDataStrcut_T)*Cache0ListMetaDataSize));
}
//增加一个元数据到缓存的数据列表
void AddOneMetaDataToCache0List(Cache0MetaDataStrcut_T metaData){
//如果是第一次存储值的话,因为不存在溢出的风险,所以不需要任何处理
if((!Cache0ListStartIndex)&&(!Cache0ListEndIndex))
{
osal_memcpy((void*)&Cache0ListArray[0], (void*)&metaData, sizeof(Cache0MetaDataStrcut_T));
Cache0ListStartIndex = 0;
Cache0ListEndIndex++;
osal_memset((void*)&Cache0ListArray[Cache0ListEndIndex], 0, sizeof(Cache0MetaDataStrcut_T));
}else{
osal_memcpy((void*)&Cache0ListArray[Cache0ListEndIndex], (void*)&metaData, sizeof(Cache0MetaDataStrcut_T));
Cache0ListEndIndex++;
if(Cache0ListEndIndex==Cache0ListLen){
Cache0ListEndIndex = 0;
}
if(Cache0ListEndIndex==Cache0ListStartIndex){
Cache0ListStartIndex++;
if(Cache0ListStartIndex==Cache0ListLen){
Cache0ListStartIndex = 0;
}
}
}
}
//从Cache0列表中获取值,进行同步处理
u8 GetTheStartAddrCache0ListAndUpdateStartAddr(P_Cache0MetaDataStrcut_T Pmetadata){
if((!Cache0ListStartIndex)&&(!Cache0ListEndIndex)){
return FALSE;
}else{
osal_memcpy((void*)Pmetadata,(void*)&Cache0ListArray[Cache0ListStartIndex],sizeof(Cache0MetaDataStrcut_T));
Cache0ListStartIndex++;
if(Cache0ListStartIndex==Cache0ListLen){
Cache0ListStartIndex = 0;
}
//出现这一状态代表没有值可以sync了
if(Cache0ListStartIndex==Cache0ListEndIndex){
Cache0ListInit();
}
}
return TRUE;
}