湖北省建设厅七大员报名网站/seo最新
一.消息队列的概念及应用
消息队列(queue):可以在任务与任务间、中断和任务间传递消息,实现任务接收来自其他任务或中断的不固定的消息

1.1任务需求
1、使用消息队列检测串口输入
2、通过串口发送字符串openled1,openled2,openled3,分别打开板载led1,led2,led3
3、通过串口发送字符串closeled1,closeled2,closeled3,分别关闭板载led1,led2,led3
1.2API
函数原型 | #include “FreeRTOS.h” #include “queue.h” QueueHandle_t xQueueCreate( ①UBaseType_t uxQueueLength, ②UBaseType_t uxItemSize ); |
功能概述 | 创建一个消息队列,并返回消息队列句柄 |
参数 | ①:队列一次可容纳消息的最大长度 ②:队列中每个消息体大小 |
返回值 | NULL:创建失败 Any other value :创建成功,返回消息队列句柄 |
注意事项 | 队列可以用于任务与任务通信,也是用于中断与任务通信 可在调度器开启之前,创建消息队列 |
函数原型 | #include “FreeRTOS.h” #include “queue.h” BaseType_t xQueueSend/xQueueSendToFront/xQueueSendToBack( ① QueueHandle_t xQueue, ②const void * pvItemToQueue, ③ TickType_t xTicksToWait ); |
功能概述 | 在任务中往队列中传入消息 xQueueSend 等价于xQueueSendToBack 入到队尾 xQueueSendToFront 入到队头 |
参数 | ①:消息队列句柄 ②:要发送的消息的地址 ③:阻塞等待时间 |
返回值 | pdPASS:发送成功 errQUEUE_FULL:队列已经满,发送失败 |
注意事项 | None |
函数原型 | #include “FreeRTOS.h” #include “queue.h” BaseType_t xQueueSendFromISR/xQueueSendToFrontFromISR/xQueueSendToBackFromISR ( ① QueueHandle_t xQueue, ②const void * pvItemToQueue, ③ BaseType_t *pxHigherPriorityTaskWoken); |
功能概述 | 在中断中往队列中传入消息 xQueueSendFromISR 等价于xQueueSendToBackFromISR 入到队尾 xQueueSendToFrontFromISR 入到队头 |
参数 | ①:消息队列句柄 ②:要发送的消息的地址 ③:NULL |
返回值 | pdTRUE:发送成功 errQUEUE_FULL:队列已经满,发送失败 |
注意事项 | 调用此函数,会触发上下文切换(当前被中断的任务优先级低于解除阻塞的任务) 在启动调度器之前不能调用此函数 |
函数原型 | #include “FreeRTOS.h” #include “queue.h” BaseType_t xQueueReceive( ①QueueHandle_t xQueue, ②void *pvBuffer, ③TickType_t xTicksToWait ); |
功能概述 | 在任务中读取消息队列消息 |
参数 | ①:消息队列句柄 ②:接收消息的缓冲区 ③:阻塞等待时间 |
返回值 | pdPASS:创建失败 errQUEUE_EMPTY:消息队列为空 |
注意事项 | None |
函数原型 | #include “FreeRTOS.h” #include “queue.h” BaseType_t xQueueReceiveFromISR( ① QueueHandle_t xQueue, ② void *pvBuffer, ③BaseType_t *pxHigherPriorityTaskWoken ); |
功能概述 | 在中断中读取消息队列消息 |
参数 | ①:消息队列句柄 ②:接收消息的缓冲区 ③:NULL |
返回值 | pdPASS:创建失败 pdFAIL:消息队列为空 |
注意事项 | 调用此函数,会触发上下文切换(当前被中断的任务优先级低于解除阻塞的任务) 在启动调度器之前不能调用此函数 |