tn_task_ireference()

Разрешен вызов только в прерывании

Функция предназначена для получения информации о задаче в прерывании. После вызова функции заполняется структура типа 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_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);
    }
}



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