FreeRTOS 队列
OSAL源码
| 文件 | 作用 |
|---|---|
| osal_queue.h | 公开接口 |
| osal_internal_queue.h | Wrapper与适配层接口 |
| osal_queue.c | 参数检查与封装 |
| os_impl_queue.c | FreeRTOS实现 |
1. 定义队列深度
Config/rtos_config.h
#define CFG_QUEUE_SENSOR_DEPTH 8U2. 添加队列配置
App/app_init/user_task_config/user_task_reso_config.h
typedef enum
{
QUEUE_IDX_SENSOR = 0,
QUEUE_IDX_MAX
} user_queue_idx_t;
typedef struct
{
size_t depth;
size_t item_size;
osal_queue_handle_t handle;
} user_queue_config_t;user_queue_config_t user_queues[QUEUE_IDX_MAX] =
{
{CFG_QUEUE_SENSOR_DEPTH, sizeof(sensor_data_t), NULL},
};3. 创建队列
App/app_init/user_task_config/user_task_reso_config.c
osal_queue_create(user_queues[QUEUE_IDX_SENSOR].depth,
user_queues[QUEUE_IDX_SENSOR].item_size,
&user_queues[QUEUE_IDX_SENSOR].handle);4. 发送与接收
要使用的地方
osal_queue_send(user_queues[QUEUE_IDX_SENSOR].handle,
&sensor_data, 0U);
osal_queue_receive(user_queues[QUEUE_IDX_SENSOR].handle,
&sensor_data, OSAL_WAIT_FOREVER);查看但不移除队首数据使用 osal_queue_peek();获取当前消息数使用 osal_queue_messages_waiting()。
5. 删除
要删除的地方
osal_queue_delete(user_queues[QUEUE_IDX_SENSOR].handle);
user_queues[QUEUE_IDX_SENSOR].handle = NULL;