Skip to content

File semphr.h

FileList > FreeRTOS > include > semphr.h

Go to the source code of this file.

  • #include "queue.h"

Public Types

Type Name
typedef QueueHandle_t SemaphoreHandle_t

Macros

Type Name
define semBINARY_SEMAPHORE_QUEUE_LENGTH ( ( uint8_t ) 1U )
define semGIVE_BLOCK_TIME ( ( TickType_t ) 0U )
define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U )
define uxSemaphoreGetCount (xSemaphore) uxQueueMessagesWaiting( ( QueueHandle_t ) ( xSemaphore ) )
define vSemaphoreDelete (xSemaphore) vQueueDelete( ( QueueHandle_t ) ( xSemaphore ) )
define xSemaphoreGetMutexHolder (xSemaphore) xQueueGetMutexHolder( ( xSemaphore ) )
define xSemaphoreGetMutexHolderFromISR (xSemaphore) xQueueGetMutexHolderFromISR( ( xSemaphore ) )
define xSemaphoreGive (xSemaphore) xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )
define xSemaphoreGiveFromISR (xSemaphore, pxHigherPriorityTaskWoken) xQueueGiveFromISR( ( QueueHandle_t ) ( xSemaphore ), ( pxHigherPriorityTaskWoken ) )
define xSemaphoreTake (xSemaphore, xBlockTime) xQueueSemaphoreTake( ( xSemaphore ), ( xBlockTime ) )
define xSemaphoreTakeFromISR (xSemaphore, pxHigherPriorityTaskWoken) xQueueReceiveFromISR( ( QueueHandle_t ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) )

Public Types Documentation

typedef SemaphoreHandle_t

typedef QueueHandle_t SemaphoreHandle_t;

Macro Definition Documentation

define semBINARY_SEMAPHORE_QUEUE_LENGTH

#define semBINARY_SEMAPHORE_QUEUE_LENGTH ( ( uint8_t ) 1U )

define semGIVE_BLOCK_TIME

#define semGIVE_BLOCK_TIME ( ( TickType_t ) 0U )

define semSEMAPHORE_QUEUE_ITEM_LENGTH

#define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U )

define uxSemaphoreGetCount

#define uxSemaphoreGetCount (
    xSemaphore
) uxQueueMessagesWaiting( ( QueueHandle_t ) ( xSemaphore ) )

semphr.h

If the semaphore is a counting semaphore then uxSemaphoreGetCount() returns its current count value. If the semaphore is a binary semaphore then uxSemaphoreGetCount() returns 1 if the semaphore is available, and 0 if the semaphore is not available.

define vSemaphoreDelete

#define vSemaphoreDelete (
    xSemaphore
) vQueueDelete( ( QueueHandle_t ) ( xSemaphore ) )

define xSemaphoreGetMutexHolder

#define xSemaphoreGetMutexHolder (
    xSemaphore
) xQueueGetMutexHolder( ( xSemaphore ) )

semphr.h

If xMutex is indeed a mutex type semaphore, return the current mutex holder. If xMutex is not a mutex type semaphore, or the mutex is available (not held by a task), return NULL.

Note: This is a good way of determining if the calling task is the mutex holder, but not a good way of determining the identity of the mutex holder as the holder may change between the function exiting and the returned value being tested.

define xSemaphoreGetMutexHolderFromISR

#define xSemaphoreGetMutexHolderFromISR (
    xSemaphore
) xQueueGetMutexHolderFromISR( ( xSemaphore ) )

semphr.h

If xMutex is indeed a mutex type semaphore, return the current mutex holder. If xMutex is not a mutex type semaphore, or the mutex is available (not held by a task), return NULL.

define xSemaphoreGive

#define xSemaphoreGive (
    xSemaphore
) xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )

define xSemaphoreGiveFromISR

#define xSemaphoreGiveFromISR (
    xSemaphore,
    pxHigherPriorityTaskWoken
) xQueueGiveFromISR( ( QueueHandle_t ) ( xSemaphore ), ( pxHigherPriorityTaskWoken ) )

define xSemaphoreTake

#define xSemaphoreTake (
    xSemaphore,
    xBlockTime
) xQueueSemaphoreTake( ( xSemaphore ), ( xBlockTime ) )

define xSemaphoreTakeFromISR

#define xSemaphoreTakeFromISR (
    xSemaphore,
    pxHigherPriorityTaskWoken
) xQueueReceiveFromISR( ( QueueHandle_t ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) )

semphr. h

Macro to take a semaphore from an ISR. The semaphore must have previously been created with a call to xSemaphoreCreateBinary() or xSemaphoreCreateCounting().

Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) must not be used with this macro.

This macro can be used from an ISR, however taking a semaphore from an ISR is not a common operation. It is likely to only be useful when taking a counting semaphore when an interrupt is obtaining an object from a resource pool (when the semaphore count indicates the number of resources available).

Parameters:

  • xSemaphore A handle to the semaphore being taken. This is the handle returned when the semaphore was created.
  • pxHigherPriorityTaskWoken xSemaphoreTakeFromISR() will set *pxHigherPriorityTaskWoken to pdTRUE if taking the semaphore caused a task to unblock, and the unblocked task has a priority higher than the currently running task. If xSemaphoreTakeFromISR() sets this value to pdTRUE then a context switch should be requested before the interrupt is exited.

Returns:

pdTRUE if the semaphore was successfully taken, otherwise pdFALSE


The documentation for this class was generated from the following file fw/rbcx-coprocessor/lib/FreeRTOS/include/semphr.h