osSemaphoreAcquire() - получение токена семафора в CMSIS-RTOS2
Получение токена семафора или тайм-аут (ожидание), если токены недоступны.
osStatus_t osSemaphoreAcquire (osSemaphoreId_t semaphore_id,
uint32_t timeout)
Параметры
typedef void *osSemaphoreId_t;
Параметр timeout может принимать следующие значения:
0 : функция не переводит задачу, вызывающую эту функцию, в заблокированный режим для ожидания токена (try semantics);
1 : если токен недоступен сразу, то функция переводит задачу в заблокированный режим и ожидает токен до первого ближайшего тика (timed-wait semantics);
2 : если токен недоступен сразу, то функция переводит задачу в заблокированный режим и ожидает токен до второго ближайшего тика (timed-wait semantics);
...
osWaitForever : функция будет ждать бесконечно долго, пока токен не станет доступен (wait semantics);
Возвращаемое значение
Возможные возвращаемые значения:
osOK : токен семафора был получен и количество токенов уменьшилось;
osErrorTimeout : токен не удалось получить за заданное время.
osErrorParameter : неверно указан идентификатор семафора (semaphore_id): ошибка имени или NULL;
osErrorResource : токен не удалось получить из-за иной ошибки, чем osErrorTimeout;
osErrorSafetyClass : класс безопасности вызывающей задачи ниже, чем класс безопасности указанного семафора.
Описание
Функция osSemaphoreAcquire() ожидает, пока не станет доступен токен семафора, указанного в параметре semaphore_id.
Пока функция osSemaphoreAcquire() ожидает токен, задача, вызывающая эту функцию, находится в заблокированном состоянии. Параметр timeout указывает, как долго функция ожидает получения токена.
Как только токен становится доступным, функция osSemaphoreAcquire() переводит задачу в состоянии готовности и уменьшает количество токенов.
Функция osSemaphoreAcquire() может быть вызвана из процедуры обработки прерывания (ISR - Interrupt Service Routines) только с нулевым временем ожидания (timeout = 0).