信号量的作用
有这么个场景,在一个停车场中有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、关中断