FreerRTOS(二值信号量和计数型信号量)

news2025/1/4 17:15:58

什么是信号量?

信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代 码段不被并发调用。 信号量这个名字,我们可以把它拆分来看,信号可以起到通知信号的作用,然后我们的量还可以 用来表示资源的数量,当我们的量只有0和1的时候,它就可以被称作二值信号量,只有两个状 态,当我们的那个量没有限制的时候,它就可以被称作为计数型信号量。

信号量也是队列的一种。

什么是二值信号量?

二值信号量其实就是一个长度为1,大小为零的队列,只有0和1两种状态,通常情况下,我们用 它来进行互斥访问或任务同步。

互斥访问:比如门钥匙,只有获取到钥匙才可以开门

任务同步:比如别人先写完博文你才可以看博文

1. 创建二值信号量

SemaphoreHandle_t xSemaphoreCreateBinary( void )

参数:

  • 返回值: 成功,返回对应二值信号量的句柄; 失败,返回 NULL 。 

2. 释放二值信号量

BaseType_t xSemaphoreGive( SemaphoreHandle_t xSemaphore )

参数:

  • xSemaphore:要释放的信号量句柄
  • 返回值: 成功,返回 pdPASS ; 失败,返回 errQUEUE_FULL 。

3. 获取二值信号量

BaseType_t xSemaphoreTake( SemaphoreHandle_t xSemaphore, TickType_t xTicksToWait )

参数:

  • xSemaphore:要获取的信号量句柄
  • xTicksToWait:超时时间,0 表示不超时,portMAX_DELAY表示卡死等待;
  • 返回值: 成功,返回 pdPASS ; 失败,返回 errQUEUE_FULL 。

实操

实验需求: 创建一个二值信号量,按下 KEY1 则释放信号量,按下 KEY2 获取信号量。

cubeMX配置

代码实现

 计数型信号量

 什么是计数型信号量?

计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源,这在计数型 信号量被创建的时候确定的。

 计数型信号量的释放和获取与二值信号量完全相同 !

SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount);

参数:

  • uxMaxCount:可以达到的最大计数值
  • uxInitialCount:创建信号量时分配给信号量的计数值
  • 返回值: 成功,返回对应计数型信号量的句柄; 失败,返回 NULL 。

实操

实验需求 :创建一个计数型信号量,按下 KEY1 则释放信号量,按下 KEY2 获取信号量。 cubeMX配置

将 Config parameters 标签里的 USE_COUNTING_SEMAPHORES 设置为 Enabled 。

 代码实现

 

 

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

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

相关文章

机器学习 day26(多标签分类,Adam算法,卷积层)

多标签分类 多标签分类:对于单个输入特征,输出多个不同的标签y多类分类:对于单个输入特征,输出单个标签y,但y的可能结果有多个 为多标签分类构建神经网络模型 我们可以构建三个不同的神经网络模型来分别预测三个不…

C++14新特性扫盲探究

闲暇之时,聊到C14,实际上C14相对之前的11并没有太大的改动,或者说更像C11标准基础上的查漏补缺,C14之后,还有17、20甚至23,所以说,C14更像个过渡版本。 下面粗略聊聊C14新特性: 语言…

解决Ubuntu下arm-none-linux-gnueabihf-gcc -v :未找到命令

问题:arm-none-linux-gnueabihf-gcc -v arm-none-linux-gnueabihf-gcc:未找到命令 学习MP135开发板搭建环境之后没gcc不可用,网上找了很多教程都没法解决 解决方法: 1、重启:(我试了没用) 2、…

Element分页组件自定义样式

样式效果 页面代码 <el-paginationsize-change"handleSizeChange"current-change"handleCurrentChange":current-page"page.page":page-sizes"[10, 20, 30, 40]":page-size"page.size"layout"total, sizes, prev, …

计算机网络 day5 子网划分 - IP包 - arp协议

目录 子网划分 为什么需要子网划分&#xff1f; 我们为什么不直接使用一个A类的IP地址给一家2000人的公司使用呢&#xff1f; 子网划分本质 子网划分的步骤&#xff1a; 实验&#xff1a;将192.168.1.0/24 划分为4个小网段 --》192.168.1.0/26 减少的IP地址去哪里了&…

遥感云大数据在灾害、水体与湿地领域案例实践及GPT【洪涝灾害、洪水敏感性和风险模拟、河道轮廓监测、地下水变化、红树林遥感制图】

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

【搜索引擎Solr】Solr:提高批量索引的性能

几个月前&#xff0c;我致力于提高“完整”索引器的性能。我觉得这种改进足以分享这个故事。完整索引器是 Box 从头开始创建搜索索引的过程&#xff0c;从 hbase 表中读取我们所有的文档并将文档插入到 Solr 索引中。 我们根据 id 对索引文档进行分片&#xff0c;同样的文档 id…

第50步 深度学习图像识别:Data-efficient Image Transformers建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;Data-efficient Image Transformers Data-efficient Image Transformers (DeiT)是一种用于图像分类的新型模型&#xff0c;由Facebook AI在2020年底提出。这种方法基于视觉Transformer&#xff0c;通过训练策…

LeetCode Java实现 222. 完全二叉树的节点个数

文章目录 题目递归遍历左右子树个数实现思路具体代码实现缺点 根据完全二叉树性质优化思路具体代码实现优点 结语 题目 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能…

串口的再认识

常用函数介绍 串口发送/接收函数 HAL_UART_Transmit(); 串口发送数据&#xff0c;使用超时管理机制&#xff08;即在发送成功前一直阻塞&#xff09; HAL_UART_Receive(); 串口接收数据&#xff0c;使用超时管理机制 HAL_UART_Transmit_IT(); 串口中断模式发送 HAL_UART…

DAY45:动态规划(六)背包问题优化:一维DP解决01背包问题

文章目录 一维DP数组的解法二维DP递推思路滚动数组优化思路&#xff08;重要&#xff09;一维DP数组的含义一维DP递推公式一维DP的初始化遍历顺序&#xff08;重要&#xff09;举例推导DP数组 一维DP数组完整版写法面试问题为什么一维DP背包的for循环一定要倒序遍历为什么一维D…

Qt + QR-Code-generator 生成二维码

0.前言 之前使用 libgrencode 生成二维码&#xff0c;LGPL 协议实在不方便&#xff0c;所以需要找一个 github 星星多的&#xff0c;代码简单最好 header-only&#xff0c;协议最好是 MIT 或者兼容协议而不是 GPL 或者 LPGL。 QR-Code-generator 正好符合这个要求&#xff0c…

JMeter 如何模拟不同的网络速度

目录 前言&#xff1a; 限制输出带宽以模拟不同的网络速度 将这两行添加到user.properties文件中&#xff08;可以在JMeter安装的bin文件夹中找到此行&#xff09; 通过-J 命令行参数传递属性的值&#xff0c;如下所示&#xff1a; 前言&#xff1a; JMeter可以通过使用不同…

【网络安全带你练爬虫-100练】第12练:pyquery解析库提取指定数据

目录 一、目标1、基础/环境的准备工作 二、目标2&#xff1a;开始使用pyquery 三、目标3&#xff1a;提取到指定的数据 四、目标3&#xff1a;通过列表的形式获取指定数据 五、扩展&#xff1a;其他方法 六、网络安全O 一、目标1、基础/环境的准备工作 1、文档&#xff1…

wordpress的wp_trim_words摘要没有截取到指定的字符长度的问题解决

一、问题描述 在imqd.cn文章列表中&#xff0c;用于将正文内容截取保留前75个字的方法突然没效果了。 <p class"post-desc text-black-50 d-none d-md-block"><?phpecho wp_trim_words( get_the_content(), 75, ...);?> </p>直接展示了所有的正…

计算机网络实验(1)--Windows网络测试工具

&#x1f4cd;实验目的 理解知识点&#xff08;ping&#xff0c;netstat&#xff0c;ipconfig&#xff0c;arp&#xff0c;tracert&#xff0c;route&#xff0c;nbtstat&#xff0c;net&#xff09;所涉及的基本概念&#xff0c;并学会使用这些工具测试网络的状态及从网上获取…

java后端开发环境搭建 mac

在mac pro上搭建一套java 后端开发环境&#xff0c;主要安装的内容有&#xff1a;jdk、maven、git、tomcat、mysql、navicat、IntelliJ、redis。 本人mac pro的系统为mac OS Monterey 12.6.7&#xff0c;主机的硬件架构为x86_64。 左上角关于本机查看系统版本&#xff1b;终端…

LLM - Baichuan7B Lora 训练详解

目录 一.引言 二.环境准备 三.模型训练 1.依赖引入与 tokenizer 加载 2.加载 DataSet 与 Model 3.Model 参数配置 4.获取 peft Model 5.构造 Trainer 训练 6.训练完整代码 四.Shell 执行 1.脚本构建 2.训练流程 3.训练结果 五.总结 一.引言 LLM - Baichuan7B Tok…

Ubuntu18.04 docker kafka 本地测试环境搭建

文章目录 一、kafka 介绍二、Ubuntu docker kafka 本地测试环境搭建2.1 docker kafka 启动2.1.1 下载镜像2.1.2 启动 wurstmeister/zookeeper2.1.3 启动 wurstmeister/kafka 2.2 docker kafka 测试数据收发2.2.1 docker kafka 测试数据收发2.2.2 windows验证 三、嵌入式集成四、…

加密劫持者攻击教育机构

我们的专家分析了2023年第一季度的当前网络威胁。研究表明&#xff0c;独特事件的数量增加&#xff0c;勒索软件活动激增&#xff0c;特别是针对学术和教育机构。我们记录了大量与就业有关的网络钓鱼邮件&#xff0c;出现了QR网络钓鱼和恶意广告的增加。 我们的研究表明&#…