data_structures.md 4.2 KB

内核数据结构

  内核中实现了常用的几种数据结构,这里是他们的api文档。


kfifo先进先出缓冲区

  kfifo先进先出缓冲区定义于common/kfifo.h中。您可以使用它,创建指定大小的fifo缓冲区(最大大小为4GB)

kfifo_alloc

int kfifo_alloc(struct kfifo_t *fifo, uint32_t size, uint64_t reserved)

描述

  通过动态方式初始化kfifo缓冲队列。fifo缓冲区的buffer将由该函数进行申请。

参数

fifo

  kfifo队列结构体的指针

size

  缓冲区大小(单位:bytes)

reserved

  当前字段保留,请将其置为0

返回值

  当返回值为0时,表示正常初始化成功,否则返回对应的errno

kfifo_init

void kfifo_init(struct kfifo_t *fifo, void *buffer, uint32_t size)

描述

  使用指定的缓冲区来初始化kfifo缓冲队列

参数

fifo

  kfifo队列结构体的指针

buffer

  缓冲区基地址指针

size

  缓冲区大小(单位:bytes)

kfifo_free_alloc

void kfifo_free_alloc(struct kfifo_t* fifo)

描述

  释放通过kfifo_alloc创建的fifo缓冲区. 请勿通过该函数释放其他方式创建的kfifo缓冲区。

参数

fifo

  kfifo队列结构体的指针

kfifo_in

uint32_t kfifo_in(struct kfifo_t *fifo, const void *from, uint32_t size)

描述

  向kfifo缓冲区推入指定大小的数据。当队列中空间不足时,则不推入数据。

参数

fifo

  kfifo队列结构体的指针

from

  源数据基地址指针

size

  数据大小(单位:bytes)

返回值

  返回成功被推入的数据的大小。

kfifo_out

uint32_t kfifo_out(struct kfifo_t *fifo, void *to, uint32_t size)

描述

  从kfifo缓冲区取出数据,并从队列中删除数据。当队列中数据量不足时,则不取出。

参数

fifo

  kfifo队列结构体的指针

to

  目标缓冲区基地址指针

size

  数据大小(单位:bytes)

返回值

  返回成功被取出的数据的大小。

kfifo_out_peek

uint32_t kfifo_out_peek(struct kfifo_t *fifo, void *to, uint32_t size)

描述

  从kfifo缓冲区取出数据,但是不从队列中删除数据。当队列中数据量不足时,则不取出。

参数

fifo

  kfifo队列结构体的指针

to

  目标缓冲区基地址指针

size

  数据大小(单位:bytes)

返回值

  返回成功被取出的数据的大小。

kfifo_reset

kfifo_reset(fifo)

描述

  忽略kfifo队列中的所有内容,并把输入和输出偏移量都归零

参数

fifo

  kfifo队列结构体的指针

kfifo_reset_out

kfifo_reset_out(fifo)

描述

  忽略kfifo队列中的所有内容,并将输入偏移量赋值给输出偏移量

参数

fifo

  kfifo队列结构体的指针

kfifo_total_size

kfifo_total_size(fifo)

描述

  获取kfifo缓冲区的最大大小

参数

fifo

  kfifo队列结构体的指针

返回值

  缓冲区最大大小

kfifo_size

kfifo_size(fifo)

描述

  获取kfifo缓冲区当前已使用的大小

参数

fifo

  kfifo队列结构体的指针

返回值

  缓冲区当前已使用的大小

kfifo_empty

kfifo_empty(fifo)

描述

  判断kfifo缓冲区当前是否为空

参数

fifo

  kfifo队列结构体的指针

返回值

情况 返回值
1
非空 0

kfifo_full

kfifo_full(fifo)

描述

  判断kfifo缓冲区当前是否为满

参数

fifo

  kfifo队列结构体的指针

返回值

情况 返回值
1
不满 0