FreeRTOS信号量管理

创建功能

SemaphoreHandle_t xSemaphoreCreateBinary( void );

简介: 创建二进制信号量,并返回可以引用信号量的句柄。
: 配置configSUPPORT_DYNAMIC_ALLOCATION必须在FreeRTOSConfig.h中将其设置为1,才能使RTOSAPI函数可用。

返回值
NULL 由于没有足够的信号量,无法创建信号量。FreeRTOS堆可用。
其他 成功地创建了信号量。返回的值是可以引用信号量的句柄。

SemaphoreHandle_t xSemaphoreCreateBinaryStatic(
                          StaticSemaphore_t *pxSemaphoreBuffer );

简介: 静态创建二进制信号量,并返回可以引用信号量的句柄。
注: configSUPPORT_STATIC_ALLOCATION必须在FreeRTOSConfig.h中将此RTOSAPI函数设置为1才能使用。

参数
pxSemaphoreBuffer 必须指向一个类型为StaticSemaffore_t的变量,该变量将用于保存信号量的状态。
返回值
NULL 由于pxSemaphoreBuffer为NULL,无法创建信号量。
其他 成功地创建了信号量。返回的值是可以引用信号量的句柄。

SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount,
                                            UBaseType_t uxInitialCount);

简介: 创建计数信号量并返回一个句柄,通过该句柄可以引用新创建的信号量。
: 配置configSUPPORT_DYNAMIC_ALLOCATION必须在FreeRTOSConfig.h中将其设置为1,才能使RTOSAPI函数可用。

参数
uxMaxCount 可以达到的最大计数值。当信号量达到这个值时,就不能再‘给定’了。
uxInitialCount 在创建信号量时分配给它的计数值。
返回
如果成功地创建了信号量,则返回信号量的句柄。如果无法创建信号量,因为保持信号量所需的RAM不能分配然后返回NULL。

SemaphoreHandle_t xSemaphoreCreateCountingStatic(
                                 UBaseType_t uxMaxCount,
                                 UBaseType_t uxInitialCount
                                 StaticSemaphore_t *pxSemaphoreBuffer );

简介: 创建计数信号量并返回一个句柄,通过该句柄可以引用新创建的信号量。
注: 结构超静置分配必须在FreeRTOSConfig.h中将此RTOSAPI函数设置为1才能使用。

参数
uxMaxCount 可以达到的最大计数值。当信号量达到这个值时,就不能再‘给定’了。
uxInitialCount 在创建信号量时分配给它的计数值。
pxSemaphoreBuffer 必须指向一个类型为StaticSemaffore_t的变量,该变量随后用于保存信号量的数据结构。
返回
如果成功地创建了信号量,则返回信号量的句柄。如果pxSemaphoreBuffer为NULL,则返回NULL。

SemaphoreHandle_t xSemaphoreCreateMutex( void )

简介: 创建互斥,并返回一个句柄,通过该句柄可以引用创建的互斥对象。
: 不能在中断服务例程中使用Mutexe。
返回:成功则返回句柄否则返回为空

SemaphoreHandle_t xSemaphoreCreateMutexStatic(
                            StaticSemaphore_t *pxMutexBuffer );

简介: 创建互斥,并返回一个句柄,通过该句柄可以引用创建的互斥对象。(静态)
: 不能在中断服务例程中使用Mutexe。
返回:成功则返回句柄否则返回为空

SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void )
简介: 创建递归互斥,并返回可以引用互斥对象的句柄。
: 递归互斥不能用于中断服务例程。
返回:成功则返回句柄否则返回为空

SemaphoreHandle_t xSemaphoreCreateRecursiveMutexStatic(
                              StaticSemaphore_t *pxMutexBuffer )

简介: 创建递归互斥,并返回可以引用互斥对象的句柄。(静态)
: 递归互斥不能用于中断服务例程。
返回:成功则返回句柄否则返回为空

void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );

简介: 删除信号量,包括互斥类型信号量和递归信号量。
: 不要删除任务被阻塞的信号量(处于阻塞状态的任务正在等待信号量可用)。




操作功能

TaskHandle_t xSemaphoreGetMutexHolder( SemaphoreHandle_t xMutex );

简介: 返回包含函数参数(如果有的话)指定的互斥对象的任务句柄。
: 为了使此函数可用,必须在FreeRTOSConfig.h中将include_xSemaphoreGetMutexHolder设置为1。

参数
xMutex 被查询的互斥对象的句柄。
返回
包含xMutex参数指定的互斥对象的任务句柄。

UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xSemaphore );

简介: 返回信号量的计数。
参数
X信号量 被查询的信号量的句柄。
返回
如果信号量是一个计数信号量,则返回信号量当前计数值。
如果信号量是二进制信号量,则如果信号量可用,则返回1;如果信号量不可用,则返回0。

xSemaphoreTake( SemaphoreHandle_t xSemaphore,
                 TickType_t xTicksToWait );

简介: 获取信号量
: 不能从ISR调用此宏。
参数
xSemaphore 在创建信号量时获取信号量的句柄。
xTicksToWait 等待信号量可用的时间。宏portTICK_TIMEY_MS可用于将其转换为实时的。块时间为零可以用来轮询信号量。
如果INCLUDE_vTaskSuspend设置为‘1’,然后将块时间指定为portMAX_DELAY 将导致任务无限期地阻塞(没有超时)。

返回
如果获得信号量,则为pdTRUE。如果xTicksToWait过期,而信号量没有可用则为pdFALSE,

xSemaphoreTakeFromISR
      (
        SemaphoreHandle_t xSemaphore,
        signed BaseType_t *pxHigherPriorityTaskWoken
      )

简介: 获取信号量
注: 在ISR中使用此宏
参数
xSemaphore 信号量被“拿走”了。信号量由类型SemaphoreHandle_t的变量引用,必须在使用之前显式创建。
PxHigherPriorityTaskWoken 是否需要切换任务上下级
返回:如果信号量被成功捕获,则为pdTRUE。如果信号量由于不可用而未成功捕获,则为pdFALSE。

xSemaphoreTakeRecursive( SemaphoreHandle_t xMutex,
                         TickType_t xTicksToWait );

简介: 宏递归地获取或“接受”互斥类型的信号量。
: 在FreeRTOSConfig.h中将configUSE_RECURSIVE_MUTEXES定义为’1’才可使用此宏
参数
xMutex 获取互斥对象的句柄。这是由xSemaphoreCreateRecursiveMutex()返回的句柄。
xTicksToWait 等待信号量可用的时间。
宏portTICK_TIMEY_MS可用于将其转换为实时的。块时间为零可以用来轮询信号量。
如果任务已经拥有信号量,那么无论xTicksToWait的值如何,xSemaphoreTakeRecursive()都会立即返回。
返回
如果获得信号量,则为pdTRUE。pdFALSE,如果xTicksToWait过期,而信号量没有可用。

xSemaphoreGive( SemaphoreHandle_t xSemaphore );

简介: 宏释放信号量。
: 这不能从ISR中使用。
参数
X信号量 释放信号量的句柄。这是创建信号量时返回的句柄。
返回
如果信号量被释放,则为pdTRUE。如果发生错误,则为pdFALSE。

xSemaphoreGiveRecursive( SemaphoreHandle_t xMutex )

简介: 宏递归释放或“给予”互斥类型的信号量。
: 这个宏不能用于使用xSemaphoreCreateMutex()创建的互斥对象。
参数
xMutex 被释放的互斥体的句柄,或“给定”的句柄。这是由xSemaphoreCreateRecursiveMutex()返回的句柄。
返回: 如果成功地给出信号量,则为pdTRUE。

xSemaphoreGiveFromISR( SemaphoreHandle_t xSemaphore,
                       signed BaseType_t *pxHigherPriorityTaskWoken )

简介: 宏释放信号量。
: 此宏可从ISR中使用。信号量必须是以前通过调用xSemaphoreCreateBtics()或xSemaphoreCreateCounting()创建的。
参数
xSemaphore 释放信号量的句柄。这是创建信号量时返回的句柄。
PxHigherPriorityTaskWoken 如果xSemaphoreGiveFromISR()将此值设置为pdTRUE,则应该在中断退出之前请求上下文切换。

返回
如果成功地给出信号量,则为pdTRUE,否则为errQUEUE_FULL。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值