【FreeRTOS】信号量

news2024/9/28 11:16:21

0 前言

学习视频:
【FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOS(FreeRTOS教程 基于STM32,以实际项目为导向)】 【精准空降到 00:42】 https://www.bilibili.com/video/BV1Jw411i7Fz/?p=39&share_source=copy_web&vd_source=8af85e60c2df9af1f0fd23935753a933&t=42

参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》


前面介绍的队列(queue)可以用于传输数据:在任务之间任务和中断之间

消息队列用于传输多个数据,但是有时候我们只需要传递状态,这个状态值需要用一个数值表示,比如:

  • 卖家:做好了1个包子!做好了2个包子!做好了3个包子!
  • 买家:买了1个包子,包子数量减1
  • 这个停车位我占了,停车位减1
  • 我开车走了,停车位加1

在这种情况下我们只需要维护一个数值,使用信号量效率更高、更节省内存 本章涉及如下内容:

  • 怎么创建、删除信号量
  • 怎么发送、获得信号量
  • 什么是计数型信号量?什么是二进制信号量?

1 信号量的本质

信号量本质是一个队列,不涉及队列的真正传输,只涉及里面数据个数的统计,数据个数的加加减减

实际使用场景:

在这里插入图片描述

这样的3辆汽车想进城,进城需要,这个就是信号量,有多少张票就是这个量。

想进城,先买票

  • 有票,票–,可进城
  • 无票,可以等待,或者不等待。

在这里插入图片描述

买票叫做take==,放票叫做give

在这里插入图片描述

信号量是一个特殊的队列,在使用信号量的时候不涉及队列的真正传输,只涉及里面数据个数的统计,数据个数的加加减减

在这里插入图片描述

对比一下

队列信号量
len (队列深度、长度)max-cnt(最大计数值)
R(读位置)R(读位置)
W (写位置)W(写位置)
cnt(计数值)cnt
sender_list(发送者链表)sender_list(发送者链表)
receiver_list(接收者链表)receiver_list (接收者链表)
环形buffer(保存数据的位置)环形buffer不传输数据
写队列(Send放票(Give)
读队列(Receive)放票(Take)

写队列

  1. 写入数据(拷贝数据)
  2. CNT值++
  3. 唤醒等待读数据的一方

读队列

  1. 写入数据(拷贝数据)
  2. CNT值–
  3. 唤醒等待写数据的一方

Give操作

  1. CNT++
  2. 唤醒等待的一方

Take操作
无票 >>> 阻塞
有票

  1. CNT–
  2. 唤醒等待的一方

在这里插入图片描述

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

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

相关文章

源2.0-M32大模型发布4bit/8bit量化版! 运行显存仅需23GB,性能可媲美LLaMA3

近日,浪潮信息发布源2.0-M32大模型4bit和8bit量化版,性能比肩700亿参数的LLaMA3开源大模型。4bit量化版推理运行显存仅需23.27GB,处理每token所需算力约为1.9 GFLOPs,算力消耗仅为同等当量大模型LLaMA3-70B的1/80。而LLaMA3-70B运…

删除Eureka注册中心已经注册的服务

1.登录Eureka查看需要删除的服务。 2.使用postman或者apipost工具,请求方式DELETE, 接口地址输入:eureka的ip地址/eureka/apps/ Application / Status 例如: http://192.168.194.60:8761/eureka/apps/VUE-MANAGER-SERVICE/10.42.0.138:vue-manager…

酷家乐 同盾滑块分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间头像私信联系我…

【Hot100】LeetCode—114. 二叉树展开为链表

目录 1- 思路技巧——借助指针 2- 实现⭐114. 二叉树展开为链表——题解思路 3- ACM 实现 原题连接:114. 二叉树展开为链表 1- 思路 技巧——借助指针 思路:通过 ① 将左子树的右下结点的 .next ——> 拼接到当前节点的右子树上。 构造 cur 指针&a…

KPaaS还是ESB?怎样选择合适的集成方案?

在全球经济一体化和数字化转型的背景下,企业正面临着前所未有的挑战与机遇。随着业务的快速发展,企业内部的信息系统日益复杂,系统间的信息孤岛、系统割裂以及高昂的维护成本等问题逐渐凸显,严重制约了企业的创新能力和市场竞争力…

Live800:以数据驱动的客户服务优化,精准洞察,超越期待

在当今这个数字化时代,企业之间的竞争已不仅仅局限于产品本身的质量与功能,更在于如何通过卓越的客户服务体验来赢得客户的忠诚与信赖。数据,作为这一转型过程中的核心驱动力,正引领着客户服务向更加精准、高效、个性化的方向迈进…

3ds Max - 导出顶点色模型

很久之前的笔记,整理归档; 在3ds Max中,给模型添加VetexPaint修改器后,可以给模型(顶点色通道R\G\B默认值为255\255\255)刷不同颜色的顶点色(默认为黑色,即让RGB通道都为0&#xff0…

最新SD换脸插件ReActor,视频换脸全流程!流畅丝滑!(附插件及安装报错说明)

在今天,我给大家继续分享一个使用“ReActor”插件来进行视频换脸的案例。 视频换脸的思路其实也很简单,其实就是把视频的每一帧都提取出来,然后把每一帧的图片都进行换脸,最后重新把这些图片重新合成一个视频。 废话不多说&…

下载bison操作步骤

bison官网链接 bison-3.8.2官网源代码下载链接 选择下载版本

strchr 和 strrchr

char *strchr(const char *s, int c); 在 s 中查找第一次出现字符c的位置,返回指向找到的位置,找不到返回null。 char *strrchr(const char *s, int c); 在 s 中查找最后一次出现字符c的位置,返回指向找到的位置,找不到返回null。…

用Python插入SVG到PDF文档

将SVG(可缩放矢量图形)文件插入到PDF(便携式文档格式)文件中不仅能够保留SVG图像的矢量特性,确保图像在任何分辨率下都保持清晰,还能够充分利用PDF格式在跨平台文档分享方面的优势,使得技术文档…

解决 mfc140.dll 文件丢失的问题,5种mfc140.dll解决方法

当您尝试启动一个用 Microsoft Visual Studio 2015 开发的 Windows 应用程序时,如果出现“无法找到 mfc140.dll 文件”的错误,请不要紧张。这类问题通常由DLL文件缺失、损坏或未正确安装引起。好消息是,存在多种解决方案可以帮助您解决这一挑…

打卡学习Python爬虫第五天|Xpath解析的使用

什么是Xpath?是在XML文档中搜索内容的一门语言,HTML可以看作是xml的一个子集。 目录 1、安装lxml模块 2、导入lxml中的etree子模块 3、Xpath使用方法 3.1.选择节点 3.2.选择属性 3.3.选择文本内容 3.4.使用通配符*过滤节点 3.5.使用中括号[]索引…

半个小时写一个自动发朋友圈的工具

最近一直在完善我的手控达人系统,解决了很多难题。白天没事时想思路,晚上写代码验证。这不昨天又加了一个发朋友圈功能。自动发朋友圈,点赞功能。 效果请看:【微信自动发朋友圈,一键发朋友圈,点赞,金币&…

鸿道Intewell操作系统国产ARM生态:芯驰D9(9360)

随着全球经济环境的变化和国家政策的推动,国产操作系统和芯片产业正在迅速发展,成为提升国家竞争力的关键因素。国产工业操作系统与国产芯片的发展对于推动国内工业的自主可控和技术创新具有重要意义。 鸿道Intewell操作系统国产ARM生态:芯驰…

【ACM稳定出版,高录用稳检索】第八届电子信息技术与计算机工程国际学术会议(EITCE 2024,10月18-20)

第八届电子信息技术与计算机工程国际学术会议(EITCE 2024)将于2024年10月18日至20日在中国海口举办。 本次会议旨在汇集全球电子信息技术与计算机工程领域的学者、科研专家及行业实践者,共同探讨该领域的最新研究成果、技术进展与学术动态。会…

工业排污检测算法实际算法应用算法价值算法源码、算法样本展示

工业排污检测算法识别是环境保护领域的一项重要技术手段,它结合了图像识别、声音识别、数据分析等多种先进技术,以实现对工业排污行为的全面监测和准确分析。以下是关于工业排污检测算法识别的详细阐述: 一、算法原理 工业排污检测算法通过…

YOLOv9改进策略【注意力机制篇】| 引入SimAM注意力模块(一个简单的,无参数的卷积神经网络注意模块)

一、本文介绍 本文记录的是基于SimAM注意力模块的YOLOv9目标检测方法研究。SimAM注意力模块通过优化能量函数来获得每个神经元的三维权重,而无需引入额外的参数或增加计算复杂度。若是有轻量化需求的小伙伴,无参的注意力模块也许是一个不错的选择。 文章…

MATLAB 手动实现体素中心点采样抽稀法(72)

. 往期文章回顾 MATLAB 自定义体素中心点采样抽稀法(72) 一、算法简介二、算法实现1.代码2.效果总结一、算法简介 下面是手动实现的体素采样法,用于对点云数据抽稀,减少点云数量,具体的方法就是建立空间三维体素,每个内部存在点云的体素,选择体素中心点保留,最终得到…

使用kafka改造分布式事务

文章目录 1、kafka确保消息不丢失?1.1、生产者端确保消息不丢失1.2、kafka服务端确保消息不丢失1.3、消费者确保正确无误的消费 2、生产者发送消息 KafkaService3、UserInfoServiceImpl -> login()4、service-account - > AccountListener.java 1、kafka确保消…