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