当前位置: 首页 > news >正文

freertos信号量之二值信号量

freertos信号量之二值信号量

    • 简介
    • 例程

简介

FreeRTOS的二值信号量(Binary Semaphore)是用于实现进程间同步和临界资源保护的重要工具。以下是一些二值信号量的常用函数及其说明:

1)xSemaphoreCreateBinary()
创建一个二值信号量。该函数接受一个无符号整型参数,用于指定信号量的初始值。如果初始值为0,则表示信号量未被占用;否则,表示信号量已被占用。

2)xSemaphoreTake(SemaphoreHandle_t xSemaphore, portTickType xBlockTime)
获取二值信号量。该函数会尝试获取信号量,如果信号量可用,则获取成功并立即返回;否则,如果信号量不可用,函数会阻塞调用任务,直到信号量可用或超时。xBlockTime参数指定阻塞时间,单位为系统时钟节拍数。

3)xSemaphoreGive(SemaphoreHandle_t xSemaphore)
释放二值信号量。该函数会将信号量的值置为1,表示信号量可用。如果有任务正在等待该信号量,则其中一个任务将被唤醒并继续执行。

4)xSemaphoreGetCount(SemaphoreHandle_t xSemaphore)
获取二值信号量的当前值。该函数返回信号量的当前值,即0或1。

5)xSemaphoreDelete(SemaphoreHandle_t xSemaphore)
删除一个二值信号量。该函数会释放与信号量关联的资源,并使信号量无效。

使用注意点
二值信号量只有两个状态,0和1,因此只能用于简单的同步和资源保护场景。
二值信号量不支持优先级继承,因此不会出现优先级反转的问题。
在释放信号量时,需要注意保证调用xSemaphoreGive()函数的代码能够正确执行,否则可能导致信号量无法释放而引起死锁。

例程

#include <FreeRTOS.h>  
#include <task.h>  // 定义二值信号量的初始状态为0  
static SemaphoreHandle_t binarySemaphore = 0;  void vATask( void * pvParameters )  
{  portTickType xDelay;  for( ;; )  {  // 任务进入临界区,保护临界资源  xSemaphoreTake( binarySemaphore, ( portTickType ) 0 ); // 等待信号量变为1  // 临界区代码,保护临界资源  // ...  // 释放信号量,使信号量状态变为0,允许其他任务或中断服务程序进入临界区  xSemaphoreGive( binarySemaphore );  // 延时一定时间后再次进入临界区  xDelay = pdMS_TO_TICKS( 1000 ); // 延时1秒  portYIELD_WITHIN( xDelay );  }  
}  void vAnInterruptServiceRoutine( void )  
{  
// 中断服务程序中获取二值信号量,保护中断服务程序的代码不被打断  
xSemaphoreTakeFromISR( binarySemaphore, &xHigherPriorityTaskWoken );  
// 中断服务程序代码,保护中断服务程序的代码不被打断  
// ...  
// 中断服务程序释放二值信号量,允许任务进入临界区  
xSemaphoreGiveFromISR( binarySemaphore, &xHigherPriorityTaskWoken );  
}

在上述示例中,任务vATask首先进入临界区并等待二值信号量。当二值信号量的状态为0时,任务会阻塞等待。一旦任务进入临界区,就可以执行保护临界资源的代码。当任务完成临界区代码后,释放二值信号量,使其状态变为0,允许其他任务或中断服务程序进入临界区。

在中断服务程序中,也可以使用二值信号量来保护中断服务程序的代码不被打断。当低优先级的中断发生时,中断服务程序会获取二值信号量并快速处理少部分工作。一旦中断服务程序完成工作,就会释放二值信号量,允许高优先级的中断或任务进入临界区。

相关文章:

freertos信号量之二值信号量

freertos信号量之二值信号量 简介例程 简介 FreeRTOS的二值信号量&#xff08;Binary Semaphore&#xff09;是用于实现进程间同步和临界资源保护的重要工具。以下是一些二值信号量的常用函数及其说明&#xff1a; 1&#xff09;xSemaphoreCreateBinary() 创建一个二值信号量…...

notepad++ 如何去除换行

选中下方的“扩展” “查找目标”输入&#xff1a;\r\n&#xff0c;替换为:空白 最后全部替换。...

PPT NO.2 ​插入透明校徽

插入透明校徽&#xff1a; ①先下载一个校徽&#xff1a; ​ ②用矢量网站转换一下&#xff0c;这个免费的&#xff0c;很多其他的要钱钱&#xff1a; 位图转矢量图,JPG转矢量,PNG转矢量,GIF转矢量,BMP转矢量 - 在线工具 - 字客网 (fontke.com) 转换完了如下&#xff1a; 打…...

Linux系统部署PostgreSQL 单机数据库

安装方式 1 安装包方式 &#xff08;Packages and Installers&#xff09; 支持的操作系统包括 liunxMacosWindowsBSDSolaris 2 源码安装 &#xff08;Source code&#xff09; 下载源码包 通过下载地址PostgreSQL: File Browser 可以看到有各个版本的源码目录 选择13.1…...

好用的办公摸鱼神器

http://t.chaojizhu.cn/fawork/Down?uid180819...

手写Java序列化工具

一、思考 假设给一个java bean&#xff0c;让你按照 json 的格式打印出来&#xff0c;你会怎么做&#xff1f; 比如这个java bean 长这样&#xff0c;并且创建了一个叫宝儿姐的朋友 package com.test;public class User {private String name;private Integer age;private Bi…...

mysql面试题26:MySQL中什么是MVCC,它的底层原理是什么

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:什么是MVCC,它的底层原理是什么? MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于在数据库中实现并发事务的隔离性和一致性…...

SQL进阶 - SQL的编程规范

性能优化是一个很有趣的探索方向&#xff0c;将耗时耗资源的查询优化下来也是一件很有成就感的事情&#xff0c;但既然编程是一种沟通手段&#xff0c;那每一个数据开发者就都有义务保证写出的代码逻辑清晰&#xff0c;具有很好的可读性。 目录 引子 小试牛刀 答案 引言 …...

[NISACTF 2022]babyserialize - 反序列化+waf绕过【*】

[NISACTF 2022]babyserialize 一、解题过程二、思考总结&#xff08;一&#xff09;、关于题目的小细节&#xff08;二&#xff09;、关于弱类型比较技巧 一、解题过程 题目代码&#xff1a; <?php include "waf.php"; class NISA{public $fun"show_me_fl…...

docker部署Vaultwarden密码共享管理系统

Vaultwarden是一个开源的密码管理器&#xff0c;它是Bitwarden密码管理器的自托管版本。它提供了类似于Bitwarden的功能&#xff0c;允许用户安全地存储和管理密码、敏感数据和身份信息。 Vaultwarden的主要特点包括&#xff1a; 1. 安全的数据存储&#xff1a;Vaultwarden使…...

低代码开发技术选型

低代码的技术路径 低代码开发低代码开发优势低代码的技术路径1.表格驱动2.表单驱动3.数据模型4.领域模型 低代码的核心能力企业级低代码开发平台的11项关键能力低代码平台的流程引擎选型低代码平台的流程设计器选型低代码平台的表单设计器选型低代码平台的Vue.js 框架选型 低代…...

在vue2中,v-model和.sync的区别

最近在封装一个弹窗组件时&#xff0c;用了比较复杂的逻辑去做显示和隐藏的逻辑&#xff0c;在查看同事的代码之后&#xff0c;才知道还有更简单的方法&#xff0c;自己已经忘了一些API. popup组件里统一的template&#xff1a; <div v-ifisShowPopup> // 弹窗内容 <…...

nginx 配置

一、nginx安装 下载地址&#xff1a;http://nginx.org/en/download.html&#xff0c;和Keepalived搭配使用&#xff0c;防止nginx挂掉 二、nginx配置 ########### 每个指令必须有分号结束。################# #user administrator administrators; #配置用户或者组&#xf…...

【计算机视觉|人脸建模】学习从图像中回归3D面部形状和表情而无需3D监督

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Learning to Regress 3D Face Shape and Expression from an Image without 3D Supervision 链接&#xff1a;[1905.06817] Learning to Regress 3D Face Shape and Expression from an I…...

Linux系统之部署h5ai目录列表程序

Linux系统之部署h5ai目录列表程序 一、h5ai介绍1.1 h5ai简介1.2 h5ai特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、安装httpd软件4.1 检查yum仓库4.2 安装httpd软件4.3 启动httpd服务4.4 查看htt…...

Java-Exception

目录 异常概念ErrorException 体系图常见运行时异常NullPointerExceptionArithmeticExceptionArrayIndexOutOfBoundExceptionClassCastExceptionNumberFormatException 常见的编译异常异常处理机制自定义异常throw和throws对比 异常是Java编程中的常见问题&#xff0c;了解如何…...

C++并发与多线程(2) | 线程运行开始和结束的基本方式

当程序运行起来,生成一个进程,该进程所属的主线程开始自动运行。当主线程从main()函数返回,则整个进程执行完毕。 主线程从main()开始执行,那么我们自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,就代表着我们这个线程运行结束。 整个进…...

vue3前端开发-flex布局篇

文章目录 1.传统布局与flex布局优缺点传统布局flex布局建议 2. flex布局原理2.1 布局原理 3. flex常见属性3.1 父项常见属性3.2 子项常见属性 4.案例实战(携程网首页) 1.传统布局与flex布局优缺点 传统布局 兼容性好布局繁琐局限性&#xff0c;不能再移动端很好的布局 flex布…...

网络是什么?(网络零基础入门篇)

1.如何理解局域网和广域网&#xff1f; 2.路由器和交换机是怎么样工作的&#xff1f; 3.三层交换机能不能代替路由器&#xff1f; -- 局域网 广域网 -- 企业网架构&#xff0c;运营商架构&#xff0c;数据中心架构 -- 局域网 通过 交换机连接的 转发 相同的ip地址…...

【JavaEE】线程安全的集合类

文章目录 前言多线程环境使用 ArrayList多线程环境使用队列多线程环境使用哈希表1. HashTable2. ConcurrentHashMap 前言 前面我们学习了很多的Java集合类&#xff0c;像什么ArrayList、Queue、HashTable、HashMap等等一些常用的集合类&#xff0c;之前使用这些都是在单线程中…...

Word制表位全攻略:从菜鸟到高手,5分钟搞定专业文档排版

Word制表位全攻略&#xff1a;从菜鸟到高手&#xff0c;5分钟搞定专业文档排版 你是否曾经为了对齐文档中的文字而疯狂敲击空格键&#xff1f;或是花费大量时间调整表格边框却依然无法让数字完美对齐&#xff1f;这些困扰其实只需要掌握一个Word中的隐藏神器——制表位&#x…...

手把手教你用Python+AI大模型,把Yapi接口文档变成自动化测试脚本(附避坑指南)

用Python与大模型实现Yapi接口自动化测试的工程化实践 在中小型技术团队中&#xff0c;接口测试往往是质量保障的薄弱环节。传统手工编写测试用例的方式不仅耗时耗力&#xff0c;更难以应对快速迭代的开发节奏。本文将分享如何利用Python生态与AI大模型能力&#xff0c;将Yapi平…...

6.其他计算机系统基础知识

一、其他计算机系统基础知识 &#xfeff;00:00 1. 计算机语言 &#xfeff;00:31 1&#xff09;计算机语言的概念 &#xfeff;01:56 定义: 用于人与计算机之间交流的语言&#xff0c;是传递信息的媒介组成结构: 表达式: 包含变量、常量、字面量和运算符流程控制: 包括分支、循…...

C语言文件操作实战:用fread和fwrite处理二进制数据的5个常见场景

C语言文件操作实战&#xff1a;用fread和fwrite处理二进制数据的5个常见场景 在嵌入式系统开发、游戏编程和工业控制等领域&#xff0c;二进制文件操作往往是数据持久化的核心手段。与文本文件相比&#xff0c;二进制格式能更精确地保存内存数据布局&#xff0c;避免字符编码转…...

别再瞎找了!AI论文平台2026最新测评与推荐

2026年真正好用的AI论文平台&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...

Awoo Installer:为什么这款Switch安装工具能让你告别安装烦恼?

Awoo Installer&#xff1a;为什么这款Switch安装工具能让你告别安装烦恼&#xff1f; 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Instal…...

FUTURE POLICE新手入门:无需代码基础,快速实现语音转字幕精准对齐

FUTURE POLICE新手入门&#xff1a;无需代码基础&#xff0c;快速实现语音转字幕精准对齐 你是不是也遇到过这样的烦恼&#xff1f;辛辛苦苦给视频配好了字幕&#xff0c;结果播放时总是对不上口型&#xff0c;要么字幕快了&#xff0c;要么慢了&#xff0c;来回调整时间轴&am…...

NaViL-9B多模态能力解析:从图像主体识别到图文联合推理实操手册

NaViL-9B多模态能力解析&#xff1a;从图像主体识别到图文联合推理实操手册 1. 平台概览 NaViL-9B是当前领先的原生多模态大语言模型&#xff0c;能够同时处理文本和视觉信息。不同于传统单一模态模型&#xff0c;它实现了文本与图像的深度融合理解&#xff0c;为用户提供了更…...

DataGrip安装使用全攻略 (DataGrip更改新建查询存储默认位置)

一、DataGrip安装 下载 DataGrip 安装包 访问 DataGrip 官网:https://www.jetbrains.com/datagrip/download ,下载 DataGrip 2025.3.5 版本的安装包: 我这里也有安装包 链接: https://pan.baidu.com/s/1g5aiHWsv9VyIhFD-7TBdEg?pwd=0908 提取码: 0908 --来自百度网盘超…...

MusePublic低配适配教程:16G显存降级方案与效果妥协平衡点

MusePublic低配适配教程&#xff1a;16G显存降级方案与效果妥协平衡点 1. 项目简介 MusePublic是一款专门为艺术感时尚人像创作设计的轻量化文本生成图像系统。这个项目的核心基于MusePublic专属大模型&#xff0c;采用安全高效的safetensors格式封装&#xff0c;针对艺术人像…...