FreeRTOS队列和相关函数

本文介绍FreeRTOS中的队列概念,包括队列结构体Queue_t的详细说明,以及如何使用创建队列、发送消息和读取消息等关键函数。通过实验部分,阐述了具体的操作要求和实现程序,帮助读者深入理解FreeRTOS队列的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FreeRTOS队列和相关函数

FreeRTOS队列

什么是队列

队列是为了任务与任务、任务与中断之间的通信而准备的,他可以任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之间要交流的数据保存到队列中,叫做队列项目。队列所能保存的最大数据项目的数量叫做队列长度,创建队列时会指定数据项目的大小和队列长度。由于队列是用来传递消息的,也称为消息队列。FreeRTOS中信号量依靠队列实现的。队列不属于莫个任务,任何任务都可以向队列发送消息,或者从队列中提取消息。
1.出队阻塞

在这里插入图片描述

2.入队阻塞

在这里插入图片描述
3.队列结构体
有一个结构体用来描述队列,叫做Queue_t,这个结构体在queue.c文件中。
在这里插入图片描述
在这里插入图片描述

队列函数

创建队列函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

发送消息函数

在这里插入图片描述

读取消息函数

在这里插入图片描述

实验

要求

在这里插入图片描述

程序

1.主程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "lcd.h"
#include "key.h"
#include "beep.h"
#include "string.h"
#include "malloc.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"


//任务优先级
#define START_TASK_PRIO		1
#define TASK1_TASK_PRIO		2
#define KEYPROCESS_TASK_PRIO 3
//任务堆栈大小
#define START_STK_SIZE 		256
#define TASK1_STK_SIZE 		256  
#define KEYPROCESS_STK_SIZE  256 
//任务句柄
TaskHandle_t StartTask_Handler;
TaskHandle_t Task1Task_Handler;
TaskHandle_t Keyprocess_Handler;
//任务函数
void start_task(void *pvParameters);
void task1_task(void *pvParameters);
void Keyprocess_task(void *pvParameters);


#define KEYMSG_Q_NUM    1  		//按键消息队列的数量
#define MESSAGE_Q_NUM   4   	//发送数据的消息队列的数量
QueueHandle_t Key_Queue;   		//按键消息队列的句柄
QueueHandle_t Message_Queue;	//信息队列句柄

//LCD刷屏颜色
int lcd_discolor[14]={
   	WHITE, BLACK, BLUE,  BRED,      
						GRED,  GBLUE, RED,   MAGENTA,       	 
						GREEN, CYAN,  YELLOW,BROWN, 			
						BRRED, GRAY };


//显示接收队列的消息
void disp_str(u8* str)
{
   
	LCD_Fill(5,230,110,245,WHITE);					//先清除显示区
	LCD_ShowString(5,230,100,16,16,str);
}

//加载主页面
void freertos_load_main_ui(void)
{
   
	POINT_COLOR = RED;
	LCD_ShowString(10,10,200,16,16,"STM32F103/407");	
	LCD_ShowString(10,30,200,16,16,"FreeRTOS Examp 13-1");
	LCD_ShowString(10,50,200,16,16,"Message Queue");
	LCD_ShowString(10,70,220,16,16,"KEY_UP:LED1 KEY0:Refresh LCD");
	LCD_ShowString(10,90,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值