7.11 Linux内核中的队列:KFIFO(上)

7.11 Linux内核中的队列:KFIFO(上)

基本概念

内核版本:Linux-4.4.x
定义:lib/ kfifo.c include/ linux /kfifo.h

KFIFO基本操作

入队

初始化:kfifo_init \ kfifo_alloc
Kfifo_put
Kfifo_in \ kfifo_in_spinlocked

出队

Kfifo_get
Kfifo_out

数据结构

struct __kfifo {
        unsigned int    in;
        unsigned int    out;
        unsigned int    mask;
        unsigned int    esize;	//每个元素的大小,2的幂
        void            *data;
};

kfifo_alloc

kififo.h

#define kfifo_alloc(fifo, size, gfp_mask) \
__kfifo_int_must_check_helper( \
({ \
        typeof((fifo) + 1) __tmp = (fifo); \
        struct __kfifo *__kfifo = &__tmp->kfifo; \
        __is_kfifo_ptr(__tmp) ? \
		//前面都是做一些兼容,语句表达式直接看最后一行就行了
        __kfifo_alloc(__kfifo, size, sizeof(*__tmp->type), gfp_mask) : \
        -EINVAL; \
}) \

__kfifo_alloc

kififo.c

int __kfifo_alloc(struct __kfifo *fifo, unsigned int size,
                size_t esize, gfp_t gfp_mask)
{
        /*
         * round down to the next power of 2, since our 'let the indices
         * wrap' technique works only in this case.
         */
        size = roundup_pow_of_two(size);

        fifo->in = 0;
        fifo->out = 0;
        fifo->esize = esize;

        if (size < 2) {
                fifo->data = NULL;
                fifo->mask = 0;
                return -EINVAL;
        }

        fifo->data = kmalloc(size * esize, gfp_mask);
		// data指向申请的堆空间
		//size元素的个数
		//esize 每个元素的大小
		//gfp_mask = size-1

        if (!fifo->data) {
                fifo->mask = 0;
                return -ENOMEM;
        }
        fifo->mask = size - 1;

        return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lvgl是一种用于嵌入式GUI开发的开源图形库,它能够帮助开发者轻松地创建交互式的用户界面。Lvgl的7.11版本提供了文手册,方便国开发者学习和使用。 lvgl7.11文手册详细介绍了Lvgl图形库的各个方面,包括库的基本概述、使用方法、UI控件介绍以及常见问题解答等内容,让开发者能够系统地了解和学习Lvgl的使用。 在手册的基本概述部分,介绍了Lvgl是什么以及它的特点和应用领域。通过阅读这一部分,开发者可以快速了解到Lvgl的基本信息,并确定其是否适合自己的项目。 手册还介绍了Lvgl的使用方法,包括环境搭建、库的配置、项目结构等内容。通过按照手册的步骤进行操作,开发者可以轻松地将Lvgl集成到自己的项目,并开始进行GUI的开发。 此外,手册还详细介绍了Lvgl提供的各种UI控件,如按钮、标签、进度条等。开发者可以了解每种控件的特点和使用方法,并通过示例代码进行实践和练习。 最后,手册还提供了一份常见问题解答,帮助开发者解决可能遇到的问题。这些问题涵盖了开发过程可能遇到的各个方面,从环境搭建到控件使用等等,是开发者在使用Lvgl过程的一份宝贵的参考资料。 总之,Lvgl7.11文手册是一份非常有价值的学习工具,对于想要学习和使用Lvgl的开发者而言,是必不可少的一本参考书。无论是初学者还是有一定经验的开发者,都可以通过阅读手册,快速掌握Lvgl的使用,并应用于自己的项目

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值