tn_task_reference()

Разрешен вызов только в контексте задачи

Функция предназначена для получения информации о задаче, такой как текущее состояние, причина ожидания, время таймаута, текущий приоритет и др. После вызова функции заполняется структура типа 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
состояние задачи, может принимать одно из следующих значений:

TSK_STATE_RUNNABLE Задача находится в очереди готовых к выполнению
TSK_STATE_WAIT Задача ожидает событие
TSK_STATE_SUSPEND Задача приостановлена
TSK_STATE_DORMANT Задача создана, но еще не запущена

wait_reason
событие, которого ожидает задача, может принимать одно из следующих значений:

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)
{
    /* задача не создана */
}



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