创建功能
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。