~~NOTOC~~ ===== 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'' : условие совпадения, может принимать одно из двух значений: {| class = "fpl" |- | ''TN_EVENT_WCOND_OR'' | условие выполняется, если хотя бы один из битов маски флага совпадает с маской сравнения ''wait_pattern'' |- | ''TN_EVENT_WCOND_AND'' | условие выполняется только в том случае, если хотя все биты маски флага совпадают с маской сравнения ''wait_pattern'' |} ; ''p_flags_pattern'' : указатель по которому возвращается значение битовой маски флага если условие выполнено \\ **Возвращаемые значения:** ; ''TERR_WRONG_PARAM'' : некорректное значение параметра ((данный код возврата возможен только в случае использования сервисов с проверкой параметров)) ; ''TERR_NOEXS'' : попытка обращения к объекту, не являющегося флагом ((данный код возврата возможен только в случае использования сервисов с проверкой параметров)) ; ''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); } \\ ---- [[tnkernel:ref:event:intro#Сервисы управления флагами|К списку сервисов]]