基于源码详谈FreeRTOS机制之信号量

本文介绍了信号量作为一种资源计数器在停车场场景中的作用,以及在FreeRTOS中如何进行获取和释放操作,包括中断管理和任务唤醒机制。
摘要由CSDN通过智能技术生成

信号量的作用

有这么个场景,在一个停车场中有7个空位,但是进来停车的人不知道还有没有空位(count=?),这时候就应该有个数据来告诉他有没有空位,信号量就这么个东西,它用来表示资源的个数,它的本质上就是个计数器。当车进来时,空位减少一个 count--,当减到0时就不可以进车了,当有车出去时才可以进来。

在FreeRTOS中的操作

获取信号量

信号量的本质还是个队列,所以它的一切操作都和队列类似,操作如下:

1、关中断

2、if (count<=0) , 判断是否愿意等待,如果不愿意则返回ERR;如果愿意则休眠,休眠操作是,放入Semaphore list中,然后再把队列状态由ready list放到delayed list

3.if(count>0) count-- 然后return ok;

4、开中断

释放信号量

1、关中断

2、count++

3、判断Semaphore list是否有数据或者判断是否有任务在等待,如果有则唤醒它

4、关中断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值