介绍
信号量这个名字很恰当:
信号:起通知作用
量:还可以用来表示资源的数量
当"量"没有限制时,它就是"计数型信号量"(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 );