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

嵌入式学习笔记 - FreeRTOS 信号量以及释放函数

以下是信号量互斥量的结构体图示,延续消息队列的机制

信号量分为:

二值信号量

计数信号量

互斥信号量

一 信号量与互斥量的区别

FreeRTOS中的二值信号量和互斥量虽然功能相似,但存在一些关键区别。‌

定义和功能

  • 二值信号量‌:主要用于任务同步和互斥访问。它只有两个状态:信号量被占用(0)和信号量未被占用(1)。二值信号量没有优先级继承机制,适用于同步任务或中断‌12。
  • 互斥量‌:也称为互斥信号量,主要用于互斥访问共享资源。互斥量的初始值为1,表示资源可用。互斥量具有优先级继承机制,适用于需要保护共享资源的场景,确保同一时间只有一个任务可以访问该资源‌45。

使用场景

  • 二值信号量‌:适用于任务与任务之间或任务与中断之间的同步。由于没有优先级继承,二值信号量更适合用于简单的同步场景‌12。
  • 互斥量‌:适用于需要保护共享资源的场景,确保同一时间只有一个任务可以访问该资源。互斥量的优先级继承机制可以防止优先级反转问题,适用于需要高可靠性的资源访问控制‌45。

创建和操作方法

  • 二值信号量‌:可以通过xSemaphoreCreateBinary()xSemaphoreCreateBinaryStatic()函数创建。操作函数包括xSemaphoreGive()xSemaphoreGiveFromISR()用于释放信号量‌1。
  • 互斥量‌:通过xQueueCreateMutex()函数创建。操作函数包括xSemaphoreTakeMutex()xSemaphoreGiveMutex()用于获取和释放互斥量‌4。

二 信号量的释放函数

信号量在中断中的释放函数为

xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken )

在中断宏用的时候需要切换需要在末尾添加

portYIELD_FROM_ISR(pxHigherPriorityTaskWoken);

http://www.lqws.cn/news/171847.html

相关文章:

  • vue中加载Cesium地图(天地图、高德地图)
  • Amazon Bedrock 助力 SolveX.AI 构建智能解题 Agent,打造头部教育科技应用
  • 火语言RPA--应用列表
  • CMake控制VS2022项目文件分组
  • Spring AI 入门:Java 开发者的生成式 AI 实践之路
  • 8.1_排序的基本概念
  • 有声书画本
  • 基于JWT+SpringSecurity整合一个单点认证授权机制
  • 光耦合器:隐形守护者,拓展无限应用
  • Linux容器篇、第二章_01Ubuntu22 环境下 KubeSphere 容器平台高可用搭建全流程
  • 装饰模式(Decorator Pattern)重构java邮件发奖系统实战
  • k8s安装ingress-nginx
  • 以STM32H7微控制器为例,简要说明stm32h7xx_it.c的作用
  • Transformer架构解析:Encoder与Decoder核心差异、生成式解码技术详解
  • App/uni-app 离线本地存储方案有哪些?最推荐的是哪种方案?
  • MADlib —— 基于 SQL 的数据挖掘解决方案(4)—— 数据类型之矩阵
  • Tomcat全方位监控实施方案指南
  • 《基于Apache Flink的流处理》笔记
  • Docker容器化技术概述与实践
  • 【Python工具开发】k3q_arxml 简单但是非常好用的arxml编辑器,可以称为arxml杀手包
  • Java + Spring Boot + Mybatis 实现批量插入
  • window安装docker
  • C#使用MindFusion.Diagramming框架绘制流程图(1):基础类型
  • Chrome安装代理插件ZeroOmega(保姆级别)
  • 如何理解机器人课程的技术壁垒~壁垒和赚钱是两件不同的事情
  • Chrome书签的导出与导入:步骤图
  • 浏览器工作原理01 [#]Chrome架构:仅仅打开了1个页面,为什么有4个进程
  • Chrome 浏览器前端与客户端双向通信实战
  • Flink在B站的大规模云原生实践
  • 学习STC51单片机29(芯片为STC89C52RCRC)