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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2045|回復: 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;                           
}
};

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费看黄色国产 | 欧美成人一级 | 久草网址 | 亚洲精品美女 | 亚洲美女一区二区三区 | 久久久久久免费毛片精品 | 五十女人一级毛片 | 自拍偷拍3p | 成人av网站在线观看 | 国产日韩欧美二区 | 日日干干夜夜 | 日本一二区视频 | 亚洲视频三区 | 黄视频网站免费观看 | 国产视频黄色 | www.青青草| 国产黄色网址在线观看 | 久久亚洲欧美日韩精品专区 | 欧美精品一区二区在线观看 | 欧美一级片免费看 | 中文字幕一区在线观看视频 | 99热精品在线观看 | 久久综合一区 | 亚洲品质自拍视频 | 性一交一乱一透一a级 | 毛片视频网站 | 久久99精品久久久久久国产越南 | 国产一级在线观看 | 亚洲欧美精品在线 | h视频在线播放 | 亚洲精品乱码 | 密色视频| 日韩免费一区二区 | 欧美电影免费观看 | 中文字幕视频在线观看 | 亚洲精品日本 | 欧美二区在线 | 九九久久在线看 | 91动漫在线观看 | 国产目拍亚洲精品99久久精品 | 九一视频在线观看 |