C语言环形缓冲区源码

#define LINK_LIST_SIZE  (19)             //STM32F103RT6 SRAM 96K字节
32 rec_cnt = 0;                                    //已用缓冲区内容总数<=LINK_LIST_SIZE
static u8 tx_index = 0;                           //当前可发送的缓冲区下标
static u8 rx_index = 0;                           //当前可写入的缓冲区下标
static u8 buf[LINK_LIST_SIZE][4096] = {0};  //VS1053接收缓冲区

/***********************************************************************************
函数名称:get_idle_buf
函数功能:获取空闲缓冲区的下标(索引)
函数参数:
函数返回:返回下一个可用于接收的缓冲区下标(索引),如果返回0xFF说明无空闲缓冲区
************************************************************************************/
static u8 get_idle_buf(void)
{
      u8 index = 0;
 
      if(rec_cnt < LINK_LIST_SIZE){
           index = rx_index; 
           rx_index = buf_index_calculate(rx_index);
           return index;
       }else{
           return 0xFF;
       }
}

/***********************************************************************************
函数名称:get_tx_buf_index
函数功能:获取可发送的缓冲区下标(索引)
函数参数:void
函数返回:0xff,表示没有需要发送的缓冲区,>=0,表示可发送的缓冲区下标(索引)
************************************************************************************/
u8 get_tx_buf_index(void)
{
      u8 index = 0;
 
     if(rec_cnt > 0){
          index = tx_index;
          rec_cnt--;
          tx_index = buf_index_calculate(tx_index);
          return index;
     }else{ 
         return 0xFF;
     }
}

//保存满一个缓存时,rec_cnt要进行自加操作。

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据