os_msgq_init
所属模块:通信机制 | 类型:消息队列初始化函数
函数简介
os_msgq_init 用于初始化消息队列控制块,
绑定环形缓冲区并重置队列状态。
该函数构建消息队列的基础结构,是消息通信机制的起始入口。
函数原型
void os_msgq_init(os_msgq_t *q, u8 *buf, u8 _size);
参数说明
| 参数 |
说明 |
| q |
消息队列控制块指针 |
| buf |
环形缓冲区首地址 |
| _size |
队列最大容量 |
返回值
无返回值(void函数),仅完成结构初始化,不涉及调度或状态反馈。
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : msgq_init.c
| - Author : 谭舒
| - Update date : 2026-09-19
| - Copyright(C) : 2026 HRTOS. All rights reserved.
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| INCLUDES |
------------------------------------------------------------------------*/
#include "hrtos_internal.h"
/*------------------------------------------------------------------------
| API FUNCTIONS |
------------------------------------------------------------------------*/
/**
* @brief 初始化指定的消息队列。
*
* @param[in] q 消息队列控制块指针。
* @param[in] buf 消息队列缓冲区指针。
* @param[in] _size 消息队列最大容量。
*
* @return None。
*
* @note 设置消息队列缓冲区及最大容量,并将队头、队尾索引和消息数量清零。
* 初始化完成后,消息队列处于空状态。
*/
void os_msgq_init(os_msgq_t *q, u8 *buf, u8 _size)
{
q->buf = buf; //关联消息缓冲区
q->_size = _size; //设置队列容量
q->head = 0; //队头索引(读取位置)
q->tail = 0; //队尾索引(写入位置)
q->count = 0; //当前队列中的消息数量
}
/*------------------------------------------------------------------------
| END OF FILE: msgq_init.c |
------------------------------------------------------------------------*/
使用示例
os_msgq_t q;
u8 buffer[16];
void system_init()
{
os_msgq_init(&q, buffer, 16);
}
注意事项
初始化仅建立结构关系,不涉及任务调度或数据同步。
使用前必须保证缓冲区有效。