Freertos-----任务之间的消息传递(使用消息队列&信号量方法)

这次来分享任务之间的数据传递的方法,方法有很多种,我展示2种,让大家对freertos有更深刻的印象

目录

消息队列

信号量


消息队列

首先直接打开普中的例程,然后在里面加上ADC的驱动代码,先初始化外设先,我使用的是一个光敏传感器。

好的,后面的核心讲解来了。竖起耳朵!!

信号量

这是一个使用信号量的方法,笔者使用的是二值信号量,只有0和1两种情况

0就是无

1就是有

就2种状态

老样子,也是用上面的工程改改

1.创建信号量句柄

2.创建信号量

3.写业务逻辑

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
FreeRTOS消息队列是一种用于任务间通信的机制,可以在任务之间传递消息队列中可以存储有限的、大小固定的数据项目,任务任务任务与中断之间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目数叫做队列的长度,创建队列的时候会指定数据项目的大小和队列的长度。FreeRTOS中的信号也是依据队列实现的,所以有必要深入了解FreeRTOS的队列。 在FreeRTOS中,可以使用xQueueCreate()函数创建一个队列,该函数需要传入两个参数:队列的长度和每个队列项目的大小。创建队列后,可以使用xQueueSend()函数向队列中发送数据,使用xQueueReceive()函数从队列中接收数据。此外,还可以使用xQueuePeek()函数查看队列中的下一个数据项,而不将其从队列中删除。 下面是一个简单的示例,演示如何在FreeRTOS中使用消息队列: ```c #include "FreeRTOS.h" #include "task.h" #include "queue.h" #define QUEUE_LENGTH 5 #define ITEM_SIZE sizeof(int) void vSenderTask(void *pvParameters) { QueueHandle_t xQueue; int i = 0; // 创建一个长度为QUEUE_LENGTH,每个项目大小为ITEM_SIZE的队列 xQueue = xQueueCreate(QUEUE_LENGTH, ITEM_SIZE); while (1) { // 向队列中发送数据 xQueueSend(xQueue, &i, 0); // 延时一段时间 vTaskDelay(pdMS_TO_TICKS(500)); i++; } } void vReceiverTask(void *pvParameters) { QueueHandle_t xQueue; int iReceivedValue; // 获取发送任务创建的队列句柄 xQueue = (QueueHandle_t)pvParameters; while (1) { // 从队列中接收数据 xQueueReceive(xQueue, &iReceivedValue, portMAX_DELAY); // 处理接收到的数据 printf("Received value: %d\n", iReceivedValue); } } int main(void) { QueueHandle_t xQueue; // 创建一个长度为QUEUE_LENGTH,每个项目大小为ITEM_SIZE的队列 xQueue = xQueueCreate(QUEUE_LENGTH, ITEM_SIZE); // 创建发送任务 xTaskCreate(vSenderTask, "Sender", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL); // 创建接收任务 xTaskCreate(vReceiverTask, "Receiver", configMINIMAL_STACK_SIZE, (void *)xQueue, tskIDLE_PRIORITY + 1, NULL); // 启动调度器 vTaskStartScheduler(); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挨踢玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值