FreeRTOS 信号量分享

本文详细解读了信号量的种类(二值、计数、互斥和递归互斥),强调了二值信号量的同步功能与互斥信号量的优先级继承,并介绍了各类型的创建与释放函数,如xSemaphoreCreateBinary和xSemaphoreGive。同时,提到了信号量的阻塞特性及其与队列的相似之处,以及中断服务函数xSemaphoreGiveFromISR的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信号量用来进行资源管理和任务同步
信号量分为 二值信号量,计数型信号量,互斥信号量,递归互斥信号量

二值信号量通常用于互斥访问或同步。二值信号量和互斥信号量非常类似
互斥信号量拥有优先级继承机制。二值信号量没有优先级继承、
因此二值信号更适合用于同步,二互斥信号量适用于简单的互斥访问。

信号量和队列一样,他的API 函数允许设置一个阻塞时间。阻塞时间是当任务获取信号量的时候由于信号量无效而导致任务进入阻塞态的最大时钟节拍数。

二值信号量其实就是一个队列项的队列,这个队列要么是空,要么是满。任务和中断使用这个特许队列时并不在意队列中存的是什么消息,值需要知道这个队列时空的还是满的。

中断服务函数发送信号量可以使用函数xSemaphoreGiveFromISR(),也可以使用任务通知功能来替代二值信号量。

创建二值信号量函数:

vSemaphoreCreateBinary() 老版本

xSemaphoreCreateBinary() 新版本

xSemaphoreCreateBinaryStatic()

释放信号量(不管二信号量,计数信号量,互斥信号量都用这个函数)

xSemaphoreGive()

xSemaphoreGiveFromISR()

获取信号量(不管二信号量,计数信号量,互斥信号量都用这个函数)

xSemaphoreTake()

xSemaphoreTakeFromISR()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值