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).