Перевод может содержать ошибки. Читайте первоисточник: Real Time Applications
Назад: [Как работает FreeRTOS] | Вверх: [Как работает FreeRTOS] | Вперёд: [Как работает FreeRTOS] |
Операционные системы реального времени (ОСРВ) достигают многозадачности, используя те же принципы, но их цели сильно отличаются от систем, не являющихся системами реального времени. Различия в целях отражаются в политике планировщика. Системы реального времени / встраиваемые системы предназначены для своевременного реагирования на события в реальном мире. События, происходящие в реальном мире, могут иметь крайние сроки, до которых система реального времени / встраиваемая система должна отреагировать, и политика планировщика должна обеспечивать соблюдение этих сроков.
Для достижения этой цели инженер-программист сначала должен назначить приоритет каждой задаче. Политика планировщика ОСРВ тогда просто заключается в том, чтобы гарантировать предоставление процессорного времени задаче с максимальным приоритетом из числа готовых к запуску. Это может потребовать "справедливого" распределения времени между задачами с одинаковым приоритетом, если они одновременно готовы к запуску.
Пример:
Самый простой пример такой системы реального времени включает в себя клавиатуру и ЖК дисплей. Пользователь при каждом нажатии на клавишу должен получать визуальную обратную связь в течение разумного времени. Если пользователь не видит реакции системы на нажатие клавиши в течение этого времени, программный продукт в лучшем случае будет неудобным для использования. Максимально приемлемое время реакции на нажатие клавиши - не больше 100 мс (т.е. любое время от 0 до 100 мс). Эта функциональность может быть реализована как автономная задача со следующей структурой:
/*----------------------------------------------------------------------------*/
void vKeyHandlerTask( void *pvParameters )
{
// Обработка событий клавиатуры это повторяющийся процесс, и, как задача,
// реализован в виде бесконечного цикла (как и большинство задач в ОСРВ).
for( ;; )
{
[Приостанавливаем выполнение для ожидания нажатия клавиши]
[Обрабатываем нажатие клавиши]
}
}
Теперь предположим, что система реального времени также выполняет функции управления, которые используют цифровую фильтрацию входящих данных. Данные должны быть прочитаны, отфильтрованы и переданы в цикл управления каждые 2 мс. Для правильной работы фильтра точность момента считывания входных данных должна быть не хуже, чем 0.5 мс. Эта функциональность может быть реализована как самостоятельная задача со следующей структурой:
/*----------------------------------------------------------------------------*/
void vControlTask( void *pvParameters )
{
for( ;; )
{
[Приостанавливаем задачу до истечения 2 мс с момента старта предыдущей итерации.]
[Считываем входное значение]
[Фильтруем считанное значение]
[Выполняем алгоритм управления]
[Выводим результат]
}
}
Инженер-программист должен назначить задаче управления наивысший приоритет, поскольку:
На следующей странице будет показано, как эти задачи будут планироваться операционной системой реального времени.
Далее: Основы ОСРВ - Real Time Scheduling