You are here

Real Time Applications

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

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

 

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

Для достижения этой цели инженер-программист сначала должен назначить приоритет каждой задаче. Политика планировщика ОСРВ тогда просто заключается в том, чтобы гарантировать предоставление процессорного времени задаче с максимальным приоритетом из числа готовых к запуску. Это может потребовать "справедливого" распределения времени между задачами с одинаковым приоритетом, если они одновременно готовы к запуску.

Пример:

Самый простой пример такой системы реального времени включает в себя клавиатуру и ЖК дисплей. Пользователь при каждом нажатии на клавишу должен получать визуальную обратную связь в течение разумного времени. Если пользователь не видит реакции системы на нажатие клавиши в течение этого времени, программный продукт в лучшем случае будет неудобным для использования. Максимально приемлемое время реакции на нажатие клавиши - не больше 100 мс (т.е. любое время от 0 до 100 мс). Эта функциональность может быть реализована как автономная задача со следующей структурой:

/*----------------------------------------------------------------------------*/
void vKeyHandlerTask( void *pvParameters )
{
    // Обработка событий клавиатуры это повторяющийся процесс, и, как задача,
    // реализован в виде бесконечного цикла (как и большинство задач в ОСРВ).
    for( ;; )
    {
        [Приостанавливаем выполнение для ожидания нажатия клавиши]

        [Обрабатываем нажатие клавиши]
    }
}

Теперь предположим, что система реального времени также выполняет функции управления, которые используют цифровую фильтрацию входящих данных. Данные должны быть прочитаны, отфильтрованы и переданы в цикл управления каждые 2 мс. Для правильной работы фильтра точность момента считывания входных данных должна быть не хуже, чем 0.5 мс. Эта функциональность может быть реализована как самостоятельная задача со следующей структурой:

/*----------------------------------------------------------------------------*/
void vControlTask( void *pvParameters )
{
    for( ;; )
    {
        [Приостанавливаем задачу до истечения 2 мс с момента старта предыдущей итерации.]

        [Считываем входное значение]
        [Фильтруем считанное значение]
        [Выполняем алгоритм управления]
        [Выводим результат]
    }
}

Инженер-программист должен назначить задаче управления наивысший приоритет, поскольку:

  1. Крайний срок выполнения для задачи управления строже, чем для задачи обработки нажатия клавиш.
  2. Последствия для пропущенного крайнего срока намного серьёзнее для задачи управления, чем для задачи обработки нажатия клавиш.

На следующей странице будет показано, как эти задачи будут планироваться операционной системой реального времени.
Далее: Основы ОСРВ - Real Time Scheduling

Hobby's category: