~~NOTOC~~
===== tn_sem_create() =====
Функция предназначена для создания семафора. Поле ''id_sem'' структуры ''sem'' должно быть равно нулю до момента создания семафора. Таким образом уже созданные семафоры защищаются от повторного создания.
Память для управляющей структуры ''sem'' должна быть выделена до момента создания семафора. Память может быть выделена на этапе компиляции (объявление глобальной переменной типа ''TN_SEM''), либо динамически, если пользовательское приложение использует менеджер памяти.
**Вызов:**
TN_RETVAL tn_sem_create(TN_SEM *sem, TN_UWORD start_value, TN_UWORD max_val);
**Разрешен вызов:** \\
В контексте задачи
**Параметры функции:**
; ''sem'' : указатель на структуру семафора типа ''TN_SEM''. Структура должна быть создана до момента вызова функции, статически или динамически
; ''start_value'' : начальное значения счетчика свободных ресурсов семафора. Если этот параметр равен 0, то семафор считается занятым на момент создания.
; ''max_val'' : максимальное значение счетчика свободных ресурсов семафора. Если этот параметр равен 1, то создается двоичный семафор.
**Возвращаемые значения:**
; ''TERR_WRONG_PARAM'' : некорректное значение параметра (__замечание:__ данный код возврата возможен только в случае использования сервисов с проверкой параметров)
; ''TERR_EXS'' : попытка создания семафора, который уже создан
; ''TERR_WCONTEXT'' : попытка создания семафора в прерывании или в пользовательской критической секции
; ''TERR_NO_ERR'' : успешное выполнение
\\
**Пример вызова:**
TN_SEM sem_test;
tn_sem_create(&sem_test, 1, 1); /* создается свободный бинарный семафор */
\\
----
[[tnkernel:ref:sem:intro#Сервисы управления семафорами|К списку сервисов]]