Сервис предназначен для захвата одного ресурса семафора в прерывании.
Если счетчик свободных ресурсов семафора больше нуля (семафор свободен), он уменьшается на единицу. Если счетчик свободных ресурсов семафора равен нулю (семафор захвачен), сервис возвращает код 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) { /* ... */ } }