一、什么是计数型信号量?
计数型信号量相当于队列长度大于1的队列,因此计数型信号量能够容纳多个资源,这是在计数型信号量被创建的时候确定的。
二、计数型信号量相关的api函数
函数
描述
xSemaphoreCreateCounting()
使用动态方法创建计数型信号量。
xSemaphoreCreateCountingStatic()
使用静态方法创建计数型信号量
uxSemaphoreGetCount()
获取信号量的计数值
计数型信号量的释放和获取与二值信号量相同参考上一篇博文
stm32——freeRTOS二值信号量_now的博客-CSDN博客
一般常用动态方式创建计数型信号量
SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount,UBaseType_t uxInitialCount);
参数:
uxMaxCount:可以达到的最大计数值
uxInitialCount:创建信号量时分配给信号量的计数值(默认为0)
返回值:
创建成功,返回对应计数型信号量的句柄;
失败返回NULL
三、实际代码演示
需求:
创建一个计数型信号量,按下KEY1则释放信号量,按下KEY2获取信号量。
cubeMX
1、创建任务
2、创建计数型信号量
keil5
测试结果:最多可放入3个信号量