当前位置: 首页 > 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);

相关文章:

  • N2语法 列挙、話題提出
  • 构建 MCP 服务器:第 3 部分 — 添加提示
  • AWS API Gateway配置日志
  • 第16届蓝桥杯青少Scratch 4月stema——飞翔的小燕子
  • Linux中shell编程表达式和数组讲解
  • 使用UDP连接ssh
  • [论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
  • IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
  • 轻松备份和恢复 Android 系统 | 4 种解决方案
  • uniapp 设置手机不息屏
  • uni-app 如何实现选择和上传非图像、视频文件?
  • 实践指南:从零开始搭建RAG驱动的智能问答系统
  • springcloud SpringAmqp消息队列 简单使用
  • window安装docker
  • GAN生成模型评价体系:从主观感知到客观度量的技术演进
  • 字节推出统一多模态模型 BAGEL,GPT-4o 级的图像生成能力直接开源了!
  • 第16节 Node.js 文件系统
  • 408第一季 - 数据结构 - 数组和特殊矩阵
  • RNN和CNN使用场景区别
  • GEE使用记录
  • 个人网站备案拍照/网站产品推广
  • 哪个网站做汽车保养比较好/上海seo排名
  • 专业格泰建站/搜索引擎优化的流程
  • 赤裸做爰游戏漫画网站/查询关键词排名工具
  • 高大上强企业网站/江苏营销型网站建设
  • 未央区政府网站建设/怎样在百度上打广告