FreeRTOS ~(六)信号量 ~ (2/3)信号量解决互斥缺陷

news2024/11/17 11:45:56

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

/*-----------------------------------------------------------*/
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();
	
	/* 创建二值信号量 */
	xSemUART = xSemaphoreCreateBinary();
	/* 将二值信号量置1,激活串口使用权 */
	xSemaphoreGive(xSemUART);

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

	vTaskStartScheduler();
	return 0;
}

在这里插入图片描述

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

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

相关文章

SQL Server数据库 -- 表的高级查询

文章目录 一、子查询 嵌套子查询相关子查询二、查询运算 并运算union交运算intersect差运算except三、函数的使用 if语句while语句case语句四、总结 前言 高级子查询是对查询更灵活的运用,学会了高级查询将对数据库使用有很大的帮助。 一、子查询 1、子查询简介 在…

MATLAB画等深度构造图

clc;clear;close all; data xlsread(J_UNCONFORMITY等深度.xlsx); x data(:,1) xmax max(x); xmin min(x); y data(:,2) ymax max(y); ymin min(y); z data(:,3); N 45…

天天刷题-->LeetCode(两数相加)

个人名片: 🐅作者简介:一名大二在校生,热爱生活,爱好敲码! \ 💅个人主页 🥇:holy-wangle ➡系列内容: 🖼️ tkinter前端窗口界面创建与优化 &…

MachineLearningWu_7+8_LogisticRegression/Classification

x.1 logistic regression 对于诸如分辨细胞是恶性肿瘤细胞与否的类似分类问题,我们使用Linear Regression的模型并不合适,所以引入Logistic Regression的模型,并绘制decision boundary,如下, Classification的最后一层…

mysql多表查询内连接,左外连接,排序,having

多表连接查询 use mydb3; -- 创建部门表 create table if not exists dept3(deptno varchar(20) primary key , -- 部门号name varchar(20) -- 部门名字 );– 创建员工表 create table if not exists emp3(eid varchar(20) primary key , -- 员工编号ename varchar(20), -- 员…

python接口自动化(二十二)--unittest执行顺序隐藏的坑(详解)

简介 大多数的初学者在使用 unittest 框架时候,不清楚用例的执行顺序到底是怎样的。对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行。虽然或许通过代码实现了,也是稀里糊涂的一知半解,这样还好&am…

基于深度学习的高精度Caltech行人检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度Caltech数据集行人检测识别系统可用于日常生活中或野外来检测与定位行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的行人目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv…

部署HAproxy + Nginx负载均衡集群

目录 一、常规Web集群调度器 HAproxy概念(主要特性) HAproxy负载均衡八种策略 二、LVS、Nginx、HAproxy区别 Nginx服务 LVS服务 HAproxy服务 三、部署HAproxy Nginx负载均衡集群 第一步 关闭防火墙和安全机制 第二步 安装依赖环境 第三步 导…

基于paddelOCR的车票识别以及在PCB板上应用

基于paddelOCR的车票识别 任务简介 车牌识别就是从图片或者视频中提取车牌信息 任务难点 尺度差异大,悬挂位置不固定;角度倾斜,图片模糊,光照不足,过曝等问题;边缘和端测场景应用对模型大小有限制&#…

C++之装饰器适配器模式

目录 一、装饰器模式 模式思想 模式简介 模式优点 模式缺点 代码实现 情景模拟 代码实现 运行结果 二、适配器模式 模式简介 介绍 优点 缺点 代码实现 情景模拟 一、装饰器模式 模式思想 模式简介 装饰器模式(Decorator Pattern)允许向…

前端基础(三十六):读取本地音视频设备并进行播放

效果 navigator.mediaDevices.enumerateDevices 请求媒体输入和输出设备的列表,例如麦克风,摄像机,耳机设备等 navigator.mediaDevices.getUserMedia 会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream&#xff0c…

伺服系统行业发展

伺服系统行业发展 1 介绍1.1 概述1.2 一般应用1.3 分类按系统功率分类按动力来源分类 1.4 工业控制中的伺服系统1.5 数字信号驱动与模拟信号驱动对比1.6 发展历史 2 伺服系统厂家工业机械臂移动AMR 3 关键指标及难点4 三相交流逆变器(直流电转换为交流电&#xff09…

创建 Code Interpreter Demo: 一次实践的探索

好消息,好消息,Code Interpreter可以测试使用了!!! 在这篇文章中,我们将探索如何创建一个 Code Interpreter Demo。提交一个2023年1-5月份的融资记录数据,让它来帮我们分析一下这些数据。 执行…

TCP 重传机制 滑动窗口 流量控制 拥塞控制 学习总结!

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 这篇博客主要记录 tcp 的基础知识的学习总结相关内容!备注:图片均来自作者:小林哥 tcp 的三大特性 tcp 大家都不陌生&#xff0c…

Python制作gif表情包生成工具,斗图再也不会输啦

在当前无表情包不会聊天的时代,怎么也不能输在表情包数量不足上啊,今天咱们就来制作一个 gif 生成工具,用来制作表情包也太好用啦 先来看看整体效果 技术交流 技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人…

如何解决PostgreSQL执行语句长时间卡着不动,不报错也不执行的问题?

1 问题现象 执行SQL语句,卡着不动,不成功也不执行,就像挂住了一样。 truncate table simple; 2 原因分析 一般来说,语句呈现卡着的状态,主要会是两种原因比较多, 原因1:SQL语句是一个耗时操…

Java8新特性——lambda表达式、函数式接口、方法引用、Stream API与Optional类

目录 一、lambda表达式 (一)lambda相关概念 (二)lambda示例 (三)lambda用法 1.语法格式一:无参,无返回值 2.语法格式二:有参数,无返回值 3.数据类型可以省略,因为可由编译器推断得出,称为”类型推断…

统计数据记录

分红20% 分红22% 分红25%

手把手教大家实现 npm 包,并发布 npm 仓库,搭建文档(二)

昨天写了第一篇文章,反响平平 一个 NPM 包,帮助数十万程序员提高数十倍效率,难道不开源出来?(一) 首先贴下我们的官网 【预览页】 https://kennana.github.io/toolkit-use/ 我们的推特 【toolkituse】 https://twitter.com/Toolkituse 我们的github 【toolkit-u…

实现一个周选择器组件

1、需求: 默认每个月的第一个周一为该月的第一周开始,规则如图所示 2、使用到的工具: vue2vant2momentjs 3、父组件: data中定义涉及到的参数 minDate: new Date(this.$moment().subtract(12,month)) maxDate: new Date(),…