问题描述
我正在使用 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