欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 嵌入式学习笔记 - FreeRTOS 信号量以及释放函数

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

2025/8/9 5:39:47 来源:https://blog.csdn.net/qq_35771411/article/details/148479265  浏览:    关键词:嵌入式学习笔记 - FreeRTOS 信号量以及释放函数

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

信号量分为:

二值信号量:通常用于对共享资源的访问,初始值为1或者0,获取有可能需要等待,但是释放不可能等待,因为资源在你手中,这一点跟队列不一样,可以理解为信号量是一个物品,只能一个任拿着,只能由拿着的人释放,队列是一个存放物品的空间,谁都可以去拿东西,谁都可以去放东西。

计数信号量:

互斥信号量:

一 二值信号量与互斥量的区别

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

定义和功能

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

使用场景

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

创建和操作方法

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

二 信号量的释放函数

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

xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken )

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

portYIELD_FROM_ISR(pxHigherPriorityTaskWoken);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词