C語言實現隊循FIFO緩衝區-《30天自製作業系統》

來源:互聯網
上載者:User

本代碼整理自《30天自製作業系統》P135的整理FIFO緩衝區

寫的很好,所以記錄一下(增加了一個fifo8_free函數,用於查詢剩餘容量,覺得有用)。作者實現的是char類型的緩衝區,但是可以用你要傳的任意結構體來替換~~~

fifo8.h

/*溢出標誌:0-正常,-1-溢出*/#define FLAGS_OVERRUN 0x0001/*        buf- 緩衝區地址        size- 大小        free- 空餘容量        putP- 下一個資料寫入位置        getP- 下一個資料獨處位置*/struct FIFO8{         unsigned char *buf;         int putP,getP,size,free,flags;};void fifo8_init(struct FIFO8 *fifo,int size, unsigned char *buf);int fifo8_put(struct FIFO8 *fifo,unsigned char data);int fifo8_get(struct FIFO8 *fifo);int fifo8_status(struct FIFO8 *fifo);int fifo8_free(struct FIFO7 *fifo);

fifo8.c

#include "fifo8.h"void fifo8_init(struct FIFO8 *fifo,int size, unsigned char *buf)/*初始化*/{        fifo->buf=buf;        fifo->flags=0;                  fifo->free=size;        fifo->size=size;        fifo->putP=0;                           fifo->getP=0;                            return;}int fifo8_putPut(struct FIFO8 *fifo,unsigned char data)/*向FIFO 中寫入資料 */{         if(fifo->free==0){                fifo->flags |= FLAGS_OVERRUN;                 return -1;        }        fifo->buf[fifo->putP] = data;        fifo->putP++;         //迴圈隊列緩衝區         if(fifo->putP == fifo->size){                fifo->putP = 0;        }        fifo->free--;         return 0;}int fifo8_get(struct FIFO8 *fifo)/*從FIFO 中取出一個資料 */{         int data;         if(fifo->free == fifo->size){                 return -1;        }        data = fifo->getP;        fifo->getP++;         if(fifo->getP == fifo->size){//用來實現迴圈                fifo->getP = 0;        }        fifo->free++;                 return data;}int fifo8_status(struct FIFO8 *fifo)/*緩衝區被使用容量*/{         return fifo->size-fifo->free;}int fifo8_free(struct FIFO8 *fifo)/*緩衝區剩餘容量*/{         return fifo->free;}

學習的地方:傳回值為void時可以return;迴圈緩衝區的構造;溢出標誌設定;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.