MS-RTOS FIFO

更新时间:
2023-08-09
下载文档

MS-RTOS FIFO

本章将介绍 MS-RTOS FIFO 的使用。

FIFO 介绍

FIFO 是一种先入先出的数据结构,MS-RTOS 的 FIFO 做到了单读单写免锁,如果需要多读或多写,请在 FIFO 操作的外部加锁(如互斥量)。

FIFO 相关数据类型

类型描述
ms_fifo_tFIFO 类型
ms_fifo_evt_cb_tFIFO 的事件回调函数类型

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;
参数说明
bufFIFO 的基地址
sizeFIFO 的大小
rFIFO 的读指针
wFIFO 的写指针
evt_cbFIFO 的事件回调函数

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]fifoFIFO 的指针
[in]bufFIFO 的缓冲区的基地址,不能为空指针
[in]sizeFIFO 的缓冲区的大小
  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

ms_fifo_is_ready()

  • 描述 判断 FIFO 是否初始化好

  • 函数原型

ms_bool_t ms_fifo_is_ready(const ms_fifo_t *fifo);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
  • 返回值 MS_TRUE:已经初始化好,MS_FALSE:未初始化好

  • 注意事项

  • 示例

ms_fifo_destroy()

  • 描述 销毁 FIFO

  • 函数原型

void ms_fifo_destroy(ms_fifo_t *fifo);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
  • 返回值

  • 注意事项

  • 示例

ms_fifo_set_evt_cb()

  • 描述 设置 FIFO 的事件回调函数

  • 函数原型

void ms_fifo_set_evt_cb(ms_fifo_t *fifo, ms_fifo_evt_cb_t evt_cb);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
[in]evt_cbFIFO 的事件回调函数指针
  • 返回值

  • 注意事项

  • 示例

ms_fifo_reset()

  • 描述 复位 FIFO

  • 函数原型

void ms_fifo_reset(ms_fifo_t *fifo);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
  • 返回值

  • 注意事项

  • 示例

ms_fifo_space()

  • 描述 获得 FIFO 的空闲空间长度

  • 函数原型

ms_size_t ms_fifo_space(const ms_fifo_t *fifo);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
  • 返回值 FIFO 的空闲空间长度

  • 注意事项

  • 示例

ms_fifo_len()

  • 描述 获得 FIFO 里的数据长度

  • 函数原型

ms_size_t ms_fifo_len(const ms_fifo_t *fifo);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
  • 返回值 获得 FIFO 里的数据长度

  • 注意事项

  • 示例

ms_fifo_size()

  • 描述 获得 FIFO 的大小

  • 函数原型

ms_size_t ms_fifo_size(const ms_fifo_t *fifo);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
  • 返回值 FIFO 的大小

  • 注意事项

  • 示例

ms_fifo_is_empty()

  • 描述 判断 FIFO 是否为空

  • 函数原型

ms_bool_t ms_fifo_is_empty(const ms_fifo_t *fifo);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
  • 返回值 MS_TRUE:空,MS_FALSE:不空,有数据

  • 注意事项

  • 示例

ms_fifo_is_full()

  • 描述 判断 FIFO 是否为满

  • 函数原型

ms_bool_t ms_fifo_is_full(const ms_fifo_t *fifo);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
  • 返回值 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]fifoFIFO 的指针
[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]fifoFIFO 的指针
[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]fifoFIFO 的指针
[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]fifoFIFO 的指针
[in]pos线性读内存块地址
  • 返回值 线性读内存块长度

  • 注意事项

  • 示例

ms_fifo_skip()

  • 描述 跳过读指定长度的数据

  • 函数原型

ms_size_t ms_fifo_skip(ms_fifo_t *fifo, ms_size_t len);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
[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]fifoFIFO 的指针
[in]pos线性写内存块地址
  • 返回值 线性写内存块长度

  • 注意事项

  • 示例

ms_fifo_advance()

  • 描述 提前预留指定长度的写空间

  • 函数原型

ms_size_t ms_fifo_advance(ms_fifo_t *fifo, ms_size_t len);
  • 参数
输入/输出参数描述
[in]fifoFIFO 的指针
[in]len需要提前预留写空间的长度
  • 返回值 成功提前预留写空间的长度

  • 注意事项

  • 示例

文档内容是否对您有所帮助?
有帮助
没帮助