You are here

The RTOS Tick

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

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

 

Во время сна (sleeping) задача ОС будет указывать время, после которого она должна быть 'возобновлена'. Когда задача ОС заблокирована (blocking), она может указывать максимальное время ожидания.

Ядро реального времени во FreeRTOS измеряет время, используя переменную подсчёта тиков. Прерывание таймера (прерывание тиков ОС) увеличивает значение счётчика тиков со строгой временнОй точностью, что позволяет ядру реального времени измерять время с разрешением, соответствующим выбранной частоте прерываний таймера.

Каждый раз, когда увеличивается значение счётчика тиков, ядро реального времени должно проверять, не пришло ли время для разблокировки или пробуждения задачи. Возможна ситуация, когда задача, разбуженная или разблокированная во время выполнения обработчика прерывани тика, будет иметь больший приоритет, чем та задача, которая была прервана. В этом случае из обработчика прерывания тика управление будет возвращено вновь разбуженной/разблокированной задаче - эффективно прерывая одна задача, но возвращаясь в другую. Такая ситуация проиллюстрирована ниже:

TickISR.gif

Пояснения к иллюстрации выше:

  • (1) Выполняется задача простоя ОС.
  • (2) Происходит прерывание тика ОС.
  • (3) Управление передаётся обработчику прерывания тиков ОС.
  • Прерывание тиков ОС переводит задачу vControlTask в состояние готовности к выполнению, и vControlTask имеет приоритет больший, чем задача простоя ОС. Поэтому выполняется переключение контекста на контекст задачи vControlTask.
  • (4) Теперь контекст выполнения соответствует задаче vControlTask, и возврат из обработчика прерывания тиков осуществляется в задачу vControlTask.
  • (5) Далее выполняется задача vControlTask.

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

Порт FreeRTOS для AVR использует событие по совпадению на таймере 1 для генерации тиков ОС. Последующие страницы определяют, как прерывание тиков ОС реализуется с использованием среды разработки WinAVR.


Далее: Реализаци RTOS - Атрибут GCC 'Signal'

Hobby's category: