FreeRTOS 互斥信号量和二值信号量对比

二值信号量(Binary Semaphore)和互斥量(Mutex)的解析 二值信号量(Binary Semaphore):二值信号量是一种特殊的信号量,其状态只有两种:可用(通常表示为1)和不可用(通常表示为0)。它主要用于任务间的同步和简单的互斥访问。二值信号量可以看作是长度为1的队列,队列要么为空(信号量为0),要么为满(信号量为1)。互斥量(Mutex):互斥量是一种用于确保在任何时刻只有一个线程能够访问共享资源的机制。互斥量也是二进制的,但相比二值信号量,它增加了“持有权”的概念,即只有当前持有互斥量的任务才能释放它。这使得互斥量在保护共享资源时更加严格和可靠。 阅读详情

互斥信号量

1.有优先级继承。

2.尽量不要在中断中调用

3.xSemaphoreCreateMutex创建后,可以直接take使用。

二值信号量

1.无优先级继承。

2.允许在中断中调用。

3.可以当做标志位来使用。

4.xSemaphoreCreateBinary创建后,必须得先give一下才能被take。

这么说其实很笼统,直接代码测试。

这里使用的是互斥信号量。

1.创建两个测试任务,app_mqtt_get_properties_handle_task和app_mqtt_set_properties_handle_task

2.两个任务内容

这两个任务其实没做什么动作。就是在take give 然后就挂起等待。

任务1:take,等待200ms,give ,等待200ms。

任务2:take,等待1000ms,give,等待200ms。

理论上来说任何一个任务take了之后,另外一个任务就无法take,必须等待give之后。直接上输出结果。

freertos 创建互斥量_嵌入式系统FreeRTOS — 互斥信号量 1 、互 斥 信 号 量1.1 互斥信号量的概念及其作用互斥信号量的主要作用是对资源实现互斥访问,使用二值信号量也可以实现互斥访问的功能,不过互斥信号量与二值信号量有区别。下面我们先举一个通过二值信号量实现资源独享,即互斥访问的例子,让大家有一个形象的认识,进而引出要讲解的互斥信号量。运行条件:  让两个任务 Task1 和 Task2 都运行串口打印函数 printf,这里我们就通过二... 阅读详情

相关推荐

FreeRTOS(实时操作系统)

防止多个任务同时访问同一共享资源(如全局变量、硬件外设等),避免数据混乱或操作冲突。

XUPTwlwzxl的博客 1721

详解FreeRTOS:嵌入式多任务系统的优先级继承和优先级天花板(理论篇—10)

为了避免因为中优先级任务挟持低优先级任务从而阻塞高优先级任务的现象,可以采用优先级继承和优先级天花板算法。

不脱发的程序猿 2975

FreeRTOS 互斥信号量 (Mutex) 详细介绍

本文详细介绍了FreeRTOS中的互斥信号量(Mutex)机制,重点阐述了其核心特性、与二值信号量的区别、主要API函数及使用示例。互斥信号量主要用于保护共享资源,具有所有权和优先级继承两大关键特性,能有效避免竞态条件和优先级反转问题。文章通过代码示例展示了如何正确使用互斥信号量保护共享变量,并强调了注意事项:及时释放信号量、避免在中断中获取、性能考量等。正确使用互斥信号量可确保多任务环境下共享资源访问的安全性和数据一致性。

MHD0815的博客 104

latex使用overleaf插入多行图片

对于一般的latex模板,可以使用下面方式: (1)现在模板最前面的加入包 \usepackage{graphicx} \usepackage{subfigure} (2) 使用下面代码插入图片 \begin{figure}[htbp] \centering \subfigure[pic1.]{ \includegraphics[width=5.5cm]{pic1.png} } \quad \subfigure[pic2.]{ \includegraphics[width=5.5cm]{pic

Look Forward To 1万+

Unity 调用安卓内部安装apk

一、申请权限 应用内安装其他应用的权限属于特殊权限,需要在特殊申请。 Uri packageURI = Uri.parse("package:" + mContext.getPackageName()); Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); startA...

BDDNH的博客 1226

Eplan2022 复制已有的宏文件生成新的原理图宏文件

Eplan2022 新建原理图宏文件

haier123888的博客 1万+

RFSOC实战解析(一):深入RF Data Converter的时钟与数据接口设计

本文深入解析RFSOC中RF Data Converter的时钟与数据接口设计,涵盖GHz采样、数据流处理、时钟树同步及AXI-Stream接口实战。通过详细案例和调试技巧,帮助工程师高效配置IP核,优化ADC/DAC性能,解决跨时钟域和信号完整性等关键问题。

weixin_30955617的博客 466

一生一芯——用RTL实现最简单的处理器NPC(南大数逻计组RV32ICPU) 代码及思考参考

本文介绍自己前期用Verilog编写的基于RV32I指令集的CPU,个人认为是最简单最易懂的版本(即没做什么优化,即代码很水,没有考虑一些奇怪的情况,只适用简单指令序列,即题目所示最简单的处理器),适合新手练手Verilog以及了解简单CPU的运行过程。本文基于一生一芯,利用Verilator进行仿真,并用gtkwave查看波形,不了解verilator和gtkwave的可以看前几篇文章。

long0_o的博客 3293

46、大数据助力SDN优化流量管理与控制器

本文探讨了大数据在软件定义网络(SDN)中的应用,重点分析了如何利用大数据技术优化SDN控制器的可扩展性和弹性。通过介绍SDN控制器的核心功能及其面临的挑战,提出了集中式、分布式、混合式和分层式控制器放置策略,并结合大数据分析系统架构与技术,详细阐述了在控制器放置优化、流聚合和备份路径识别等场景中的实际应用。文章还给出了大数据分析在SDN控制器优化中的操作流程与优势,展望了未来结合人工智能与物联网的发展方向,强调了数据安全与算法效率的重要性。

xx56789的博客 78

使用C#实现的多人语音视频系统:WebSocket与WebRTC集成

通过上述的代码示例,我们可以使用C#编写一个多人语音视频系统,该系统集成了WebSocket和WebRTC技术。当然,这只是一个简单的示例,实际的多人语音视频系统可能需要更多的功能和优化。通过结合这两种技术,我们可以实现实时的语音和视频通信,支持多人同时参与。在上述代码中,我们创建了一个WebSocket服务器,监听在本地的8080端口,并创建了一个WebRTC连接。接下来,我们将详细介绍如何使用C#编写一个多人语音视频系统,包括使用WebSocket建立连接和使用WebRTC进行实时通信。

TjsReact的博客 1627

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: VMWARE安装VM TOOLS后依旧无法拖拉文件的解决方法
下一篇: 蓝牙Mesh学习总结一(蓝牙Mesh介绍)
t_guest
博客等级 码龄12年 1万+粉丝 155原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

t_guest

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

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

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

打赏作者

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

抵扣说明:

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

余额充值