CMSIS-RTOS2(FreeRTOS) 是否有清理队列的功能?

问题描述

我正在使用 CMSIS-RTOS2(基于 ARM 的 RTOS FreeRTOS),我只想知道是否有任何函数可以清理队列(在所有位置都放 0)。就这样,就像“重新启动”队列一样。

#include "cmsis_os.h"

osMessageQueueId_t xGPS_QueueHandle;
const osMessageQueueAttr_t xGPS_Queue_attributes = {
  .name = "xGPS_Queue"
};

xGPS_QueueHandle = osMessageQueueNew (250,sizeof(uint8_t),&xGPS_Queue_attributes);

解决方法

我已经找到答案了!

功能: osStatus_t osMessageQueueReset(osMessageQueueId_t mq_id)

就我而言,我需要使用: osMessageQueueReset(xGPS_QueueHandle);

返回的变量可能是:

osOK:消息队列已经休息。

osErrorParameter: 参数 mq_id 为 NULL 或无效。

osErrorResource:消息队列处于无效状态。

osErrorISR: osMessageQueueReset 不能从中断服务例程中调用。

更多细节可以在文档中找到: https://www.keil.com/pack/doc/CMSIS/RTOS2/html/group__CMSIS__RTOS__Message.html#gac6dce7f9ad132d266292c2e979d861b4