Simple FIFO based on array in C language

table of Contents

 

 

.c file

.h file


 

.c file

/**
******************************************************************************
  * Copyright (C),  
  * @file    	Bsp_adc.c	  
  * @brief   
  *
  * @version           @date	@author       @explain
  * V1.0   	       2020-07-01  LoveMyBaoBaoGao    创建该文件
  *	
******************************************************************************
  * @attention
  
******************************************************************************
**/

/* Includes ------------------------------------------------------------------*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/

Fifo_Sturct  test = FIFO_INIT;     //电压采样

/****************************************************************************                  
* @file    void Fifo_Reset(void)
* @brief    将Fifo数据清零
* @explain  
* @parameter    无
* @return   最大值位置                     
****************************************************************************/
void Fifo_Reset(void)
{
    test.Fifo_Write = 0;
    test.Fifo_Read = 0;
    test.Fifo_Write = 0;
}
/****************************************************************************                  
* @file    static void Fifo_Data_Write(u16 _write_data)
* @brief    将数据写入Fifo中
* @explain  
* @parameter    _write_data:需要写入的数据
* @return   最大值位置                     
****************************************************************************/
static void Fifo_Data_Write(u16 _write_data)
{
    test.Fifo_Buf[test.Fifo_Write] = _write_data;
    if(++test.Fifo_Write>=FIFO_SIZE)
    {
        test.Fifo_Write=0;
    }
    if(test.Fifo_Count<FIFO_SIZE)
    {
        test.Fifo_Count++;
    }
}
/****************************************************************************                  
* @file   static u8 Fifo_Data_Read(u16 *_pByte)
* @brief    取最大值的位置
* @explain  
* @parameter    _pByte:需要写入的指针
* @return   0:失败  1:成功                     
****************************************************************************/
static u8 Fifo_Data_Read(u16 *_pByte)
{
    u8 us_count = 0;
    
    us_count = test.Fifo_Count;
    if(us_count == 0)
    {
         return 0;       
    }
    else
    {
        *_pByte = test.Fifo_Buf[test.Fifo_Read];		/* 从串口接收FIFO取1个数据 */

    	if (++test.Fifo_Read >=FIFO_SIZE)
    	{
    		test.Fifo_Read = 0;
    	}
    	test.Fifo_Count--;

        return 1;
    }

}

void Fifo_test(void)
{
    u16 new_adc_value = 0;

    Fifo_Data_Write(0xA1);//写入数据
    Fifo_Data_Write(0xA2);//写入数据
    Fifo_Data_Write(0xA3);//写入数据
    Fifo_Data_Write(0xA4);//写入数据
    Fifo_Data_Write(0xA5);//写入数据

    
    while (Fifo_Data_Read(&(new_adc_value));//读取数据,直到没有数据读出时
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

 

 

.h file

/**
******************************************************************************
  * Copyright (C),  simcotech
  * @file    	Bsp_adc.h	  
  * @brief   
  *
  * @version           @date	@author       @explain
  * V1.0   	       2020-07-01  LoveMyBaoBaoGao    创建该文件
  *	
******************************************************************************
  * @attention
  
******************************************************************************
**/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef _FIFO_H
#define _FIFO_H

/* Includes ------------------------------------------------------------------*/
/* Exported types ------------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
#define FIFO_SIZE 30

/* Exported types ------------------------------------------------------------*/
typedef struct
{	
    u16 Fifo_Buf[FIFO_SIZE];//数据buf
    u8 Fifo_Write;//写入fifo
    u8 Fifo_Count;//fifo计数
    u8 Fifo_Read;//fifo读取
}Fifo_Sturct;

    /* Exported constants --------------------------------------------------------*/
#define FIFO_INIT \
{\
{0,0,0},\
0,\
0,\
0,\
0,\
} 

/* Exported macro ------------------------------------------------------------*/
extern Fifo_Sturct Test;


#endif /* _FIFO_H */
/******************* (C) COPYRIGHT Simcotech *****END OF FILE****/

 

Guess you like

Origin blog.csdn.net/zhuimeng_ruili/article/details/110608511