利用STM32CubeMX和Keil模拟器,3天入门FreeRTOS(4.1) —— 静态创建队列

前言

(1)FreeRTOS是我一天过完的,由此回忆并且记录一下。个人认为,如果只是入门,利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后,再去学习网上的一些其他课程也许会简单很多。
(2)本系列课程是使用的keil软件仿真平台,所以对于没有开发板的同学也可也进行学习。
(3)叠甲,再次强调,本系列课程仅仅用于入门。学习完之后建议还要再去寻找其他课程加深理解。
(4)本系列博客对应代码仓库:

前期准备

(1)将上一篇工程复制一份下来。

利用STM32CubeMX和Keil模拟器,3天入门FreeRTOS(4.1) —— 静态创建队列_第1张图片

实战

使用STM32CubeMX创建静态队列

(1)下图

利用STM32CubeMX和Keil模拟器,3天入门FreeRTOS(4.1) —— 静态创建队列_第2张图片

使用keil端

(1)按Ctrl+F搜索Private variables即可找到如下代码块,进行补充。

/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables */
QueueHandle_t KeilQueueHandle;                   //Keil端创建的队列句柄
#define QUEUE_LENGTH    3                        //队列长度
#define ITEM_SIZE       sizeof(uint16_t)         //队列中每个数据的所占字节
static StaticQueue_t StaticKeilQueueBuffer;      //用于存储队列控制块的静态内存结构的指针
static uint8_t StaticKeilStorageArea[ QUEUE_LENGTH * ITEM_SIZE ]; //储队列数据的缓冲区
/* USER CODE END Variables */

(2)按Ctrl+F搜索BEGIN RTOS_QUEUES即可找到如下代码块,进行补充。

  /* USER CODE BEGIN RTOS_QUEUES */
  /* add queues, ... */
	KeilQueueHandle   = xQueueCreateStatic(QUEUE_LENGTH, ITEM_SIZE,StaticKeilStorageArea,&StaticKeilQueueBuffer);
  /* USER CODE END RTOS_QUEUES */

测试结果

(1)除了创建队列的时候不同,其他时候使用是一模一样的,所以结果也和上一篇一模一样。所以自行测试

理论

xQueueCreateStatic()函数介绍

(1)动态创建队列和静态创建队列的区别,与动态创建任务和静态创建任务的区别是一样的,唯一的区别是传入的参数类型不一样。

/**
 * @brief  队列数据尾插
 *
 * @param  uxQueueLength         队列的长度
 *        -uxItemSize            队列中每个数据的所占字节
 *        -pucQueueStorageBuffer 用于存储队列数据的缓冲区的指针。这个缓冲区应该足够大以容纳所有的消息槽和消息数据
 *        -pxQueueBuffer         用于存储队列控制块的静态内存结构的指针
 *
 * @return  如果队列创建成功,则返回所创建队列的句柄 则返回已创建队列的句柄。 如果 pxQueueBuffer 为 NULL,则返回 NULL
 */
QueueHandle_t xQueueCreateStatic(UBaseType_t uxQueueLength,UBaseType_t uxItemSize,uint8_t *pucQueueStorageBuffer,StaticQueue_t *pxQueueBuffer );

参考

(1)FreeRTOS官方文档:xQueueCreateStatic

你可能感兴趣的:(FreeRTOS,stm32,嵌入式硬件,单片机)