久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2119|回復: 0
收起左側

環形buffer 環形數組等原理例程

[復制鏈接]
ID:344805 發表于 2018-6-4 17:00 | 顯示全部樓層 |閱讀模式
環形存儲原理:(用一個類來說明)環形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;                           
}
};

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月婷婷激情网 | 亚洲成人精品 | 一区二区三区免费 | 色偷偷噜噜噜亚洲男人 | 午夜国产精品视频 | 欧美综合一区二区 | 99精品在线 | 日韩毛片 | 欧美视频在线看 | 天天草草草 | 99在线资源 | 国产一区高清 | 免费人成激情视频在线观看冫 | 精品国产乱码久久久久久图片 | 日韩伦理一区二区 | 羞羞视频网| 久操伊人 | 欧美激情精品久久久久久变态 | 亚洲一区精品视频 | 欧美在线日韩 | 91精品久久久久久久久久入口 | av看片| 色综合99| 欧美九九| 精品九九| 国产精品精品久久久久久 | 无码国模国产在线观看 | 欧美成人精品在线观看 | 黄网站免费在线看 | 一区二区国产精品 | av性色全交蜜桃成熟时 | 亚洲精品乱| 欧美日韩国产在线观看 | 久久日本 | 日本不卡在线观看 | 国产精品一区二区在线 | 91成人免费电影 | 中文字幕一区在线观看视频 | 国内精品视频一区二区三区 | 羞羞视频网站免费观看 | 天天操天天干天天透 |