FreeRTOS之队列集操作(实践)

    多个任务在在同一队列中传递的同一种数据类型,而队列集能够在任务之间传递不同的数据类型。

配置流程:(更详细流程参考正点原子的教程)

1、启用队列集将configUSE_QUEUE_SETA置1)

2、创建队列集

3、创建队列或信号量

4、往队列集添加队列或信号量

5、往队列发送信息及信号量

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "FreeRTOS.h"
#include "task.h"
#include "sys.h"
#include "semphr.h"
#include "queue.h"
/****************************************************
STM32F103C8T6单片机freertos移植实验
作者:KJX
时间:2023-12-22
*****************************************************/
//优先级
#define START_TASK_PRIO         1
//堆栈大小
#define START_STK_SIZE        128
//任务函数
void start_task(void * pvParameters);
//任务句柄
TaskHandle_t StartTask_Handler;//task1优先级
#define TASK1_TASK_PRIO      	3
//task1堆栈大小
#define TASK1_STK_SIZE        128
//task1函数声明
void task1_task(void * pvParameters);
//task1任务句柄
TaskHandle_t  Task1Task_Handler;//task2优先级
#define TASK2_TASK_PRIO      	2
//task2堆栈大小
#define TASK2_STK_SIZE        128
//task2函数声明
void task2_task(void * pvParameters);
//task2任务句柄
TaskHandle_t  Task2Task_Handler;//相关信号量
QueueSetHandle_t queueset_handle;
QueueHandle_t    queue_handle;
QueueHandle_t    semphr_handle;int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);delay_init();uart_init(9600);LED_Init();LED0=0;	xTaskCreate((TaskFunction_t )  start_task,     //指向任务函数的指针,必须为第一个(char *   			) "start_task",   //任务名字(uint16_t 			) START_STK_SIZE, //任务堆栈大小,字为单位(void *         	) NULL, 		  //传递给任务函数的参数(UBaseType_t    	) START_TASK_PRIO,//任务优先级,数值大,则优先级大(TaskHandle_t * 	) &StartTask_Handler);//任务句柄(控制块)									vTaskStartScheduler();//开启任务调度							
}//开始任务
//返回值为pdPASS则创建任务成功void start_task(void * pvParameters)
{taskENTER_CRITICAL();//进入临界区,创建任务完成后,才开始执行优先级任务//队列集相关queueset_handle=xQueueCreateSet(2);//创建数列集,可存放2个队列if(queueset_handle!= NULL){printf("队列集创建成功!!\r\n");}queue_handle = xQueueCreate(1,sizeof(uint8_t));//创建队列semphr_handle = xSemaphoreCreateBinary();//创建二值信号量//加入队列集xQueueAddToSet(queue_handle,queueset_handle);xQueueAddToSet(semphr_handle,queueset_handle);//创建Task1xTaskCreate((TaskFunction_t ) task1_task,(char *   			) "task1_task",(uint16_t 			) TASK1_STK_SIZE,(void *         	) NULL,(UBaseType_t    	) TASK1_TASK_PRIO,(TaskHandle_t * 	) &Task1Task_Handler);//创建Task2xTaskCreate((TaskFunction_t ) task2_task,(char *   			) "task2_task",(uint16_t 			) TASK2_STK_SIZE,(void *         	) NULL,(UBaseType_t    	) TASK2_TASK_PRIO,(TaskHandle_t * 	) &Task2Task_Handler);vTaskDelete(StartTask_Handler);//删除开始任务,删除自身用NULLtaskEXIT_CRITICAL();//退出临界区
}//任务一,队列发送及信号量释放
void task1_task(void * pvParameters)
{    uint8_t key=1;BaseType_t err;	while(1){if(key==1){	    err=xQueueSend(queue_handle,&key,portMAX_DELAY);if(err==pdPASS){printf("往队列写入数据成功!!\r\n");	}		}else if(key==2){err=xSemaphoreGive(semphr_handle);if(err==pdPASS){printf("释放信号量成功!!\r\n");	}}vTaskDelay(10);}
}//任务二,获取队列信息
void task2_task(void * pvParameters)
{   QueueSetMemberHandle_t  member_handle;uint8_t key;while(1){member_handle = xQueueSelectFromSet(queueset_handle,portMAX_DELAY);if(member_handle == queue_handle){xQueueReceive(member_handle,&key,portMAX_DELAY);printf("获取的队列数据为:%d\r\n",key);}else if(member_handle==semphr_handle ){xSemaphoreTake(member_handle,portMAX_DELAY);printf("获取信号量成功!!\r\n");}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EDA设计基础练习题

EDA设计基础练习题 : 1、设计一个三输入或非门电路。 2、三输入三输出电路设计: 输入A为1时,对应输出为1,A为0时,输出为0; 输入B为1时,对应输出为0,B为0时,输出为1&am…

SpringBoot对接支付宝完成扫码支付

文章目录 1、支付方式选择2、交互流程3、对接准备1)加密解密 签名验签2)沙箱环境3)内网穿透 4、二维码5、下单6、异步通知回调7、查询支付结果8、退款9、通用版SDK 需求:系统A对接支付宝,实现支持用户扫码支付 1、支…

成为一名FPGA工程师:面试题与经验分享

在现代科技领域,随着数字电子技术的迅猛发展,FPGA(可编程逻辑器件)工程师成为了备受瞩目的职业之一。FPGA工程师不仅需要掌握硬件设计的基本原理,还需要具备良好的编程能力和解决问题的实践经验。面对如此竞争激烈的行…

语音识别之百度语音试用和OpenAiGPT开源Whisper使用

0.前言: 本文作者亲自使用了百度云语音识别,腾讯云,java的SpeechRecognition语言识别包 和OpenAI近期免费开源的语言识别Whisper(真香警告)介绍了常见的语言识别实现原理 1.NLP 自然语言处理(人类语言处理) 你好不同人说出来是不同的信号表示 单位k 16k16000个数字表示 1秒160…

木工手工笔记

文章目录 连接两根木棍两根电线连接榫卯连接隔空划线塑料热熔密封万能的502扳手模具修复模具修复进阶 手工活真的很解压。简单整理下吧。 以前对物理知识不是很重视,现在发现很有用,很多地方都能用到。 连接两根木棍 中心划线,螺丝钉打入&am…

C语言中关于操作符的理解

本篇文章只会列出大家在生活中经常使用的操作符 算术操作符 在算数操作符中常用的有&#xff0c;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;% &#xff0c;我们重点讲一讲 / (除) 和 % (模) " / "运算 #include <stdio.h>int main() {int a5/2;fl…

字符串变换最小字符串(100用例)C卷

从前有个村庄,村民们喜欢在各种田地上插上小旗子,旗子上标识了各种不同的数字。某天集体村民决定将覆盖相同数字的最小矩阵形的土地的分配给为村里做出巨大贡献的村民,请问,此次分配士地,做出贡献的村民中最大会分配多大面积? 输入描述: 第一行输入m和n,m代表村子的土地…

探讨APP自动化测试工具的重要性

随着移动应用市场的蓬勃发展&#xff0c;企业对于保证其移动应用质量和用户体验的需求日益迫切。在这一背景下&#xff0c;APP自动化测试工具正变得越来越重要&#xff0c;成为企业成功的关键组成部分。本文将探讨APP自动化测试工具对企业的重要性&#xff0c;并为您解析其在提…

Spring中你一定要知道的@PostConstruct/@PreDestroy

文章目录 功能源码解析执行 功能 Spring中存在很多回调&#xff0c;但是执行他们的时机都不相同&#xff0c;也许大家用的最多的是InitializingBean.afterPropertiesSet&#xff0c;这个方法的作用如名称一样&#xff0c;是bean初始化后执行的一个回调操作&#xff0c;而PostC…

MarkDown阅读器

MarkDown阅读器 MarkText MarkText MarkText&#xff1a;https://github.com/marktext/marktext 或 https://www.marktext.cc

Vue router-view 组件如何实现回调处理

在 Vue.js 中&#xff0c;router-view 组件是用于展示由 vue-router 管理的路由匹配到的组件。router-view 本身并不直接提供回调函数功能&#xff0c;如页面加载完成后的事件回调。但是我吗可以通过其他方式来实现类似的功能&#xff1a; 监听路由变化&#xff1a; 你可以在父…

网络安全—四种攻击方式

四种攻击方式的概述 ARP攻击 概念 ARP协议的基本功能就是通过目标设备的IP地址&#xff0c;在局域网发送广播包&#xff0c;查询目标设备的MAC地址&#xff0c;以保证通信的进行。 ARP攻击 基于ARP协议的这一工作特性&#xff0c;黑客向对方计算机不断发送有欺诈性质的ARP数…

nodejs+vue+ElementUi家政服务系统c90g5

项目中登录模块用到token家政服务平台有管理员&#xff0c;雇主&#xff0c;雇员三个角色。管理员功能有个人中心&#xff0c;雇主管理&#xff0c;雇员管理&#xff0c;资料认证管理&#xff0c;项目类型管理&#xff0c;服务项目管理&#xff0c;需求信息管理&#xff0c;服务…

博客迁移通知

本博客停止更新&#xff0c;即将迁移到个人网站 http://120.24.170.168/ 本人一枚80后&#xff0c;从事JAVA软件开发10余年&#xff0c;掌握大数据和java技术以及相关的Linux运维技术&#xff0c;面临求职找工作&#xff0c;邮箱&#xff1a;904456849qq.com&#xff0c;感谢广…

C# WPF上位机开发(软件的发布和部署)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 软件编译完成之后&#xff0c;本地测试完之后&#xff0c;一般都要发布和部署到客户的电脑上面。客户电脑的配置未必和开发的电脑是一样的&#xf…

mysql 23day DDL常用约束,数据类型

目录 数据库的四种语言常用约束&#xff08;DDL&#xff09;创建格式PRIMARY KEY&#xff1a;主键约束FOREIGN KEY&#xff1a;外键约束主键外键 联合测试开始测试 NOT NULL&#xff1a;非空约束UNIQUE&#xff1a;唯一约束DEFAULT&#xff1a;默认值约束zerofill 零填充auto_i…

自制数据库空洞率清理工具-C版-01-EasyClean-V1.0(支持南大通用数据库Gbase8a)

目录 一、环境信息 二、简述 三、支持功能 四、空洞率 五、工具流程图 六、安装包下载地址 七、参数介绍 1、命令模板 2、命令样例 3、参数表格 八、安装步骤 1、配置环境变量 2、生效环境变量 3、检验动态链接是否正常 九、运行效果 一、环境信息 名称值CPUInt…

Windows电脑向ipad和iOS系统共享文件夹

Windows电脑向ipad和iOS系统共享文件夹 这个方案不需要下载任何软件&#xff0c;但是要求 iOS 和 Windows 在同一个局域网内。再大的文件都可以在 iOS13 自带的的“文件App”里实时显示&#xff0c;可以直接打开。这个解决方案需要你 Windows 电脑上登陆了微软账号&#xff0c…

原生JavaScript实现 元素全屏与退出全屏效果

之前写过 前端screenfull实现界面全屏展示功能 突然发现自己犯傻了 其实元素js中就有全屏与取消全屏的方式 html代码如下 <!DOCTYPE html> <html> <head><title>全屏实验</title><style></style> </head> <body><d…

数据结构考试测试编程题

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…