30天自制操作系统开发笔记——FIFO缓冲区制作
2013-02-24 10:53
555 查看
为了能够更好的响应中断,要制作缓冲区存储外部设备传送过来的数据,为了能让缓冲区更具有灵活性并且能够充分利用缓冲区,首先要制作成一般样式的缓冲区,可以自由指定大小和起始位置,要能实现循环的读和写,所以需要利用指针来指定缓冲区的起始位置:
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;
}
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;
}
相关文章推荐
- 30天自制操作系统开发笔记——GDT与IDT设置
- 30天自制操作系统开发笔记——IDT中断描述符表
- 30天自制操作系统开发笔记——响应鼠标和键盘(上)
- C语言实现队循FIFO缓冲区-《30天自制操作系统》
- 30天自制操作系统开发笔记——内存管理
- C语言实现队循FIFO缓冲区-《30天自制操作系统》
- 30天自制操作系统-第7天笔记
- 《30天自制操作系统》笔记一二
- 30天自制操作系统笔记(七八)——源码
- 30天自制操作系统学习笔记
- 《30天自制操作系统》07_day_学习笔记
- 《30天自制操作系统》11_day_学习笔记
- 《30天自制操作系统》16_day_学习笔记
- 《30天自制操作系统》笔记(04)——显示器256色
- 《30天自制操作系统》13_day_学习笔记
- 《30天自制操作系统》笔记(11)——高分辨率
- 30天自制操作系统-第三天-着手开发操作系统小节
- 《30天自制操作系统》12_day_学习笔记
- 30天自制操作系统笔记 第1天
- 《30天自制操作系统》笔记(09)——绘制窗口