数据队列

优质
小牛编辑
127浏览
2023-12-01

数据队列接口

结构体

struct  rt_data_queue
 数据队列控制块 更多...
 

宏定义

#define RT_DATAQUEUE_EVENT_UNKNOWN   0x00
 未知数据队列事件
 
#define RT_DATAQUEUE_EVENT_POP   0x01
 数据队列取出事件
 
#define RT_DATAQUEUE_EVENT_PUSH   0x02
 数据队列写入事件
 
#define RT_DATAQUEUE_EVENT_LWM   0x03
 数据队列数达到设定阈值事件
 
#define RT_DATAQUEUE_SIZE(dq)   ((dq)->put_index - (dq)->get_index)
 数据队列使用数量
 
#define RT_DATAQUEUE_EMPTY(dq)   ((dq)->size - RT_DATAQUEUE_SIZE(dq))
 数据队列空闲数量
 

函数

rt_err_t rt_data_queue_init (struct rt_data_queue *queue, rt_uint16_t size, rt_uint16_t lwm, void(*evt_notify)(struct rt_data_queue *queue, rt_uint32_t event))
 数据队列初始化
 
rt_err_t rt_data_queue_push (struct rt_data_queue *queue, const void *data_ptr, rt_size_t data_size, rt_int32_t timeout)
 向数据队列中写入数据
 
rt_err_t rt_data_queue_pop (struct rt_data_queue *queue, const void **data_ptr, rt_size_t *size, rt_int32_t timeout)
 取出数据队列中的数据
 
rt_err_t rt_data_queue_peak (struct rt_data_queue *queue, const void **data_ptr, rt_size_t *size)
 取出但保留数据队列中的数据
 
void rt_data_queue_reset (struct rt_data_queue *queue)
 重置数据队列
 

详细描述

数据队列接口

函数说明

rt_err_t rt_data_queue_init(struct rt_data_queuequeue,
rt_uint16_t size,
rt_uint16_t lwm,
void(*)(struct rt_data_queue *queue, rt_uint32_t event) evt_notify 
)

数据队列初始化

调用该函数将初始化数据队列控制块,并设定通知回调函数。

参数
queue数据队列句柄
size数据队列块大小
lwm阈值设定
evt_notify通知事件回调函数
返回
-RT_ENOMEM 内存不足申请失败; RT_EOK 初始化成功
rt_err_t rt_data_queue_push(struct rt_data_queuequeue,
const void * data_ptr,
rt_size_t data_size,
rt_int32_t timeout 
)

向数据队列中写入数据

调用该函数可以向指定的数据队列中写入数据,当数据队列已满,则在指定的超时时间内挂起等待。

参数
queue数据队列句柄
data_ptr待写入的数据指针
data_size待写入数据的字节数
timeout指定超时时间
返回
-RT_ETIMEOUT 队列已满,等待超时;RT_EOK 写入成功
rt_err_t rt_data_queue_pop(struct rt_data_queuequeue,
const void ** data_ptr,
rt_size_tsize,
rt_int32_t timeout 
)

取出数据队列中的数据

调用该函数可以从指定的数据队列中取出数据,如果数据队列为空,则在指定的时间内挂起等待。

参数
queue数据队列句柄
data_ptr待取出的数据指针
size待取出数据的字节数
timeout指定超时时间
返回
-RT_ETIMEOUT 队列已空,等待超时;RT_EOK 取出成功
rt_err_t rt_data_queue_peak(struct rt_data_queuequeue,
const void ** data_ptr,
rt_size_tsize 
)

取出但保留数据队列中的数据

调用该函数可以从指定的数据队列中取出数据,如果数据队列为空,则在指定的时间内挂起等待。

参数
queue数据队列句柄
data_ptr待取出的数据指针
size待取出数据的字节数
返回
–RT_EEMPTY 队列已空;RT_EOK 取出成功
void rt_data_queue_reset(struct rt_data_queuequeue)

重置数据队列

调用该函数将唤醒数据队列上挂起等待的所有线程。

参数
queue数据队列句柄