You are here

Deferred Interrupt Handling - Отложенная обработка прерываний

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

Назад: [Более подробно...] Вверх: [Более подробно...] Вперёд: [Более подробно...]

 

Что такое "отложенная обработка прерываний"?

Во FreeRTOS обработчик отложенного прерывания является задачей ОС, которая разблокируется (запускается) обработчиком прерывания (ISR), поэтому обработка, вызванная прерыванием (ISR), может выполняться в разблокированной задаче, а не в самом обработчике прерывания (ISR) (мдя... типа, русский язык?). Механизм отличается от стандартной обработки прерываний, в которой вся обработка выполняется внутри обработчика прерываний, потому что бОльшая часть  обработки откладывается до выхода из обработчика прерывания (ISR).

  • Стандартная обработка прерывания

    Стандартная обработка прерывания обычно подразумевает запись причины прерывания, очистку аппаратного флага прерывания, а затем выполнение всей обработки, связанной с прерыванием. И всё это внутри обработчика прерывания.

  • Обработка отложенного прерывания

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

    Если у задачи, которой передаётся отложенная обработка прерывания, достаточно высокий приоритет, из обработчика прерывания (ISR) будет осуществлён возврат сразу к разблокированной задаче. Т.е. прерывание прервёт одну задачу, но затем вернёт управление уже в другую. Это приведёт к тому, что вся обработка прерывания будет выполнена непрерывно во времени (без зазора), как если бы вся обработка выполнялась внутри обработчика прерывания (ISR). Это показано на рисунке ниже, где вся обработка прерывания выполняется между моментами времени t2 и t4, даже с учётом того, что часть обработки выполняется задачей ОС.

    using an rtos to defer interrupt processing
    Обработка отложенного прерывания выполняется последовательно и сразу, если задача
    отложенной обработки прерывания имеет достаточно высокий приоритет.


Пояснения к изображению:

    1. В момент времени t2: Задача с низким приоритетом вытесняется прерыванием. A low priority task is pre-empted by an interrupt.
    2. В момент времени t3: Обработчик прерывания возвращает управление напрямую в задачу с высоким приоритетом, которая была разблокирована внутри обработчика прерывания.  The ISR returns directly to a task that was unblocked from within the ISR. БОльшая часть обработки прерывания выполняется внутри разблокированной задачи.
    3. В момент времени t4: Задача, которая была разблокирована в обработчике прерывания возвращается в заблокированное состояние для ожидания следующего прерывания, позволяя задаче с низким приоритетом продолжить выполнение.

     

    Когда использовать отложенную обработку прерывания?

    Большинство разработчиков встраиваемых приложений стремится минимизировать время нахождения в обработчике прерывания, чтобы уменьшить джиттер в системе, разрешить другие прерывания с таким же или более низким приоритетом, сократить время отклика на прерывание и т.д.. И применение отложенной обработки прерывания является удобным способом достижения этого. Однако механизм сначала разблокировки а затем переключения на задачу ОС также требует некоторого колчества времени, поэтому, как правило, выигрыш при обработке прерываний можно получить, если приложение: только если обработка:

    • Необходимо выполнять длительные операции, или
    • Было бы полезно использовать все функции API ОС, а не только ISR safe API (функции с суффиксом FromISR), или
    • Необходимо выполнить некоторое действие, которое не является детерминированным (в разумных пределах).

     

    Методы перекладывания обработки прерывания на задачу

    Методы перекладывания обработки прерывания на задачу делятся на две категории:

    1. Централизованная обработка отложенных прерываний

      Централизованная обработка отложенных прерываний называется так потому что каждое прерывание, которое использует этот метод, выполняется в контексте одной и той же задачи демона ОС. Задача демона ОС создаётся самой FreeRTOS, и также называется "задача обслуживания таймеров".

      Чтобы отложить обработку прерывания для задачи демона ОС, нужно передать указатель на функцию обработки прерывания в качестве параметра xFunctionToPend при вызове функции API xTimerPendFunctionCallFromISR(). Работающий пример есть на странице документации по функции xTimerPendFunctionCallFromISR().

      Преимуществом централизованной отложенной обработки прерываний является минимальное использование ресурсов, т.к. каждый обработчик отложенных прерываний использует одну и ту же задачу.

      К недостаткам централизованной обработки отложенных прерываний относятся:

      • Все функции обработки отложенных прерываний выполняются в контексте одной и той же задаче демона ОС, и, следовательно, выполняются с одним и тем же приоритетом задачи демона ОС.
      • xTimerPendFunctionCallFromISR() отправляет указатели на функции отложенной обработки прерываний в задачу демона ОС через очередь команд таймера. Следовательно, задача-демон ОСРВ обрабатывает функции в порядке их поступления в очередь, а не в порядке приоритета прерываний.
      • Запись в очередь команд таймера и последующее чтение из неё добавляет дополнительную задержку.
    2. Управляемая приложением обработка отложенных прерываний

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

      Преимущества управляемой приложением обработки отложенных прерываний:

      • Уменьшенная задержка, т.к. не нужно передавать указатель на функциючерез очередь.
      • Есть возможность назначать приоритеты для каждой задачи ОС обработки отложенного прерывания, что позволяет настроить относительные приоритеты задач-обработчиков настроить в тех же соотношениях, как и относительные приоритеты самих прерываний.

      Недостатком использования управляемой приложением обработки отложенных прерываний является большее потребность в ресурсах, т.к. как правило требуется больше отдельных задач.

    Hobby's category: