You are here

Real Time Scheduling

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

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

 

На рисунке ниже показано, как задачи, определённые на предыдущей странице, будут планироваться операционной системой реального времени. ОСРВ сама создаёт задачу - "задачу простоя" (idle task), которая будет запускаться только когда нет других задач, готовых к выполнению. Задача простоя всегда находится в состоянии готовности к запуску.

Метки на рисунке выше:

  • В момент старта ни одна из двух наших задач не может быть запущена: vControlTask ожидает корректного времени для старта нового цикла управления, а vKeyHandlerTask ждёт, пока будет нажата какая-либо клавиша. Процессорное время отдано задаче простоя ОСРВ.
  • (t1) Происходит нажатие клавиши. Теперь vKeyHandlerTask находится в состоянии готовности к запуску. И, т.к. она имеет более высокий приоритет, чем задача простоя ОСРВ, ей отводится процессорное время.
  • (t2) Задача vKeyHandlerTask завершает обработку нажатия клавиши и обновление ЖК-дисплея. Она не может продолжать выполнение, пока не будет нажата другая клавиша, поэтому переходит в приостановленное состояние, и ОСРВ возобновляет выполнение задачи простоя.
  • (t3) Событие таймера показывает, что пора запускать следующий цикл управления. vControlTask может теперь выполняться и, как задача с наивысшим приоритетом, получает управление немедленно.
  • Между (t3) и (t4), когда продолжает выполняться задача vControlTask, происходит нажатие клавиши. Теперь vKeyHandlerTask может выполняться, но, поскольку она имеет меньший приоритет, чем vControlTask, пока что не получает процессорного времени.
  • (t4) Задача vControlTask завершает цикл управления и не будет ничего делать до начала следующего цикла управления. Поэтому она переходит в приостановленное состояние до следующего события таймера. А управление получает задача vKeyHandlerTask, как задача с наибольшим приоритетом из числа готовых к запуску. Эта задача обрабатывает произошедшее чуть раньше нажатие клавиши.
  • (t5) Задача vKeyHandlerTask завершает обработку нажатия клавиши и переходит в состояние ожидания следующего события клавиши. Теперь ни одна из наших задач не находится в состоянии готовности к запуску, поэтому процессорное время получает задача простоя ОС.
  • Между (t5) и (t6) происходит обработка события таймера, но уже без нажатия клавиши.
  • (t6) Происходит следующее нажатие клавиши. Задача vKeyHandlerTask переходит в запущенное состояние и начинает обработку нажатия клавиши.
  • (t7) Во время обработки нажатия клавиши задачей vKeyHandlerTask происходит событие таймера. Теперь обе задачи готовы к запуску. И, поскольку задача vControlTask имеет более высокий приоритет, задача vKeyHandlerTask приостанавливается до завершения обработки нажатия клавиши, и процессорное время получает задача vControlTask для обработки события таймера.
  • (t8) Задача vControlTask завершает цикл управления и переходит в приостановленное состояние для ожидания следующего события таймера. Поэтому задача vKeyHandlerTask снова оказывается задачей с наивысшим приоритетом из числа готовых к запуску, и получает процессорное время.
  • (t9) Задача vKeyHandlerTask завершает обработку нажатия клавиши и переходит в пристановленное состояние до следующего нажатия клавиши. Т.к. больше нет задач, готовых к запуску, управление получает задача простоя ОС.


Далее: Section 2 - RTOS Implementation

Hobby's category: