Available Languages?:

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/tn_sem_ipolling.txt · Последние изменения: 04.05.2008 15:38 От admin
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki