【蓝牙盒子】缓存机制处理

一、原理图:



二、代码段:

//#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值