FreeRTOS port on GAP8/RISC-V
|
semphr. h
xSemaphoreTake( SemaphoreHandle_t xSemaphore, TickType_t xBlockTime )
Macro to obtain a semaphore. The semaphore must have previously been created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or xSemaphoreCreateCounting().
xSemaphore | A handle to the semaphore being taken - obtained when the semaphore was created. |
xBlockTime | The time in ticks to wait for the semaphore to become available. The macro portTICK_PERIOD_MS can be used to convert this to a real time. A block time of zero can be used to poll the semaphore. A block time of portMAX_DELAY can be used to block indefinitely (provided INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h). |
Example usage:
SemaphoreHandle_t xSemaphore = NULL;
A task that creates a semaphore. void vATask( void * pvParameters ) { Create the semaphore to guard a shared resource. xSemaphore = xSemaphoreCreateBinary(); }
A task that uses the semaphore. void vAnotherTask( void * pvParameters ) { ... Do other things.if( xSemaphore != NULL ) {See if we can obtain the semaphore. If the semaphore is not available wait 10 ticks to see if it becomes free. if( xSemaphoreTake( xSemaphore, ( TickType_t ) 10 ) == pdTRUE ) { We were able to obtain the semaphore and can now access the shared resource.
...
We have finished accessing the shared resource. Release the semaphore. xSemaphoreGive( xSemaphore ); } else { We could not obtain the semaphore and can therefore not access the shared resource safely. } } }