~~NOTOC~~ ===== tn_sem_isignal() ===== Сервис увеличивает счетчик свободных ресурсов семафора или, другими словами, //освобождает семафор// в прерывании. Если семафор был занят, то задача, стоящая первой в очереди ожидающих семафор, активируется после выхода из прерывания. Счетчик ресурсов семафора при этом не меняется. Если очередь задач ожидающих семафор пуста, и счетчик свободных ресурсов меньше максимального значения, то он увеличивается на единицу. Если счетчик свободных ресурсов равен максимальному значению, то он не увеличивается и сервис возвращает код ''TERR_OVERFLOW''. **Вызов:** TN_RETVAL tn_sem_isignal (TN_SEM *sem); **Разрешен вызов:** \\ В прерывании **Параметры функции:** ; ''sem'' : указатель на структуру семафора \\ **Возвращаемые значения:** ; ''TERR_WRONG_PARAM'' : некорректное значение параметра (__замечание:__ данный код возврата возможен только в случае использования сервисов с проверкой параметров) ; ''TERR_NOEXS'' : попытка освобождения объекта, не являющегося семафором. ; ''TERR_WCONTEXT'' : попытка освобождения семафора в контексте задачи ; ''TERR_OVERFLOW'' : счетчик свободных ресурсов достиг максимального значение ; ''TERR_NO_ERR'' : успешное выполнение \\ **Пример вызова:** extern TN_SEM sem_test; tn_sys_interrupt (_T2Interrupt) /* прерывание от таймера */ { IFS0bits.T2IF = 0; /* сброс флага прерывания */ tn_sem_isignal(&sem_test); /* освобождение семафора sem_test */ } \\ ---- [[tnkernel:ref:sem:intro#Сервисы управления семафорами|К списку сервисов]]