|
楼主 |
发表于 2015-10-16 15:07:47
|
显示全部楼层
收到。 能否看看我的fifo 移植的linux的
#include <kfifo.h>
int __kfifo_init(struct __kfifo *fifo, void *buffer, unsigned int size)
{
fifo->in = 0;
fifo->out = 0;
fifo->mask = 0;
fifo->data = buffer;
if (size < 2) {
return -1;
}
if ((size & (size-1)) != 0)
{
return -2; /*** Must be a power of 2 (2,4,8,16,32,64,128,256,512,...) ***/
}
fifo->mask = size - 1;
return 0;
}
unsigned int __kfifo_push_char(struct __kfifo *fifo, const char *p)
{
if(( ( fifo->in - fifo->out ) & ( ~fifo->mask ) ) == 0 )
{
*( (char*)fifo->data + (fifo->in++ & fifo->mask) ) = *p;
return 1;
}
return 0;
}
unsigned int __kfifo_pop_char(struct __kfifo *fifo, char* p )
{
if( fifo->in != fifo->out )
{
*p = *( (char*)fifo->data + (fifo->out++ & fifo->mask) ) ;
return 1;
}
return 0;
} |
|