• 30天自制操作系统开发笔记——FIFO缓冲区制作


    为了能够更好的响应中断,要制作缓冲区存储外部设备传送过来的数据,为了能让缓冲区更具有灵活性并且能够充分利用缓冲区,首先要制作成一般样式的缓冲区,可以自由指定大小和起始位置,要能实现循环的读和写,所以需要利用指针来指定缓冲区的起始位置:

    struct FIFO8 {
    unsigned char *buf;
    int p,q,size,free,flags;/*分别表示下一个数据写入位置,下一个数据读取位置,缓冲区大小,以及空闲缓冲区的数量*/
    };

    buf指定的是缓冲区的起始地址

    缓冲区的初始化:

    void fifo8_init(struct FIFO8 *fifo,int size,unsigned char *buf)
    {
    fifo->buf=buf;
    fifo->size=size;
    fifo->free=size;
    fifo->flags=0;
    fifo->p=0;
    fifo->q=0;
    };

    从缓冲区中读取数据:

    int fifo8_get(struct FIFO8 *fifo)
    {
    int data;
    if(fifo->free==fifo->size)
    return -1;
    data=fifo->buf[fifo->q];
    fifo->q++;
    if(fifo->q==fifo->size)
    fifo->q=0;
    fifo->free++;
    return data;
    }

    往缓冲区中添加数据:

    int fifo8_put(struct FIFO8 *fifo,unsigned char data)
    {
    if(fifo->free==0)
    {
    fifo->flags|=FLAG_OVERRUN;
    return -1;
    }
    fifo->buf[fifo->p]=data;
    fifo->p++;
    if(fifo->p==fifo->size)
    fifo->p=0;
    fifo->free--;
    return 0;
    }

    查看缓冲区的状态:

    int fifo8_status(struct FIFO8 *fifo)
    {
      return fifo->size-fifo->free;
    }

  • 相关阅读:
    Java 面向对象_继承
    Java 面向对象
    使用 pykafka 进行消费
    oracle 的分页、截断查询
    Day03
    Day02 计算机的组成与编程语言
    Day01 MarkDown的使用
    Java方法的重点
    Scanner的小细节
    Java包机制和Javadoc的使用
  • 原文地址:https://www.cnblogs.com/caozhenhai/p/2924017.html
Copyright © 2020-2023  润新知