介绍
信号量这个名字很恰当:
信号:起通知作用
量:还可以用来表示资源的数量
当"量"没有限制时,它就是"计数型信号量"(Counting Semaphores)
当"量"只有0、1两个取值时,它就是"二进制信号量"(Binary Semaphores)
支持的动作:"give"给出资源,计数值加1;"take"获得资源,计数值减1

两种信号量对比

信号量函数
创建信号量的准备工作
在创建信号量之前,要在FreeRTOSConfig.h文件里把configUSE_COUNTING_SEMAPHORES宏定义为1.

原理如下,在queue.c文件中,使用创建技术型信号量的函数,要先让configUSE_COUNTING_SEMAPHORES为0,

那为什么configSUPPORT_DYNAMIC_ALLOCATION不用定义呢
看下图,在FreeRTOS.h文件里,如果没用定义configSUPPORT_DYNAMIC_ALLOCATION宏,则默认把configSUPPORT_DYNAMIC_ALLOCATION定义为1.

创建二进制信号量的函数

创建计数型信号量的函数

删除信号量

give/take
在任务中give

xSemaphoreGive的函数原型:
BaseType_t xSemaphoreGive( SemaphoreHandle_t xSemaphore );

在中断里give

在任务中take

在中断里take



















