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