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

嵌入式学习笔记 - 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.xdnf.cn/news/12446.html

相关文章:

  • cursor和windsurf使用体验对比
  • NLP学习路线图(二十八):BERT及其变体
  • AI for Science(AI4S)的现在与未来,科学智能如何赋能科学研究?
  • Python训练营打卡Day46(2025.6.6)
  • leetcode 2434. 使用机器人打印字典序最小的字符串 中等
  • SpringCloud学习笔记-2
  • 【idea】分享一个关于Maven依赖管理好用的插件
  • 【redis实战篇】第八天
  • pyinstaller打包遇到报错,和pathlib冲突
  • KAG与RAG在医疗人工智能系统中的多维对比分析
  • Python读取阿里法拍网的html+解决登录cookie
  • 第四讲:类和对象(下)
  • 视觉SLAM基础补盲
  • git提交代码和解决冲突修复bug
  • MongoDB学习和应用(高效的非关系型数据库)
  • 【iOS安全】iPhone X iOS 16.7.11 (20H360) WinRa1n 越狱教程
  • 使用 Windows 完成 iOS 应用上架:Appuploader对比其他证书与上传方案
  • 在Linux查看电脑的GPU型号
  • 【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
  • 超构光学与 AR 的深度融合 | 攻克 VAC 与眼动范围难题
  • DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
  • 完美搭建appium自动化环境
  • 解决Zotero翻译插件Zotero PDF Translate无法正常翻译
  • C# 快速检测 PDF 是否加密,并验证正确密码
  • Rust 通用代码生成器:莲花,红莲尝鲜版三十六,图片初始化功能介绍
  • 软件功能测试报告都包含哪些内容?
  • C语言三位数倒序输出(两种方法)
  • 使用xdocreport导出word
  • c++ map与multiset的介绍
  • JUnit​​ 和 ​​Mockito​​ 的详细说明及示例,涵盖核心概念、常用注解、测试场景和实战案例。