You are here

Задача простоя и ловушка задачи простоя

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

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

 

Задача простоя

Задача простоя автоматически создаётся, когда планировщик ОС стартует,  и гарантирует, что всегда имеется хотя бы одна задача, готовая к запуску. Она создаётся с минимально возможным приоритетом, чтобы гарантировать неиспользование процессорного времени, если имеется высокоприоритетная задача приложения в состоянии готовности.

Задача простоя отвечает за освобождение памяти, выделенной ОС для задач, которые уже были удалены. Поэтому важно, чтобы в  приложениях, которые используют функцию API vTaskDelete(), задача простоя не теряла полностью процессорное время. Задача простоя не имеет других активных функций, поэтому во всех других случаях может полностью терять процессорное время.

Задачи приложения могут иметь тот же приоритет, что и задача простоя (tskIDLE_PRIORITY). Параметр configIDLE_SHOULD_YIELD используется для настройки поведения таких задач.

 

Ловушка задачи простоя

Ловушка задачи простоя это функция, которая вызывается во время каждого цикла задачи простоя. Если вы хотите выполнять некоторый функционал своего приложения с приоритетом простоя, то для этого есть два варианта:

  1. Реализовать функционал в ловушке задачи простоя.

    Всегда должна быть хотя бы одна задача, которая готова к выполнению. Следовательно, функция-ловушка задачи простоя никогда не должна вызывать какие-либо функции API, которые могут привести к блокировке задачи простоя. Например, vTaskDelay() или функции работы с очередями или семафорами с указанием ненулевого времени блокировки. Это нормально, если сопрограммы блокируются внутри функции-ловушки (этого пока не осознал). It is ok for co-routines to block within the hook function.

  2. Создать задачу с назначенным приоритетом простоя для реализации функциональности.

    Это более гибкое решение, но влечёт за собой использование дополнительного объёма ОЗУ.

Дополнительная информация об использовании ловушки задачи простоя находится в разделе Учебник: разработка приложений реального времени.

Для создания ловушки задачи простоя:

  1. Установите значение параметра configUSE_IDLE_HOOK в 1.
  2. Определите функцию с таким именем прототипом:
    void vApplicationIdleHook( void );

Чаще всего функция-ловушки задачи простоя используется для перевода микроконтроллера в режим пониженного энергопотребления.

 

Hobby's category: