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