XFusion API v1.3.0
载入中...
搜索中...
未找到
queue

以类似 FIFO 的操作在线程之间交换消息。 更多...

queue 的协作图:

结构体

struct  _xf_osal_queue_attr_t
 消息队列的属性结构。 更多...
 

类型定义

typedef void * xf_osal_queue_t
 消息队列句柄。
 
typedef struct _xf_osal_queue_attr_t xf_osal_queue_attr_t
 消息队列的属性结构。
 

函数

xf_osal_queue_t xf_osal_queue_create (uint32_t msg_count, uint32_t msg_size, const xf_osal_queue_attr_t *attr)
 创建并初始化消息队列对象。
 
xf_err_t xf_osal_queue_put (xf_osal_queue_t queue, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout)
 将消息放入队列,如果队列已满,则超时。
 
xf_err_t xf_osal_queue_get (xf_osal_queue_t queue, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout)
 从队列获取消息,如果队列为空,则超时。
 
uint32_t xf_osal_queue_get_count (xf_osal_queue_t queue)
 获取消息队列中排队的消息数。
 
xf_err_t xf_osal_queue_reset (xf_osal_queue_t queue)
 将消息队列重置为初始空状态。
 
xf_err_t xf_osal_queue_delete (xf_osal_queue_t queue)
 删除消息队列对象。
 

详细描述

以类似 FIFO 的操作在线程之间交换消息。

类型定义说明

◆ xf_osal_queue_t

typedef void* xf_osal_queue_t

消息队列句柄。

在文件 xf_osal_queue.h41 行定义.

◆ xf_osal_queue_attr_t

消息队列的属性结构。

函数说明

◆ xf_osal_queue_create()

xf_osal_queue_t xf_osal_queue_create ( uint32_t  msg_count,
uint32_t  msg_size,
const xf_osal_queue_attr_t attr 
)

创建并初始化消息队列对象。

注解
禁止 在中断服务函数中调用。
参数
msg_count队列中的最大消息数。
msg_size最大消息大小(以字节为单位)。
attr消息队列属性。填入 NULL 时使用默认属性。
返回
xf_osal_queue_t
  • NULL 创建失败
  • (OTHER) 队列句柄
示例
examples/osal/queue/main/xf_main.c.

◆ xf_osal_queue_put()

xf_err_t xf_osal_queue_put ( xf_osal_queue_t  queue,
const void *  msg_ptr,
uint8_t  msg_prio,
uint32_t  timeout 
)

将消息放入队列,如果队列已满,则超时。

注解
如果 timeout 为 0,则 可以 在中断服务函数中调用。
参数
queue队列句柄。从 xf_osal_queue_create() 获取。
msg_ptr指向缓冲区的指针,其中包含要放入队列的消息。
msg_prio消息优先级。
timeout超时时间,单位 tick.
  • 如需以 ms 为单位,请配合 xf_osal_kernel_ms_to_ticks() 使用。
  • 一直等待,直到成功放入消息(等待语义):填入 XF_OSAL_WAIT_FOREVER.
  • 尝试放入消息(尝试语义),无论成功与否都立刻返回:填入 0.
返回
xf_err_t
  • XF_OK 成功
  • XF_FAIL 通用错误
  • XF_ERR_TIMEOUT 超时,无法在给定时间内放入消息
  • XF_ERR_RESOURCE 队列中没有足够的空间
  • XF_ERR_INVALID_ARG 无效参数
示例
examples/osal/queue/main/xf_main.c.

◆ xf_osal_queue_get()

xf_err_t xf_osal_queue_get ( xf_osal_queue_t  queue,
void *  msg_ptr,
uint8_t *  msg_prio,
uint32_t  timeout 
)

从队列获取消息,如果队列为空,则超时。

注解
如果 timeout 为 0,则 可以 在中断服务函数中调用。
参数
queue队列句柄。从 xf_osal_queue_create() 获取。
[out]msg_ptr指向从队列获取消息的缓冲区的指针。
[out]msg_prio指向消息优先级缓冲区的指针或 NULL。
timeout超时时间,单位 tick.
  • 如需以 ms 为单位,请配合 xf_osal_kernel_ms_to_ticks() 使用。
  • 一直等待,直到成功获取消息(等待语义):填入 XF_OSAL_WAIT_FOREVER.
  • 尝试获取消息(尝试语义),无论成功与否都立刻返回:填入 0.
返回
xf_err_t
  • XF_OK 成功
  • XF_FAIL 通用错误
  • XF_ERR_TIMEOUT 超时,无法在给定时间内获取消息
  • XF_ERR_RESOURCE 队列中没有数据
  • XF_ERR_INVALID_ARG 无效参数
示例
examples/osal/queue/main/xf_main.c.

◆ xf_osal_queue_get_count()

uint32_t xf_osal_queue_get_count ( xf_osal_queue_t  queue)

获取消息队列中排队的消息数。

注解
可以 在中断服务函数中调用。
参数
queue队列句柄。从 xf_osal_queue_create() 获取。
返回
uint32_t 排队消息的数量。

◆ xf_osal_queue_reset()

xf_err_t xf_osal_queue_reset ( xf_osal_queue_t  queue)

将消息队列重置为初始空状态。

注解
禁止 在中断服务函数中调用。
参数
queue队列句柄。从 xf_osal_queue_create() 获取。
返回
xf_err_t 指示函数执行状态的状态代码。
示例
examples/osal/queue/main/xf_main.c.

◆ xf_osal_queue_delete()

xf_err_t xf_osal_queue_delete ( xf_osal_queue_t  queue)

删除消息队列对象。

注解
禁止 在中断服务函数中调用。
参数
queue队列句柄。从 xf_osal_queue_create() 获取。
返回
xf_err_t 指示函数执行状态的状态代码。
示例
examples/osal/queue/main/xf_main.c.