串口自定义环形缓冲程序编写

2019-07-21 00:59发布

再实际工程中,用程序编写一个环形缓冲区,防止数据被覆盖等意外现象。
但是没有头绪,不知该如何编写。请问有没有人能提供下建议或者代码?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
www88988
2019-07-21 11:54
#define BUFFERSIZE 1024 // 1K Buffer 如果数据量大的话可以多点但是不能大于64K(估计CPU的RAM也没那么大)
u16  InCount,OutCount;       //进出计数
u8   USART_Buffer[BUFFERSIZE];  //环形缓冲

//调用函数  (这个函数得在WHILE中不断的查询缓存)
....
u8 redata=0;
if(OutCount!=InCount)
{
   redata=GetData();
  //你的数据处理代码
}
....

void USART1_IRQHandler(void)
{
     if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
     {
       USART_ClearITPendingBit(USART1,USART_IT_RXNE);
       USART_Buffer[InCount++] = USART_ReceiveData(USART1);
       if(InCount>=BUFFERSIZE) InCount=0;                       
     }
}

u8 GetData(void)
{
        u8 data;        
          data=USART_Buffer[OutCount++];
                if(OutCount>=BUFFERSIZE) OutCount=0;        
        return data;
}

一周热门 更多>