freertos之信号量

介绍

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

freertos之信号量_第1张图片

两种信号量对比

freertos之信号量_第2张图片

信号量函数

创建信号量的准备工作

在创建信号量之前,要在FreeRTOSConfig.h文件里把configUSE_COUNTING_SEMAPHORES宏定义为1.
freertos之信号量_第3张图片

原理如下,在queue.c文件中,使用创建技术型信号量的函数,要先让configUSE_COUNTING_SEMAPHORES为0,
freertos之信号量_第4张图片
那为什么configSUPPORT_DYNAMIC_ALLOCATION不用定义呢
看下图,在FreeRTOS.h文件里,如果没用定义configSUPPORT_DYNAMIC_ALLOCATION宏,则默认把configSUPPORT_DYNAMIC_ALLOCATION定义为1.

,

创建二进制信号量的函数

freertos之信号量_第5张图片

创建计数型信号量的函数

freertos之信号量_第6张图片

删除信号量

freertos之信号量_第7张图片

give/take

在任务中give

freertos之信号量_第8张图片

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

freertos之信号量_第9张图片

在中断里give

freertos之信号量_第10张图片

在任务中take

freertos之信号量_第11张图片

在中断里take

freertos之信号量_第12张图片

你可能感兴趣的:(服务器,运维)