获取kfifo可用空间,返回可用字节数 #define kfifo_avail(fifo)\ __kfifo_uint_must_check_helper( \ ({ \ typeof((fifo) + 1) __tmpq = (fifo); \ const size_t __recsize = sizeof(*__tmpq->rectype); \ unsigned int __avail = kfifo_size(__tmpq) - kfifo_len(__tmpq); \ (__recsi...
* @len: the size of the destination buffer. * * This function copies at most @len bytes from the FIFO into the * @buffer and returns the number of copied bytes. */ static inline unsigned int kfifo_get(struct kfifo *fifo, unsigned char *buffer, unsigned int len) { unsigned long flags...
in += len;// 直接加,不作模运算。当溢出时,从buffer的开始位置重新开始returnlen; }// 返回实际读取的数据长度uint32_tget(uint8_t*data,uint32_tlen){// 缓冲区中的数据长度len =min(len, in - out);// 首先从[out,buffer end]读取数据autol =min(len, size - (out & (size -1)));memcpy...
PRINT_DEBUG("write ringBuff len is %d!",len); #if USE_MUTEX } /* 释放互斥量 */ release_mutex(rb->mutex); #endif return len; } Read_RingBuff 读取缓冲区数据到指定区域,用户指定读取长度,用户想要读取的长度不一定是真正读取的长度,在读取完成的时候还要看看返回值是否与用户需要的长度一致~也支持...
unsigned int kfifo_in(struct __kfifo *fifo, const void *from, unsigned int len); 2.函数作用 kfifo_in函数的作用是向一个已经初始化的FIFO缓冲池中写入数据。如果数据的长度大于FIFO的剩余空间,则函数只会写入FIFO的一部分,返回实际写入FIFO的字节数,而不是完整的数据长度。 3.函数参数 kfifo_in函数有三...
16行,前面讲到fifo->size已经2的次幂圆整,而且kfifo->out % kfifo->size 可以转化为 kfifo->out & (kfifo->size – 1),所以fifo->size - (fifo->out & (fifo->size - 1)) 即位 fifo->out 到 buffer末尾所剩余的长度,l取len和剩余长度的最小值,即为从fifo->buffer + fifo->in到末尾所要去读的...
retval = kfifo_len(&raw->kfifo); //返回FIFO中可用的字节数 if (kfifo_in(&dev->raw->kfifo, ev, sizeof(*ev)) != sizeof(*ev)) //把数据存入FIFO中,也就是入队列sizeof(*ev)个字节到fifo中。返回成功copy的个数 retval = kfifo_out(&raw->kfifo, &ev, sizeof(ev)); //从FIFO获取一些...
参数:把buffer所指的len字节数据拷贝到fifo所指的队列中 返回值:成功返回推入的数据长度。如果队列中的空闲字节小于len,则该函数值最多可拷贝队列可用空间那么多的数据,这样的话,返回值可能小于len,甚至会返回0,这时意味着没有任何数据被推入 /** * kfifo_put - puts some data into the FIFO ...
* @return len:实际写入数据的长度(字节) * @author jiejie * @github https://github.com/jiejieTop * @date 2018-xx-xx * @version v1.0 * @note 这个函数会从buff空间拷贝len字节长度的数据到 rb环形缓冲区中的空闲空间。 ***/uint32_tWrite_RingBuff(RingBuff_t*rb,uint8_t*wbuff,uint32_t len...
PRINT_DEBUG("write ringBuff len is %d!",len);#if USE_MUTEX}/* 释放互斥量 */release_mutex(rb->mutex);#endifreturnlen; } Read_RingBuff 读取缓冲区数据到指定区域,用户指定读取长度,用户想要读取的长度不一定是真正读取的长度,在读取完成的时候还要看看返回值是否与用户需要的长度一致~也支持多线程互斥...