stm32cubemx hal学习记录:FreeRTOS互斥量

news2024/11/27 0:40:46

一、互斥量

1、互斥量用于互锁,可以充当资源保护的令牌,当一个任务希望访问某个资源时,它必须先获取令牌,当任务使用完资源后,必须返还令牌,以便其他任务可以访问该资源。

2、互斥量一般用于临界资源保护。

3、用互斥量处理不同任务队临界资源的同步访问时,任务想要获取互斥量才能进行资源访问,如果一旦有任务成功获得了互斥量,则互斥量立即变为闭锁状态,此时其他任务会因为获取不到互斥量而不能访问这个资源,任务会根据用户自定义的等待时间进行等待,直到互斥量被持有的任务释放后,其他任务才能获取互斥量从而得到访问该临界资源,此时互斥量再次上锁,如此一来就可以确保每个时刻只有一个任务正在访问这个临界资源,保证了临界资源操作的安全性。

4、互斥量与递归互斥量

互斥量更适合于可能会引起优先级翻转的情况

递归互斥量更适用于任务可能会多次获取互斥量的情况下,这样可以避免同一任务多次递归持有而造成死锁的问题。

二、基本配置

1、配置RCC、USART1、时钟84M

2、配置SYS,将Timebase Source修改为除滴答定时器外的其他定时器。

3、初始化LED的两个引脚、两个按键引脚

4、开启FreeRTOS,v1与v2版本不同,一般选用v1即可

5、开启一个互斥量

 6、创建两个线程

 7、生成代码

三、API

1、创建一个互斥量:osMutexCreate

osMutexId myMutex01Handle;

osMutexDef(myMutex01);
myMutex01Handle = osMutexCreate(osMutex(myMutex01));

2、创建一个递归互斥量:osRecursiveMutexCreate

需要使此处ENABLE

 3、删除一个互斥量:osMutexDelete

osMutexDelete(myMutex01Handle)

4、获取互斥量:osMutexWait

5、获取递归互斥量:osRecursiveMutexWait

6、释放互斥量: osMutexRelease

7、释放递归互斥量:osRecursiveMutexRelease

四、使用方式

加入我们两个线程都使用printf进行打印函数,如果同时打印可能导致资源抢夺,此时我们可以使用互斥量,将两个线程中打印的东西轮流进行打印,此时就不会出现资源抢夺问题。

	if(osMutexWait(myMutex01Handle,osWaitForever)==osOK)
	{
		printf("2");
		printf("3");
		printf("4");

		osMutexRelease(myMutex01Handle);
	}
	if(osMutexWait(myMutex01Handle,osWaitForever)==osOK)
	{
		printf("5");
		osMutexRelease(myMutex01Handle);
	}


 

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

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

相关文章

[附源码]计算机毕业设计JAVA教师档案管理系统

[附源码]计算机毕业设计JAVA教师档案管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

LabVIEW通信-CAN

文章目录CANcan总线特点位定位与同步标识符检验滤波报文传输类型CAN CAN属于OSI的物理层与数据链路层 can总线特点 网络各节点之间的数据通信实时性强 开发周期短 结构简单(只有两根线与外部相连,内部继承了错误探测和管理模块) 数据通信没…

Spring IOC

一、为什么要使用Spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 为…

RPA案例|云扩助力保险行业开启超自动化运营新阶段

近五年,全球平均保险深度总体呈小幅平稳下降趋势,2021年中国保险深度为4.15%,全球平均保险深度为5.96%,而美国、英国等发达国家的保险深度则保持在10%以上,中国保险深度仍然具有很大的上升空间。 为进一步拓展增量空间…

软考是什么?---2023年软考最全解析

软考是什么? 软考全称为:计算机技术与软件专业技术资格(水平)考试,发证机构为国家人力资源和社会保障部、工业和信息化部,简称为:人社部和工信部。中日韩三国互认,证书的含金量很高…

Navicat操作数据库与Mysql常见命令操作实战

一:Navicat下载与安装 官网下载链接:Navicat 下载完后直接安装即可 二:数据库的连接 1.打开Navicat软件,点击左上角连接按钮,选择mysql数据库 输入完成后双击连接名,连接成功后,小海豚变绿色 …

Advances in Graph Neural Networks笔记5:Dynamic Graph Neural Networks

诸神缄默不语-个人CSDN博文目录 本书网址:https://link.springer.com/book/10.1007/978-3-031-16174-2 本文是本书第五章的笔记。 懒得看了!反正我也不是做这个的。以后要是真的去做动态图了也不是没资源找,这个我懒得看了,就写一…

CentOS 7安装Redis+Springboot整合Redis

1、虚拟环境条件: 已安装VMwareVMware Tools 使用的是视图界面并配置了基本开发环境,参照超详细VMware安装CentOs图文教程_Sq夏颜的博客-CSDN博客 2、直接把已经下载好的redis安装包拖进来,下载地址:CRUG网站 3、解压 tar -zxv…

美国fba海运清关基本流程

美国fba海运清关是美国物流运输的重要组成部分,准备好清关材料和正确流程是确保货物安全快速进口到美国的关键。虽然很多客户会选择双清包税的方式,但是当跨境电商越来越大的时候,双清包税的成本也会相应增加。选择自税不包清关,按…

react配置项目路径别名@

为什么有的项目引入路径写可以,自己的不行呢? 因为别人的项目是配置过路径别名的,就表示src目录,因此我们也需要配置一遍,以下是react项目示范,vue项目同理。 ts对指向src目录的提示是不支持的&#xff0…

Linux命令学习之原来最简单的ls命令这么复杂

ls命令的使用格式如下 ls [选项] [具体的文件] # [] 表示可选 直接在命令行输入ls将当前目录下的列出当前目录下的文件和目录。 1 2 $ls LICENSE README.md hello.c 也可以指定具体的目录和文件 1 2 3 $ls / bin dev home lib32 libx32 mnt proc run srv tmp …

Kotlin 基础学习笔记第七章——运算符重载及其他约定

如你所知,java在标准库中有一些与特定的类相关联的语言特性。例如,实现java.lang.Iterable接口的对象可以在for循环中使用;实现了java.lang.AutoCloseable接口的对象可以在try-with-resource语句中使用。 一、重载算术运算符 1、重载二元运算…

IIC的使用

借鉴于:蓝桥杯嵌入式快速通关篇,IIC通讯及EEPROM_穿上我的格子衫的博客-CSDN博客 IIC原理超详细讲解---值得一看_Z小旋的博客-CSDN博客_iic 总线空闲:SDA 1,SCL 1; 启动信号:SCL 1,SDA 1 -> 0; 停止信号:SCL …

【王道计算机网络笔记】物理层-通信基础

文章目录物理层接口特性典型的数据通信模型数据通信相关术语三种通信方式(交互方式)串行传输&并行传输(数据传输方式)同步传输&异步传输码元速率带宽失真失真的一种现象——码间串扰奈氏准则(奈奎斯特定理&…

矩阵股份上市首日跌破发行价:振幅达10%,王冠为实际控制人

11月22日,矩阵纵横设计股份有限公司(下称“矩阵股份”,SZ:301365)在深圳证券交易所创业板上市。本次上市,矩阵股份的发行价为34.72元/股,发行数量为3000万股,募资总额约为10.42亿元,…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.15 SpringBoot 整合 task

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.15 SpringBoot 整合 task5.15.1 SpringBoot 整合 …

对zygote的理解

一、 zygote的作用 启动SystemServer SystemServer需要用于zygote准备好的一些系统资源,比如常用类、注册的JNI函数、主题资源、共享库等等,直接从zygote那继承过来,SystemServer就不用重新再加载一遍,这样对性能有很大的提升。 …

CRM系统中联系人管理的十大好处

联系人管理通常是你的CRM策略中的一个关键部分。它是存储和组织联系人数据以便于访问的做法。简而言之,就是管理联系人数据的过程。如今联系人管理已内置到 CRM 系统中。因此,我们可以考虑利用系统软件将以下优点应用于联系人管理中。 1、更好、更持久的…

Matplotlib用法使用、Matplotlib绘图作图画图

一、Matplotlib Matplotlib:专门用于开发2D或3D图表,以渐进、交互式方式实现数据可视化 可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法 能将数据进行可视化,更直观的呈现使数据…

希望所有计算机学生能看到这篇c语言教程

大部分程序员走入编程世界第一个学习的语言就是C语言。 作为一门古老的编程语言,c语言拥有48年的发展历程。 为什么要学习 C语言? C语言是学习计算机程序设计语言的入门语言。C语言是一门偏底层的语言,学好它,可以让你更好的了…