tn_task_sleep()

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

Функция переводит текущую задачу в ожидание на время не меньше чем timeout системных тиков. Если время ожидания истекло, а задача не была восстановлена (сервисом tn_task_wakeup()), задача будет выведена планировщиком из состояния ожидания и продолжит выполнение когда станет наиболее приоритетной.

Задача может быть переведена в ожидание с параметром TN_WAIT_INFINITE. В этом случае задача будет находится в ожидании до тех пор, пока не будет вызван сервис tn_task_wakeup() или tn_task_iwakeup().

Каждая задача имеет счетчик запросов на пробуждение. Если у текущей задачи этот счетчик больше или равен 1, то вызов сервиса tn_task_sleep() декрементирует счетчик, а задача продолжает выполнение.

Вызов:

TN_RETVAL tn_task_sleep (TN_TIMEOUT timeout);

Разрешен вызов:

В контексте задачи

Параметры функции:

timeout
интервал времени в системных тиках на который задача будет переведена в ожидание. timeout ⊆ [1..TN_WAIT_INFINITE], где TN_WAIT_INFINITE = 65‘535 для 16-битных контроллеров и TN_WAIT_INFINITE = 4‘294‘967‘295 для 32-битных контроллеров


Возвращаемые значения:

TERR_WRONG_PARAM
некорректное значение параметра, timeout = 0 (замечание: данный код возврата возможен только в случае использования сервисов с проверкой параметров)
TERR_WCONTEXT
попытка вызова сервиса в прерывании или в пользовательской критической секции
TERR_NO_ERR
успешное выполнение


Пример вызова:

void TN_TASK Task1 (void *param)
{
    for (;;)
    {
        /* ... */
        tn_task_sleep(10);
        /* ... */
    }
}



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