osSemaphoreAcquire() - получение токена семафора в CMSIS-RTOS2

Получение токена семафора или тайм-аут (ожидание), если токены недоступны.

osStatus_t  osSemaphoreAcquire (osSemaphoreId_t  semaphore_id,
                                uint32_t         timeout)

Параметры

semaphore_id
semaphore ID obtained by osSemaphoreNew()
Идентификатор семафора, полученный с помощью функции osSemaphoreNew().
typedef  void  *osSemaphoreId_t;
timeout
Timeout Values or 0 in case of no time-out
Значение тайм-аута (времени ожидания), пока не будет получен токен.

Параметр timeout может принимать следующие значения:

 0 :  функция не переводит задачу, вызывающую эту функцию, в заблокированный режим для ожидания токена (try semantics);

 1 :  если токен недоступен сразу, то функция переводит задачу в заблокированный режим и ожидает токен до первого ближайшего тика (timed-wait semantics);

 2 :  если токен недоступен сразу, то функция переводит задачу в заблокированный режим и ожидает токен до второго ближайшего тика (timed-wait semantics);

...

 osWaitForever :  функция будет ждать бесконечно долго, пока токен не станет доступен (wait semantics);




Возвращаемое значение

osStatus_t
status code that indicates the execution status of the function
Код состояния как индикатор выполнения функции.

Возможные возвращаемые значения:

 osOK :  токен семафора был получен и количество токенов уменьшилось;

 osErrorTimeout :  токен не удалось получить за заданное время.

 osErrorParameter :  неверно указан идентификатор семафора (semaphore_id): ошибка имени или NULL;

 osErrorResource :  токен не удалось получить из-за иной ошибки, чем osErrorTimeout;

 osErrorSafetyClass :  класс безопасности вызывающей задачи ниже, чем класс безопасности указанного семафора.




Описание

Функция osSemaphoreAcquire() ожидает, пока не станет доступен токен семафора, указанного в параметре semaphore_id.

Пока функция osSemaphoreAcquire() ожидает токен, задача, вызывающая эту функцию, находится в заблокированном состоянии. Параметр timeout указывает, как долго функция ожидает получения токена.

Как только токен становится доступным, функция osSemaphoreAcquire() переводит задачу в состоянии готовности и уменьшает количество токенов.

Функция osSemaphoreAcquire() может быть вызвана из процедуры обработки прерывания (ISR - Interrupt Service Routines) только с нулевым временем ожидания (timeout = 0).