巢湖网站建设电话,长沙大型互联网公司,黄冈智能网站建设平台,织梦模板官网一.消息队列的概念及应用消息队列#xff08;queue#xff09;#xff1a;可以在任务与任务间、中断和任务间传递消息#xff0c;实现任务接收来自其他任务或中断的不固定的消息1.1任务需求1、使用消息队列检测串口输入2、通过串口发送字符串openled1#xff0c;openled2queue可以在任务与任务间、中断和任务间传递消息实现任务接收来自其他任务或中断的不固定的消息1.1任务需求1、使用消息队列检测串口输入2、通过串口发送字符串openled1openled2openled3分别打开板载led1led2led33、通过串口发送字符串closeled1closeled2closeled3分别关闭板载led1led2led31.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消息队列为空注意事项调用此函数会触发上下文切换当前被中断的任务优先级低于解除阻塞的任务在启动调度器之前不能调用此函数二.函数应用