FreeRTOS,互斥量 (Mutex)

1. 信号量 (Semaphore)

通俗理解:信号量就像停车场的空位计数器。当有车进入时,计数器减1;当有车离开时,计数器加1。如果计数器为0,新车必须等待直到有空位。

#include "FreeRTOS.h"
#include "semphr.h"// 声明一个互斥量句柄
SemaphoreHandle_t xMutex;// 共享资源(就像卫生间)
int sharedResource = 0;// 任务1:访问共享资源
void vTask1(void *pvParameters) {while(1) {// 获取互斥量(拿到卫生间钥匙)if(xSemaphoreTake(xMutex, portMAX_DELAY) == pdTRUE) {printf("任务1拿到了互斥量,开始访问共享资源\n");// 访问共享资源(使用卫生间)sharedResource++;printf("任务1: sharedResource = %d\n", sharedResource);vTaskDelay(pdMS_TO_TICKS(1000)); // 模拟使用资源的时间// 释放互斥量(归还卫生间钥匙)xSemaphoreGive(xMutex);printf("任务1释放了互斥量\n");}vTaskDelay(pdMS_TO_TICKS(500)); // 等待一段时间再次尝试}
}// 任务2:也访问相同的共享资源
void vTask2(void *pvParameters) {while(1) {// 获取互斥量(尝试拿到卫生间钥匙)if(xSemaphoreTake(xMutex, portMAX_DELAY) == pdTRUE) {printf("任务2拿到了互斥量,开始访问共享资源\n");// 访问共享资源(使用卫生间)sharedResource--;printf("任务2: sharedResource = %d\n", sharedResource);vTaskDelay(pdMS_TO_TICKS(800)); // 模拟使用资源的时间// 释放互斥量(归还卫生间钥匙)xSemaphoreGive(xMutex);printf("任务2释放了互斥量\n");}vTaskDelay(pdMS_TO_TICKS(500)); // 等待一段时间再次尝试}
}void main() {// 创建互斥量xMutex = xSemaphoreCreateMutex();// 创建两个任务xTaskCreate(vTask1, "Task1", 1000, NULL, 1, NULL);xTaskCreate(vTask2, "Task2", 1000, NULL, 1, NULL);// 启动调度器vTaskStartScheduler();
}

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

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

相关文章

SQL查询-设置局部变量(PostgreSQL、MySQL)

😋博主在工作中编写复杂SQL语句时,经常需要替换查询值进行测试。所以需要用到局部变量设置,可以减轻测试时的压力。 目录使用场景1.常规写法2.局部变量写法(1)PostgreSQL示例注意事项(2)MySQL示…

2962 统计最大元素出现至少k次的子数组

2962 统计最大元素出现至少k次的子数组 文章目录2962 统计最大元素出现至少k次的子数组1 题目2 解答1 题目 给你一个整数数组 nums 和一个 正整数 k 。 请你统计有多少满足 「 nums 中的 最大 元素」至少出现 k 次的子数组,并返回满足这一条件的子数组的数目。 子…

【Java SE】基于多态与接口实现图书管理系统:从设计到编码全解析

文章目录一、系统整体设计:分层与职责划分系统模块结构二、核心模块详解:从数据到功能1. Book包:数据封装1.1 Book类:图书实体1.2 BookList类:书架管理2. User包:多态的核心体现2.1 User抽象类:…

ESP32-WSL开发环境搭建过程中遇到的问题及解决方案

文章目录 应用场景: 问题1描述: 原因分析: 解决方案: 先检查 ESP-IDF 工具链是否安装完整 设定工具路径变量一切正常: 执行重新运行安装脚本后又报错: 原因分析 解决方法: 第一步:安装python3.10-venv包(核心修复) 第二步:重新执行 ESP-IDF 安装脚本,重建虚拟环境 安…

SwiftUI 三阵诀:杨过绝情谷悟 “视图布阵” 之道

📜 引子:绝情谷困境,三阵待辨 绝情谷外,瘴气弥漫。杨过手握玄铁剑(喻 Xcode),凝视谷中涌动的万千 “毒物”(喻待渲染的视图元素),眉头紧锁。 此前他试过硬闯…

以楼宇自控系统为核心,整合多维度技术,打造智能建筑解决方案

在数字化浪潮席卷建筑行业的当下,“智能建筑” 已从概念走向大规模落地,其核心诉求不再是单一设备的智能化,而是建筑整体的 “感知、分析、决策、执行” 闭环能力。传统智能建筑常陷入 “技术堆砌” 困境 —— 暖通、安防、照明等系统各自为政…

阿里云服务器 篇一(加更):设置二级域名通配符证书

文章目录 样例网站 系列文章 域名注册 为单个域名添加SSL证书 申请 通配符域名 + 根域名 证书 已申请通配符证书,补申请一个根域名证书 更改Nginx配置,统一使用通配符域名证书 替换所有https服务的证书为通配符证书 统一处理http请求跳转https服务 对所有未定义二级域名的统一…

汽车电子工厂静电腕带监控仪双回路设计降低设备采购成本

在汽车电子制造中,静电放电(ESD)风险贯穿从PCB焊接、元件装配到成品测试的全流程。在新能源汽车零部件产线中需处理大量精密电子组件,静电隐患导致的典型问题包括:元件损伤:ESD瞬时电压可能击穿芯片或导致焊…

Linux操作系统—进程

进程(process):(1)进程的定义:正在进行的程序,会去分配内存资源(mem),cpu的调度 ,(flash ssd:固态硬盘)目的:为了实现并发,同一时刻执行多任务&am…

win11的WSL安装CentOS9-Stream,并且安装docker,使用第三方工具连接linux

前面写了一个安装centos8的文章,但是发现centos8有很多限制,很多东西不能用,于是果断放弃 一、打开windows的虚拟机功能 自行百度 二、下载CentOS9-Stream系统 1、下载 地址:https://github.com/mishamosher/CentOS-WSL 请下…

TypeScript实战:轻松实现数字序号转中文大写数字

在前端开发中,我们经常会遇到【将数字序号转换为中文大写数字】的需求——比如表单步骤条显示“第一步”而非“第1步”、文章章节标题用“三”代替 “3”等。今天就带大家拆解这个常见需求的实现思路,用TypeScript写出简洁又安全的转换函数。 一、需求明…

【C++游记】栈vs队列vs优先级队列

枫の个人主页 你不能改变过去,但你可以改变未来 算法/C/数据结构/C Hello,这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕,我们继续来学习C的内容呀。C是接近底层有比较经典的语言,因此学习起来注定枯燥无味&#xf…

2025年网络安全技能竞赛“观安杯”管理运维赛 WEB/PWN WP

blindpwn寻找漏洞点上来先看到让输入的有长度和数据,其他先不管,测试一下长度,发现最大为16然后blind pwn一般的话有栈溢出和格式化字符串两种,这里先测试一下格式化字符串然后就会发现啥也没有,但是会发现一些事情有一…

Linux 打包及压缩基础知识总结

一、gz 包1、常用命令命令格式:压缩:gzip [option] filename解压:gunzip [option] filename 常用选项:-c : 将压缩数据输出到标准输出中,并保留原文件-d : 解压缩,相当于gunzip-f : …

FOC算法第三节 等幅值变换与克拉克逆变换

FOC的过程其实就是输入需求的电机力矩,把需求的电机力矩转化为三相线电压输出,并且让电机物理输出你所需求的力矩的过程,这也被称为电机控制三环中的力矩环,所有后面的位置闭环和速度闭环都得基于这个力矩环,而这个力矩…

解析蛋白质三维结构-Bio3D R包

最近休息时阅读了一本书: 在书本第5章结构信息学章节的末尾,看到了一个练习题,张贴如下: 这里作者提到了一个R包, 看着挺有意思的,所以就决定小学一下,毕竟这年头搞分子动力学起码是python重火…

【开发便利】让远程Linux服务器能够访问内网git仓库

打通网络壁垒:本地Windows直连内网Git的远程开发终极指南 场景痛点 开发主力是一台云端的 Linux 服务器,代码却存放在无法被公网访问的公司内网 Git 仓库中。 本文利用 Windows 电脑作为“网络桥梁”,搭建一条能自动重连的 SSH 隧道&#xff…

STM32学习日记

ADCADC简介ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间输入电压范围:0~3.3V,转换结果范围&#xff…

文生3D实战:用[灵龙AI API]玩转AI 3D模型 – 第7篇

在前几篇文章中,我们已经体验了文生视频、图生视频、文生图、图生图、AI翻唱 等功能。本篇将进入更高阶的领域 —— 文生3D。借助 [灵龙AI API],你不仅能生成静态的 3D模型,还可以快速产出 场景、角色、动画,为游戏开发、虚拟人、…

林粒粒视频笔记4-numpy

需要先安装2个库,一个是代码运行平台:pip3 install notebook还有一个numpy:pip3 install numpy1、在cmd运行环境>>jupyter notebook,浏览器自动打开页面如下:2、创建一个一维数组和二维数据3、分别打印这2个数组…