os_msgq_clear
所属模块:通信机制 | 类型:消息队列清空函数
函数简介
os_msgq_clear 用于清空消息队列的运行状态,
重置队列读写指针与计数器。
该函数不会清除底层缓冲区数据,仅重置逻辑状态,
用于快速恢复队列初始状态。
函数原型
void os_msgq_clear(os_msgq_t *q);
返回值
无返回值(void函数),仅重置队列状态。
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : msgq_clear.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 消息队列控制块指针。
*
* @return None。
*
* @note 重置消息队列的队头、队尾索引及消息数量,
* 使消息队列恢复为空状态。
* 该操作仅重置队列运行状态,不清除缓冲区中的实际数据。
*/
void os_msgq_clear(os_msgq_t *q)
{
EA = 0;
q->head = 0; //重置写指针
q->tail = 0; //重置读指针
q->count = 0; //清空消息计数
EA = 1;
}
/*------------------------------------------------------------------------
| END OF FILE: msgq_clear.c |
------------------------------------------------------------------------*/
使用示例
void reset_task()
{
os_msgq_clear(&my_queue);
}
注意事项
该函数仅清除逻辑状态,不会擦除 buffer 内容。
在多任务环境下调用时已通过关中断保证原子性。