~~NOTOC~~ ===== tn_task_reference() ===== {{tnkernel:ref:attr_call_task.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_reference(TN_TCB *task, TN_TASK_REF *ref); **Разрешен вызов:** \\ В контексте задачи **Параметры функции:** ; ''task'' : указатель на TCB задачи ; ''ref'' : указатель на структуру информации о задаче **Возвращаемые значения:** ; ''TERR_WRONG_PARAM'' : некорректное значение параметра (__замечание:__ данный код возврата возможен только в случае использования сервисов с проверкой параметров) ; ''TERR_NOEXS'' : задача не существует (еще не создана) ; ''TERR_WCONTEXT'' : попытка вызова сервиса в прерывании или в пользовательской критической секции ; ''TERR_NO_ERR'' : успешное выполнение \\ **Пример вызова:** TN_TASK_REF task_info; if (tn_task_reference(&task_1, &task_info) == TERR_NO_ERR) { if (task_info.state == TSK_STATE_WAIT && task_info.wait_reason == TSK_WAIT_REASON_SLEEP ) { tn_task_wakeup(&task_1); } } if (tn_task_reference(&task_1, &task_info) == TERR_NOEXS) { /* задача не создана */ } \\ ---- [[tnkernel:ref:task:intro#сервисы_управления_задачами|К списку сервисов]]