Перевод может содержать ошибки. Читайте первоисточник: The RTOS Tick
Назад: [Как работает FreeRTOS] | Вверх: [Как работает FreeRTOS] | Вперёд: [Как работает FreeRTOS] |
Во время сна (sleeping) задача ОС будет указывать время, после которого она должна быть 'возобновлена'. Когда задача ОС заблокирована (blocking), она может указывать максимальное время ожидания.
Ядро реального времени во FreeRTOS измеряет время, используя переменную подсчёта тиков. Прерывание таймера (прерывание тиков ОС) увеличивает значение счётчика тиков со строгой временнОй точностью, что позволяет ядру реального времени измерять время с разрешением, соответствующим выбранной частоте прерываний таймера.
Каждый раз, когда увеличивается значение счётчика тиков, ядро реального времени должно проверять, не пришло ли время для разблокировки или пробуждения задачи. Возможна ситуация, когда задача, разбуженная или разблокированная во время выполнения обработчика прерывани тика, будет иметь больший приоритет, чем та задача, которая была прервана. В этом случае из обработчика прерывания тика управление будет возвращено вновь разбуженной/разблокированной задаче - эффективно прерывая одна задача, но возвращаясь в другую. Такая ситуация проиллюстрирована ниже:
Пояснения к иллюстрации выше:
Происходящее таким способом переключение контекста называется вытесняющим (preemptive), поскольку прерываемая задача вытесняется без добровольного (само)приостановления.
Порт FreeRTOS для AVR использует событие по совпадению на таймере 1 для генерации тиков ОС. Последующие страницы определяют, как прерывание тиков ОС реализуется с использованием среды разработки WinAVR.