Available Languages?:

tn_event_iwait()

Функция предназначена для проверки битовой маски флага в прерывании.

Условие проверки определяется маской wait_pattern и режимом ожидания wait_mode. Если условие выполняется, битовая маска флага будет возвращена по указателю p_flags_pattern.

Если на момент вызова функции условие не выполняется, функция вернет код ошибки TERR_TIMEOUT.

Если флаг evf имеет атрибут TN_EVENT_ATTR_SINGLE, а очередь ожидания флага не пуста, то функция вернет код ошибки TERR_ILUSE, что означает попытку проверки флага, предназначенного только для одной (уже ожидающей его) задачи.

Если флаг evf имеет атрибут TN_EVENT_ATTR_CLR, битовая маска флага обнуляется.

Параметр wait_mode формирует условие совпадения. Если wait_mode == TN_EVENT_WCOND_OR, то условие будет выполнено, если хотя бы один бит из битовой маски флага будет соответствовать wait_pattern. Если wait_mode == TN_EVENT_WCOND_AND, то для выполнения условия необходимо чтобы все биты битовой маски флага соответствовали параметру wait_pattern.

Вызов:

TN_RETVAL tn_event_iwait (TN_EVENT *evf,
                          TN_UWORD wait_pattern,
                          TN_UWORD wait_mode,
                          TN_UWORD *p_flags_pattern
                         );

Разрешен вызов:

В прерывании

Параметры функции:

evf
указатель на объект типа флаг
wait_pattern
параметр сравнения с битовой маской флага
wait_mode
условие совпадения, может принимать одно из двух значений:

TN_EVENT_WCOND_OR условие выполняется, если хотя бы один из битов маски флага совпадает с маской сравнения wait_pattern
TN_EVENT_WCOND_AND условие выполняется только в том случае, если хотя все биты маски флага совпадают с маской сравнения wait_pattern

p_flags_pattern
указатель по которому возвращается значение битовой маски флага если условие выполнено


Возвращаемые значения:

TERR_WRONG_PARAM
некорректное значение параметра 1)
TERR_NOEXS
попытка обращения к объекту, не являющегося флагом 2)
TERR_WCONTEXT
попытка проверки флага в контексте задачи
TERR_ILUSE
попытка проверки флага с атрибутом TN_EVENT_ATTR_SINGLE, если его очередь ожидания не пуста
TERR_TIMEOUT
условие не выполняется
TERR_NO_ERR
успешное выполнение


Пример вызова:

extern TN_EVENT event_test;
 
tn_sys_interrupt (_T2Interrupt)        /* прерывание от таймера */
{
    TN_UWORD flag;
 
    IFS0bits.T2IF = 0;                 /* сброс флага прерывания */
    tn_event_wait(&event_test, 0x8000, TN_EVENT_WCOND_AND, &flag);
}



К списку сервисов

1) , 2) данный код возврата возможен только в случае использования сервисов с проверкой параметров
 
tnkernel/ref/event/tn_event_iwait.txt · Последние изменения: 21.07.2008 00:45 От admin
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki