FreeRTOS队列的使用

FreeRTOS(Free Real-Time Operating System)是一个开源的嵌入式实时操作系统,提供了多线程、任务调度、同步机制等功能。队列是FreeRTOS中的一个重要功能,用于实现任务间的通信和数据传输。

队列是一种先进先出(FIFO)的数据结构,FreeRTOS中的队列可以存储任意类型的数据,包括整型、字符型、结构体等。队列可以在不同的任务之间进行数据传输,发送任务将数据发送到队列中,接收任务从队列中取出数据。

FreeRTOS的队列有以下特点:

1. 队列是线程安全的:FreeRTOS使用互斥量或信号量等同步机制来保证多个任务对队列的并发访问安全。

2. 队列支持阻塞操作:发送任务在队列已满时可以阻塞,接收任务在队列为空时可以阻塞,以避免空轮询的开销。

3. 队列支持优先级:FreeRTOS的任务可以设置优先级,队列中的数据发送和接收可以根据任务的优先级进行调度。

4. 队列可以作为消息传递的机制:通过队列,任务之间可以传递消息,实现任务之间的通信。

使用FreeRTOS的队列可以方便地实现任务之间的数据传输和同步操作,提高系统的并发性和实时性。在嵌入式系统中,队列常被用于线程间的消息传递、事件处理等场景。

队列使用的基本步骤

1. 头文件引用

#include "FreeRTOS.h"
#include "queue.h"

2.声明

#define QUEUE_LENGTH 5
#define QUEUEITEM_SIZE sizeof(int)
//定义队列
QueueHandle_t xQueue1,xQueue2,xQueue3,xQueue4;//Key Debug TimerSwitch LVGL

3.main函数

int main(void)
{
	nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);  
	bsp_Init();

	/* 创建开始任务 */
	xTaskCreate((TaskFunction_t )start_task,
			  (const char*    )"start_task",
			  (uint16_t       )START_STK_SIZE,
			  (void*          )NULL,
			  (UBaseType_t    )START_TASK_PRIO,
			  (TaskHandle_t*  )&StartTask_Handler);  
	xQueue1=xQueueCreate(QUEUE_LENGTH,QUEUEITEM_SIZE);
	xQueue2=xQueueCreate(QUEUE_LENGTH,QUEUEITEM_SIZE);
	xQueue3=xQueueCreate(QUEUE_LENGTH,QUEUEITEM_SIZE);
	xQueue4=xQueueCreate(QUEUE_LENGTH,QUEUEITEM_SIZE);
	/* 开启任务调度器 */              
	vTaskStartScheduler();
}

4.两种基本调用

接收

xQueueReceive(xQueue1,&key_value,portMAX_DELAY);

发送

xQueueSend(xQueue1,&key_value,portMAX_DELAY);

FreeRTOS的实时性得到了体现,只有当按键按下,发送按键值,接收那一边的任务才会执行接收语句后面的内容

在portmacro.h中可以看到portMAX_DELAY的值

这个值有时候可以是0,比如你希望每次扫描而不是不执行后面的内容。

  • 15
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值