欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 環形buffer 環形數組等原理例程 [打印本頁]

作者: LiYan25    時間: 2018-6-4 17:00
標題: 環形buffer 環形數組等原理例程
環形存儲原理:(用一個類來說明)環形buff是先進先出,有兩個指針,一個指示在尾部放數據,一個指示在首部取出數據,

最開始都在0的位置,比如用在串口接受一個數據時,并不馬上處理,用的時候再取出。



class RingBuffer
{
private:
uint8_t* Buffer;             //類似一個數組的指針
uint16_t Size;                 //數據大小
uint16_t BeginPos;        //頭部指針,實際并不是指針類型,算是一個標記
uint16_t EndPos;            //尾部指針,實際并不是指針類型,算是一個標記
uint8_t m_IsFull;            //buffer是否滿了


public:
void putchar(char ch)       //存一個數據
{
  Buffer[EndPos] = ch;        //存
  EndPos++;                        //指針加一

  if(EndPos>Size)          //存的指針超過數組size,則返回0位置

    {EndPos=0;}
}


uint8_t getchar(void)       //取一個數據
{
  uint8_t ch;                        
  ch = Buffer[BeginPos];       //取
  BeginPos++;                        //指針加一
  return ch;                           
}


void Ringisfull()                    //判斷環形buffer是否滿了
{
  if (BeginPos == EndPos)       //在最初始化狀態時,BeginPos =0,EndPos=0,

                                                  //比如:當Endpos跑滿一圈回到0,而BeginPos一直沒人來取數據,那么兩者重合,buffer滿
                                                   //只有等BenginPos處被取走數據,那么才能接著存。否則數據滿了還沒處理,是不能覆蓋的

m_IsFull = 1;                           
}
};






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1