1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
//建删
QueueHandle_t xQueueHandle = NULL;
xQueueHandle = xQueueCreate(20/*消息条数*/, 4/*单条大小*/); //创建消息 (单条大小:字节)
vQueueDelete(xQueueHandle); //删除消息
vQueueAddToRegistry(xQueueHandle, "msg name"); //注册消息名称(仅仅用于调试)
vQueueUnregisterQueue(xQueueHandle); //解除注册消息(仅仅用于调试)
//使用
char msg[] = {1, 2, 3};
BaseType_t true /*= pdTRUE*/;
true = xQueueReset(xQueueHandle);
true = xQueueOverwrite(xQueueHandle, msg); //覆盖消息(仅仅适合只有一条消息的队列)
true = xQueueSend(xQueueHandle, msg, portMAX_DELAY); //投递消息(等同 xQueueSendToBack())
true = xQueueSendToBack(xQueueHandle, msg, portMAX_DELAY); //【向队列尾部】投递消息
true = xQueueSendToFront(xQueueHandle, msg, portMAX_DELAY); //【向队列头部】投递消息
true = xQueueReceive(xQueueHandle, msg, portMAX_DELAY); //获取消息(返回 pdTRUE 表示获取到消息)
true = xQueuePeek(xQueueHandle, msg, portMAX_DELAY); //查看消息(相比 xQueueReceive() 不会清除队列中读出的消息)
UBaseType_t n = uxQueueMessagesWaiting(xQueueHandle); //查看入列信息数目(单位:条数)
UBaseType_t n = uxQueueSpacesAvailable(xQueueHandle); //查看队列空闲数目(单位:条数)
//在中断里使用
char msg[] = {1, 2, 3};
BaseType_t xHigherPriorityTaskWoken = pdFALSE; //在中断里覆盖消息(中断->中断)或(中断->线程)(仅仅适合只有一条消息的队列)
true = xQueueOverwriteFromISR(xQueueHandle, msg, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken); //如果 true == pdTRUE, 则要调用本函数执行一次上下文切换
char msg[] = {1, 2, 3};
BaseType_t xHigherPriorityTaskWoken = pdFALSE; //在中断里投递消息(中断->中断)或(中断->线程)
true = xQueueSendFromISR(xQueueHandle, msg, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken); //如果 true == pdTRUE, 则要调用本函数执行一次上下文切换
char msg[] = {1, 2, 3};
BaseType_t xHigherPriorityTaskWoken = pdFALSE; //在中断里【向队列尾部】投递消息(中断->中断)或(中断->线程)
true = xQueueSendToBackFromISR(xQueueHandle, msg, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken); //如果 true == pdTRUE, 则要调用本函数执行一次上下文切换
char msg[] = {1, 2, 3};
BaseType_t xHigherPriorityTaskWoken = pdFALSE; //在中断里【向队列头部】投递消息(中断->中断)或(中断->线程)
true = xQueueSendToFrontFromISR(xQueueHandle, msg, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken); //如果 true == pdTRUE, 则要调用本函数执行一次上下文切换
char msg[4];
BaseType_t xHigherPriorityTaskWoken = pdFALSE; //在中断里获取消息
true = xQueueReceiveFromISR(xQueueHandle, msg, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken); //如果 true == pdTRUE, 则要调用本函数执行一次上下文切换
char msg[4];
BaseType_t xHigherPriorityTaskWoken = pdFALSE; //在中断里查看消息
true = xQueuePeekFromISR(xQueueHandle, msg, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken); //如果 true == pdTRUE, 则要调用本函数执行一次上下文切换
true = xQueueIsQueueEmptyFromISR(xQueueHandle); //查看消息队列是否为空(返回 pdTRUE 表示为空)
true = xQueueIsQueueFullFromISR(xQueueHandle); //查看消息队列是否为满(返回 pdTRUE 表示为满)
UBaseType_t n = uxQueueMessagesWaitingFromISR(xQueueHandle);//查看入列信息数目(单位:条数)
|