kfifo文档

This commit is contained in:
fslongjin 2022-07-29 17:18:55 +08:00
parent 2a983a8534
commit c1f51bf4cb
3 changed files with 259 additions and 4 deletions

View File

@ -0,0 +1,254 @@
# 内核数据结构
  内核中实现了常用的几种数据结构这里是他们的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 |

View File

@ -10,6 +10,7 @@
kernel_api
atomic
data_structures
内存管理
===================

View File

@ -22,7 +22,7 @@ struct kfifo_t
})
/**
* @brief kfifo队列中的所有内容使
* @brief kfifo队列中的所有内容
*
*/
#define kfifo_reset_out(fifo) (void)({ \
@ -38,10 +38,10 @@ struct kfifo_t
*/
#define kfifo_total_size(fifo) ((fifo)->total_size)
/**
* @brief kfifo缓冲区当前已有元素大小
* @brief kfifo缓冲区当前已使用的大小
*
* @param fifo
* @return uint32_t
* @return uint32_t 使
*/
#define kfifo_size(fifo) ((fifo)->size)
@ -88,7 +88,7 @@ void kfifo_free_alloc(struct kfifo_t* fifo);
void kfifo_init(struct kfifo_t *fifo, void *buffer, uint32_t size);
/**
* @brief kfifo缓冲区推入数据
* @brief kfifo缓冲区推入指定大小的数据
*
* @param fifo
* @param from