~~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#Сервисы управления семафорами|К списку сервисов]]