目录
注意,FreeRTOS消息队列传递的是实际数据,并不是数据地址消息队列,这点在之前的邮箱中有强调。
消息队列的句柄
#define rtosMQ_t QueueHandle_t
1. 创建
#define rtosMQCreate( \
handle, \
name, \
size, \
max, \
flag \
) \
{ \
handle = xQueueCreate(max, size); \
}
参数name和flag是不支持的。
2. 删除
#define rtosMQDelete( \
handle \
) \
{ \
vQueueDelete(handle); \
}
3. 发送
在RT Thread中发送分为普通和紧急两种方式,其实就是该消息块挂到消息队列的尾部(普通消息)或者头部(紧急消息),而FreeRTOS中的xQueueSend起始就是挂在尾部,另外一个函数xQueueSendToFront就是挂在头部。所以2个发送的接口定义如下:
#define rtosMQSend( \
handle, \
buffer, \
size, \
ret \
) \
{ \
ret = xQueueSend(handle, (void *)&buffer, 0); \
}
#define rtosMQSendUrgent( \
handle, \
buffer, \
size, \
ret \
) \
{ \
ret = xQueueSendToFront(handle, \
(void *)&buffer, 0); \
}
4. 接收
#define rtosMQReceive( \
handle, \
buffer, \
size, \
timeout, \
ret \
) \
{ \
ret = xQueueReceive(handle, (void *)&buffer, \
timeout); \
}