You are here

Состояния задачи

Перевод может содержать ошибки. Читайте первоисточник: Task States

Назад: [Как работает FreeRTOS] Вверх: [Задачи] Вперёд: [Как работает FreeRTOS]

 

Задача может находиться в одном из следующих состояний:

  • Запущена (Running)

    Когда задача фактически выполняется, она называется находящейся в запущенном состоянии. И в настоящий момент использует процессор. Если процессор, на котором запущена ОСРВ, имеет только одно ядро, то только одна задача может находиться в запущенном состоянии в любой данный момент времени.

  • Готова (Ready)

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

  • Заблокирована (Blocked)

    Говорят, что задача находится в заблокированном состоянии, или заблокирована, если она в данный момент ожидает либо временнОго, либо внешнего события. Например, если задача вызывает функцию API vTaskDelay(), она будет заблокирована (перейдёт в заблокированное состояние), пока не истечёт время задержки - это временнОе событие. Задачи также могут быть заблокированы в ожидании данных в очереди, в ожидании семафора, группы событий, уведомления или события семафора or semaphore event. Задачи в заблокированном состоянии обычно имеют период ожидания, после которого задача будет разблокирована, даже если событие, которого ожидала задача, не произошло.

    Задачи в заблокированном состоянии не используют процессорное время и не могут быть выбраны для перевода в запущенное состояние.

  • Приостановлена (Suspended)

    Как и задачи, находящиеся в заблокированном состоянии, задачи в приостановленном состоянии не могут быть выбраны для перевода в запущенное состояние. Но задачи в приостановленном состоянии не имеют времени ожидания (таймаута). Вместо этого, задачи могут входить и выходить из приостановленного состояния только если явно указано сделать это. Для входа и выхода из приостановленного состояния служат функции API vTaskSuspend() и xTaskResume() соответственно.

Допустимые переходы между состояниями задачи

 

Hobby's category: