MS-RTOS FIFO
本章将介绍 MS-RTOS FIFO 的使用。
FIFO 介绍
FIFO 是一种先入先出的数据结构,MS-RTOS 的 FIFO 做到了单读单写免锁,如果需要多读或多写,请在 FIFO 操作的外部加锁(如互斥量)。
FIFO 相关数据类型
类型 | 描述 |
---|---|
ms_fifo_t | FIFO 类型 |
ms_fifo_evt_cb_t | FIFO 的事件回调函数类型 |
ms_fifo_t
FIFO 的类型为 ms_fifo_t
,FIFO 使用前需要定义,它可以是一个全局变量,也可以嵌入到其它数据类型当中(如结构体)作为一个成员变量。
typedef struct {
ms_uint8_t *buf;
ms_size_t size;
ms_size_t r;
ms_size_t w;
ms_fifo_evt_cb_t evt_cb;
} ms_fifo_t;
参数 | 说明 |
---|---|
buf | FIFO 的基地址 |
size | FIFO 的大小 |
r | FIFO 的读指针 |
w | FIFO 的写指针 |
evt_cb | FIFO 的事件回调函数 |
FIFO 相关 API
下表展示了 FIFO 相关的 API 在两个权限空间下是否可用:
API | 用户空间 | 内核空间 |
---|---|---|
ms_fifo_init | ● | ● |
ms_fifo_is_ready | ● | ● |
ms_fifo_destroy | ● | ● |
ms_fifo_set_evt_cb | ● | ● |
ms_fifo_reset | ● | ● |
ms_fifo_space | ● | ● |
ms_fifo_len | ● | ● |
ms_fifo_size | ● | ● |
ms_fifo_is_empty | ● | ● |
ms_fifo_is_full | ● | ● |
ms_fifo_put | ● | ● |
ms_fifo_get | ● | ● |
ms_fifo_peek | ● | ● |
ms_fifo_read_linear_blk | ● | ● |
ms_fifo_skip | ● | ● |
ms_fifo_write_linear_blk | ● | ● |
ms_fifo_advance | ● | ● |
ms_fifo_init()
描述 初始化 FIFO
函数原型
ms_err_t ms_fifo_init(ms_fifo_t *fifo, ms_ptr_t buf, ms_size_t size);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
[in] | buf | FIFO 的缓冲区的基地址,不能为空指针 |
[in] | size | FIFO 的缓冲区的大小 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_fifo_is_ready()
描述 判断 FIFO 是否初始化好
函数原型
ms_bool_t ms_fifo_is_ready(const ms_fifo_t *fifo);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
返回值 MS_TRUE:已经初始化好,MS_FALSE:未初始化好
注意事项 无
示例 无
ms_fifo_destroy()
描述 销毁 FIFO
函数原型
void ms_fifo_destroy(ms_fifo_t *fifo);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
返回值 无
注意事项 无
示例 无
ms_fifo_set_evt_cb()
描述 设置 FIFO 的事件回调函数
函数原型
void ms_fifo_set_evt_cb(ms_fifo_t *fifo, ms_fifo_evt_cb_t evt_cb);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
[in] | evt_cb | FIFO 的事件回调函数指针 |
返回值 无
注意事项 无
示例 无
ms_fifo_reset()
描述 复位 FIFO
函数原型
void ms_fifo_reset(ms_fifo_t *fifo);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
返回值 无
注意事项 无
示例 无
ms_fifo_space()
描述 获得 FIFO 的空闲空间长度
函数原型
ms_size_t ms_fifo_space(const ms_fifo_t *fifo);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
返回值 FIFO 的空闲空间长度
注意事项 无
示例 无
ms_fifo_len()
描述 获得 FIFO 里的数据长度
函数原型
ms_size_t ms_fifo_len(const ms_fifo_t *fifo);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
返回值 获得 FIFO 里的数据长度
注意事项 无
示例 无
ms_fifo_size()
描述 获得 FIFO 的大小
函数原型
ms_size_t ms_fifo_size(const ms_fifo_t *fifo);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
返回值 FIFO 的大小
注意事项 无
示例 无
ms_fifo_is_empty()
描述 判断 FIFO 是否为空
函数原型
ms_bool_t ms_fifo_is_empty(const ms_fifo_t *fifo);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
返回值 MS_TRUE:空,MS_FALSE:不空,有数据
注意事项 无
示例 无
ms_fifo_is_full()
描述 判断 FIFO 是否为满
函数原型
ms_bool_t ms_fifo_is_full(const ms_fifo_t *fifo);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
返回值 MS_TRUE:满,MS_FALSE:不满,有空位
注意事项 无
示例 无
ms_fifo_put()
描述 将数据写入 FIFO
函数原型
ms_size_t ms_fifo_put(ms_fifo_t *fifo, ms_const_ptr_t buf, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
[in] | buf | 需要写入的数据,不能为空指针 |
[in] | len | 需要写入的长度 |
返回值 成功写入的长度
注意事项 无
示例 无
ms_fifo_get()
描述 从 FIFO 读出数据
函数原型
ms_size_t ms_fifo_get(ms_fifo_t *fifo, ms_ptr_t buf, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
[in] | buf | 用于存放读出的数据的缓冲区,不能为空指针 |
[in] | len | 需要读出的长度 |
返回值 成功读出的长度
注意事项 无
示例 无
ms_fifo_peek()
描述 从 FIFO 读出数据,但不调整读指针
函数原型
ms_size_t ms_fifo_peek(const ms_fifo_t *fifo, ms_size_t skip_len, ms_ptr_t buf, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
[in] | skip_len | 需要跳过读的数据长度 |
[in] | buf | 用于存放读出的数据的缓冲区,不能为空指针 |
[in] | len | 需要读出的长度 |
返回值 成功读出的长度
注意事项 无
示例 无
ms_fifo_read_linear_blk()
描述 获得 FIFO 线性读内存块地址和长度
函数原型
ms_size_t ms_fifo_read_linear_blk(const ms_fifo_t *fifo, ms_const_ptr_t *pos);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
[in] | pos | 线性读内存块地址 |
返回值 线性读内存块长度
注意事项 无
示例 无
ms_fifo_skip()
描述 跳过读指定长度的数据
函数原型
ms_size_t ms_fifo_skip(ms_fifo_t *fifo, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
[in] | len | 需要跳过读的数据长度 |
返回值 成功跳过读的数据长度
注意事项 无
示例 无
ms_fifo_write_linear_blk()
描述 获得 FIFO 线性写内存块地址和长度
函数原型
ms_size_t ms_fifo_write_linear_blk(const ms_fifo_t *fifo, ms_ptr_t *pos);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
[in] | pos | 线性写内存块地址 |
返回值 线性写内存块长度
注意事项 无
示例 无
ms_fifo_advance()
描述 提前预留指定长度的写空间
函数原型
ms_size_t ms_fifo_advance(ms_fifo_t *fifo, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fifo | FIFO 的指针 |
[in] | len | 需要提前预留写空间的长度 |
返回值 成功提前预留写空间的长度
注意事项 无
示例 无