osSemaphoreNew() - создание семафора в CMSIS-RTOS2
Создает и инициализирует объект Семафор (Semaphore), который используется для управления доступом к общим ресурсам.
osSemaphoreId_t osSemaphoreNew (uint32_t max_count,
uint32_t initial_count,
const osSemaphoreAttr_t *attr)
Параметры
max_count
maximum number of available tokens
Максимальное количество доступных токенов у семафора. Значение max_count=1 создаёт двоичный семафор.
initial_count
initial number of available tokens
Начальное количество доступных токенов у семафора.
*attr
semaphore attributes; NULL: default valuess
Указатель на структуру, содержащую атрибуты (свойства) создаваемого семафора. Если NULL - устанавливаются значения по умолчанию.
/// Attributes structure for semaphore.
typedef struct {
const char *name; /// name of the semaphore
uint32_t attr_bits; /// attribute bits
void *cb_mem; /// memory for control block
uint32_t cb_size; /// size of provided memory for control block
} osSemaphoreAttr_t;
Возвращаемое значение
osSemaphoreId_t
semaphore ID for reference by other functions or NULL in case of error
Указатель на идентификатор семафора (тип значения - osSemaphoreId_t / указатель на void) или NULL в случае ошибки.
/// \details Semaphore ID identifies the semaphore.
typedef void *osSemaphoreId_t;
Описание
Функцию osSemaphoreNew() можно безопасно вызвать до запуска ядра RTOS osKernelStart(), но не до ее инициализации osKernelInitialize().
Функция osSemaphoreNew() не может быть вызвана из процедуры обработки прерывания (ISR - Interrupt Service Routines).