~~NOTOC~~ ===== tn_task_ireference() ===== {{tnkernel:ref:attr_call_int.png|Разрешен вызов только в прерывании}} Функция предназначена для получения информации о задаче в прерывании. После вызова функции заполняется структура типа ''TN_TASK_REF'', указатель на которую передается в качестве параметра функции: typedef struct _TN_TASK_REF { TN_TASK_STATE state; TN_TASK_WAIT_REASON wait_reason; TN_UWORD base_priority; TN_UWORD current_priority; TN_TIMEOUT timeout; } TN_TASK_REF; В состав структура ''TN_TASK_REF'' входят следующие элементы: ; ''state'' : состояние задачи, может принимать одно из следующих значений: {| class = "fpl" |- | ''TSK_STATE_RUNNABLE'' | Задача находится в очереди готовых к выполнению |- | ''TSK_STATE_WAIT'' | Задача ожидает событие |- | ''TSK_STATE_SUSPEND'' | Задача приостановлена |- | ''TSK_STATE_DORMANT'' | Задача создана, но еще не запущена |} ; ''wait_reason'' : событие, которого ожидает задача, может принимать одно из следующих значений: {| class = "fpl" |- | ''TSK_WAIT_REASON_SLEEP'' | Задача ожидает таймаута, переведена в состояние ожидания функцией ''tn_task_sleep()'' |- | ''TSK_WAIT_REASON_SEM'' | Задача ожидает освобождения семафора |- | ''TSK_WAIT_REASON_EVENT'' | Задача ожидает флаг |- | ''TSK_WAIT_REASON_DQUE_WSEND'' | Задача ожидает освобождение очереди сообщений |- | ''TSK_WAIT_REASON_DQUE_WRECEIVE'' | Задача ожидает сообщения |- | ''TSK_WAIT_REASON_MUTEX_C'' | Задача ожидает освобождения ресурса, заблокированного "priority ceiling" мютексом FIXME |- | ''TSK_WAIT_REASON_MUTEX_C_BLK'' | Задача ожидает освобождения ресурса, заблокированного "priority ceiling" мютексом FIXME |- | ''TSK_WAIT_REASON_MUTEX_I'' | Задача ожидает освобождения ресурса, заблокированного "priority inheritance" мютексом |- | ''%%TSK_WAIT_REASON_WFIXMEM%%'' | Задача ожидает освобождения блока памяти фиксированного размера |} ; ''base_priority'' : базовый приоритет задачи (назначенный при ее создании) ; ''current_priority'' : текущий приоритет задачи ; ''timeout'' : время в системных тиках до момента перевода задачи в состояние ''TSK_STATE_RUNNABLE'' (актуально в случае, если задача находится в состоянии ожидания с таймаутом) \\ **Вызов:** TN_RETVAL tn_task_ireference(TN_TCB *task, TN_TASK_REF *ref); **Разрешен вызов:** \\ В прерывании **Параметры функции:** ; ''task'' : указатель на TCB задачи ; ''ref'' : указатель на структуру информации о задаче **Возвращаемые значения:** ; ''TERR_WRONG_PARAM'' : некорректное значение параметра (__замечание:__ данный код возврата возможен только в случае использования сервисов с проверкой параметров) ; ''TERR_NOEXS'' : задача не существует (еще не создана) ; ''TERR_WCONTEXT'' : попытка вызова сервиса в контексте задачи ; ''TERR_NO_ERR'' : успешное выполнение \\ **Пример вызова:** extern TN_TCB tcb_Task1 TN_DATA; TN_TASK_REF task_info; tn_sys_interrupt (_T2Interrupt) /* прерывание от таймера */ { IFS0bits.T2IF = 0; /* сброс флага прерывания */ if (tn_task_ireference(&tcb_Task1, &task_info) == TERR_NO_ERR) { if (task_info.state == TSK_STATE_SUSPEND) tn_task_iresume(&tcb_Task1); } } \\ ---- [[tnkernel:ref:task:intro#сервисы_управления_задачами|К списку сервисов]]