FreeRTOS ~(七)互斥量 ~ (1/3)互斥量解决互斥缺陷

news2024/11/17 7:17:14

前情提要
FreeRTOS ~(四)同步互斥与通信 ~ (2/3)互斥的缺陷
FreeRTOS ~(五)队列的常规使用 ~ (2/5)队列解决互斥缺陷
FreeRTOS ~(六)信号量 ~ (2/3)信号量解决互斥缺陷
举例子说明:利用互斥量解决前述的"互斥的缺陷"问题

/*-----------------------------------------------------------*/
static SemaphoreHandle_t xSemUART;	/* 二值信号量的句柄/互斥量的句柄 */

void TaskGenericFunction(void * param)
{
	while (1)
	{
		/* 将二值信号量/互斥量置0,关闭串口使用权,
		   防止被Tick中断的时候,任务切换后,其他任务使用串口 */
		xSemaphoreTake(xSemUART, portMAX_DELAY);
		printf("%s\r\n", (char *)param);
		/* 将二值信号量置1/互斥量,激活串口使用权 */
		xSemaphoreGive(xSemUART);
		/* 每个Task使用完就将自己阻塞掉,否则自己就将一直独占串口使用权
		   详细的解释在 "FreeRTOS ~(五)队列的常规使用 ~ (2/5)队列解决互斥缺陷"
		   中有写. */
		vTaskDelay(1);
	}
}
/*-----------------------------------------------------------*/
int main( void )
{
	prvSetupHardware();
	
	#if  0
	/* 创建二值信号量 */
	xSemUART = xSemaphoreCreateBinary();
	/* 将二值信号量置1,激活串口使用权 */
	xSemaphoreGive(xSemUART);
	#else
	/* 创建互斥量 */
	xSemUART = xSemaphoreCreateMutex();
	#endif

	xTaskCreate(TaskGenericFunction, "Task3", 100, "Task 3 is running", 1, NULL);
	xTaskCreate(TaskGenericFunction, "Task4", 100, "Task 4 is running", 1, NULL);

	vTaskStartScheduler();
	return 0;
}

在这里插入图片描述

从上述代码就可以明确的知道:
互斥量就是特殊的二值信号量,除了创建时调用的API不同之外,take和give使用的都是信号量的函数;
对于这种常规使用,互斥量简化了一步,创建二值信号量之后,要先give一次;
而对于互斥量而言,这个give是在创建互斥量 xSemaphoreCreateMutex 这个函数内部就操作了的.
互斥量还有其他的用法,详见后续.

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

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

相关文章

Android Camera2 获取RAW数据

这边文章主要记录下在Android系统上,如何通过Camera2 API去拿到RAW数据,也是当个备忘。 平时我们拿实时预览数据,更多的是获取yuv数据。一般涉及到raw域算法在APP层实现的时候,我们才会用到获取raw数据。 APP上集成Raw算法的思路…

【CSDN新星计划】初阶牛C/C++赛道——顺序程序设计(运算符和表达式)

目录 🍉2.运算符和表达式 2.1 C运算符 2.2基本的算术运算符 2.3自增( )自减( - - )运算符 2.4算术表达式和运算符的优先级与结合性 2.运算符和表达式 2.1 C运算符 C语言提供了以下运算符: (1)算术…

印度反垄断机构偏袒亚马逊,谷歌对滥用安卓市场地位罚款提出质疑

根据路透社消息,谷歌指控印度反垄断机构在其安卓系统调查中对亚马逊持偏袒态度,并向印度最高法院提起诉讼,对其关于滥用安卓市场地位的罚款提出质疑。 印度竞争委员会(CCI)最近要求谷歌改变商业模式,称谷歌…

结合具体场景举例说明chatgpt预训练模型中Tokenization的原理

假设我们有一个场景,Alice想向Chatbot询问一部电影的推荐。她发送了一条消息:“你好,能给我推荐一部好看的电影吗?” 在这个场景中,Chatbot使用了ChatGPT预训练模型。首先,Chatbot需要对Alice的消息进行Tok…

【力扣周赛】第 108 场双周赛

文章目录 Q1:6913. 最长交替子序列思路竞赛时代码代码优化 Q2:6469. 重新放置石块思路竞赛时代码 Q3:6923. 将字符串分割为最少的美丽子字符串解法1—— dfs回溯 剪枝 判断解法2——动态规划 Q4:6928. 黑格子的数目代码优化 成绩…

Jenkins持续集成

文章目录 Jenkins介绍Jenkins的特征 Jenkins架构Gitlab安装1. Gitlab代码托管服务器安装2. Gitlab添加组、创建用户、创建项目 jenkins安装安装JenkinsJenkins插件管理Jenkins用户权限管理Jenkins凭证管理安装Git插件和Git工具设置SSH免密登录 Maven安装和配置JenkinsDockerspr…

【数据结构】栈和队列详解

⭐️ 往期相关文章 ✨链接1:数据结构和算法的概念以及时间复杂度空间复杂度详解 ✨链接2:【数据结构】手撕顺序表 ✨链接3:【数据结构】手撕单链表 ✨链接4:【数据结构】双向带头循环链表 ⭐️ 栈和队列 🌠 栈 栈是…

react-native项目手机预览

初始化项目 使用 expo 初始化 react-native 项目,https://reactnative.cn/docs/environment-setup 运行项目 执行 start 命令运行项目 拿起你的iPhone手机,安装 expo APP,https://expo.dev/client 或者到 APP store 搜索下载。下载完成之…

基于TCP协议的聊天系统TCP-ChatSystem

基于TCP协议的点对点聊天系统 网络协议:TCP 聊天形式:点对点 所用技术:socket、多路转接、线程池、互斥锁、条件变量、MFC等。 功能点:注册、登录、添加好友、聊天等。 实现示意图 客户端登陆注册消息流转图: 客…

【MATLAB第54期】基于LSTM长短期记忆网络的多输入多输出滑动窗口回归预测模型

【MATLAB第54期】基于LSTM长短期记忆网络的多输入多输出滑动窗口回归预测模型 往期第13期已实现多输入单输出滑动窗口回归预测 本次在此代码基础上,新增多输出滑动窗口功能。 多输入单输出滑动窗口回归预测 一、实现效果 往期文章提到了对单列时间序列数据进行滑…

spdlog入门教程(1)

spdlog入门教程(1) 文章目录 spdlog入门教程(1)1、前言1.1 为什么要使用日志库1.2 尽量使用通用日志框架而不要自己实现1.3 spdlog概述1.4 地址 2、源码编译配置spdlog3、在Qt中使用spdlog1.1 验证spdlog是否配置成功1.2 将日志输…

全网最牛,Pytest自动化测试-pytest.mark.parametrize参数化实战(详细)

目录:导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 pytest允许在多个…

删除数据库记录错误

删除数据库记录错误:Unexpected update count received (Actual: 2, Expected: 1). All changes will be rolled back. 解决:同时删掉ID为8的记录就行了 分析:这种情况是未设置主键约束,插入了相同的记录导致的。推测应该是框架对…

Clip-Path

前言 借助clip-path,我们可以实现一些复杂的animation动画效果,我们先来简单概述一下它的特性,如MDN所描述的。 The clip-path CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, whi…

基于aarch64分析kernel源码 一:环境搭建

一、测试环境 功能工具操作系统ubuntu 22.04编译工具gcc-12-aarch64-linux-gnu调试工具gdb-multiarch模拟器qemu 6.2.0busyboxbusybox-1.36.1kernellinux-6.4.1编辑器vscode 二、编译器 1、查找ubuntu仓库中aarch64编译器 lqlq-virtual-machine:~/my$ apt-cache search aar…

零矩阵

暴力解法:先全部检索,定位0所在的位置, 记录到新的数组 数组的行列分别进行去重 数组中记录的行列赋值为零 如果直接修改,在行被修改之后,修改列时会因为行已经被修改产生影响 import org.junit.Test;import java.uti…

tensorboard命令行使用方法

第一步:进入虚拟环境 conda activate 虚拟环境名称 第二步: tensorboard --logdir绝对地址 第三步:在浏览器输入提供的网址

day03 重新学python——python函数

文章目录 一、python函数1.函数介绍2.函数的定义3.函数的参数4.函数的返回值5.函数的说明文档6.函数的嵌套调用7.变量的作用域8.综合案例 一、python函数 1.函数介绍 函数:即组织好的、课重复利用,用来实现特殊功能的代码段,这样可以提高代码…

生产者消费者

前言 生产者消费者模式属于一种经典的多线程协作的模式,弄清生产者消费者问题能够让我们对于多线程编程有更深刻的理解,下面,为大家分享一个生产者消费者的案例。 一、案例描述 这里以快递为例,假设有一个快递柜,用来…

蚂蚁链发布零知识证明技术架构 可满足数据“隐私保护”、“可验证”双要求

7 月 8 日,在 2023WAIC 全球区块链产业高峰论坛上,蚂蚁链宣布隐私协作平台 AntChain FAIR 进行全新架构升级,引入零知识证明(ZKP)为核心的可验证计算技术,从可信数据流转拓展到计算过程、数据属性以及身份的…