Функция предназначена для проверки битовой маски флага без блокировки задачи.
Условие проверки определяется маской 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_wait_polling (TN_EVENT *evf, TN_UWORD wait_pattern, TN_UWORD wait_mode, TN_UWORD *p_flags_pattern );
Разрешен вызов:
В контексте задачи
Параметры функции:
evfwait_patternwait_mode
TN_EVENT_WCOND_OR |
условие выполняется, если хотя бы один из битов маски флага совпадает с маской сравнения wait_pattern |
TN_EVENT_WCOND_AND |
условие выполняется только в том случае, если хотя все биты маски флага совпадают с маской сравнения wait_pattern |
p_flags_pattern
Возвращаемые значения:
TERR_WRONG_PARAMTERR_NOEXSTERR_WCONTEXTTERR_ILUSETN_EVENT_ATTR_SINGLE, если его очередь ожидания не пустаTERR_TIMEOUTTERR_NO_ERR
Пример вызова:
TN_EVENT event_test; TN_UWORD flag; if (tn_event_wait_polling(&event_test, 0x8000, TN_EVENT_WCOND_AND, &flag) == TERR_TIMEOUT) { /* ... */ }