Лекция "Введение в операционные системы реального времени"

YOUTUBE · 18.11.2025 18:33

Ключевые темы и таймкоды

Введение в операционные системы реального времени

0:07
  • Операционная система реального времени работает в режиме реального времени.
  • Важно не только выполнение задачи, но и выполнение в нужный момент времени.
  • Пример: конвейер, где подача жидкости должна происходить в нужный момент.

Особенности операционных систем реального времени

2:33
  • Операционная система компилируется вместе с кодом и записывается в контроллер.
  • Невозможность установки дополнительных программ.
  • Основная задача: распределение времени процессора между задачами.

Примеры операционных систем реального времени

3:49
  • Самая популярная ОС реального времени - FreeRTOS.
  • FreeRTOS используется для примера в этом видео.

Многозадачность и выполнение задач

4:13
  • Многозадачность: выполнение нескольких задач параллельно.
  • Процессор выполняет задачи последовательно, переходя между ними.

Определения задач и процессов

5:25
  • Задача - набор операций для выполнения логической функции.
  • Процесс - отдельно загружаемый программный модуль.
  • Поток - часть процесса, выполняемая параллельно.

Системный таймер и планировщик задач

6:44
  • Системный таймер формирует прерывания через равные промежутки времени.
  • Планировщик задач определяет, какая задача будет выполняться в данный момент.

Состояния задач

7:42
  • Задача может быть в состоянии готовности, выполнения, блокировки или приостановлена.
  • Переход между состояниями зависит от действий задачи и планировщика.

Примеры задач и их выполнение

12:08
  • Задачи представляют собой отдельные функции с бесконечными циклами.
  • Планировщик задач передает процессорное время между задачами.
  • Пример: мигание светодиода и считывание состояния кнопки.

Свойства задач

13:55
  • Приоритет определяет порядок выполнения задач.
  • Контекст задачи включает данные, закрепленные за конкретной задачей.
  • Многократный запуск позволяет запускать одну и ту же задачу несколько раз.
  • Рентерабельность позволяет прервать выполнение функции и продолжить с того же места.
  • Пустая задача выполняется, когда нет других задач в очереди.

Функции управления задачами

15:46
  • Функции управления задачами включают создание, удаление, задержку, установку приоритета и приостановление.
  • Функции с суффиксом "from" используются только из обработчика прерываний.
  • Эти функции не имеют тайм-аутов и должны выполняться быстро, чтобы не потерять другие прерывания.

Передача данных между задачами

19:18
  • Для передачи данных между задачами используется очередь.
  • Глобальные переменные могут привести к потере данных при прерываниях.
  • Очередь работает по принципу FIFO или LIFO и позволяет передавать данные между задачами.

Пример использования очереди

23:14
  • Задача, считывающая кнопки, помещает данные в очередь.
  • Задача, управляющая светодиодами, считывает данные из очереди и выполняет действия.
  • В режиме блокировки задача ждет появления данных в очереди, чтобы продолжить выполнение.

Обработка задач в очереди

25:40
  • Переход к следующей задаче происходит только после завершения текущей.
  • Планировщик задач выбирает, какую задачу выполнять, в зависимости от приоритета.
  • Время выполнения задачи может варьироваться от одного такта до нескольких.

Типы многозадачности

27:37
  • Кооперативная многозадачность позволяет одной задаче занимать процессорное время.
  • Вытесняющая многозадачность предотвращает зависание системы, передавая управление другой задаче.
  • Оба типа имеют свои преимущества и недостатки.

Обработка кнопок и прерываний

30:31
  • Пример с кнопками показывает, как можно пропустить нажатие второй кнопки.
  • Для быстрой обработки кнопок рекомендуется использовать прерывания.
  • Пример показан для обучения, а не для реального использования.

Передача данных между задачами

31:46
  • Использование структур данных для передачи различных типов данных.
  • Пример с передачей данных UART, температуры и клавиатуры в одну очередь.
  • Данные обрабатываются в порядке поступления, что позволяет принимать решения на основе различных типов данных.

Функции для работы с очередями

34:27
  • Функции для работы с очередями: создание, удаление, сброс, помещение в конец и начало.
  • Примеры использования функций для срочной обработки данных.
  • Функции для работы в обработчике прерываний.

Семафоры

36:07
  • Семафоры бывают двоичными и счетными.
  • Пример двоичного семафора: булева переменная, которая используется для выполнения действий при выставлении флага.
  • Семафоры позволяют синхронизировать выполнение задач в многозадачной системе.

Счетные семафоры

37:19
  • Счетные семафоры хранят количество запросов на семафор.
  • Каждое срабатывание события инкрементирует значение семафора.
  • Пример: нажатие кнопки вызывает инкремент семафора, что позволяет выполнить действие несколько раз.

Применение семафоров

38:47
  • Семафоры передают управление между задачами.
  • Позволяют переводить задачи из состояния блокировки в состояние готовности.

Пример использования семафоров

39:11
  • Пример с тремя задачами: чтение кнопки, включение светодиода.
  • Семафоры используются для управления доступом к ресурсам.
  • Задачи ждут установки семафоров для выполнения следующей строки кода.

Мьютексы

41:10
  • Мьютексы используются для разделения доступа к ресурсам.
  • Пример с UART: задачи не могут мешать друг другу при передаче данных.
  • Мьютекс позволяет одной задаче использовать ресурс, пока другая ждет освобождения.

Проблемы с мьютексами

44:33
  • Взаимная блокировка задач может привести к зависанию программы.
  • Сторожевой таймер может помочь выйти из зависания, но это крайний случай.
  • Важно избегать ситуаций, когда задачи захватывают мьютексы одновременно.

Работа с мьютексами и семафорами

47:24
  • Мьютексы и семафоры имеют одинаковый набор API функций.
  • Пример операционной системы реального времени не был показан из-за технических проблем.
  • В будущем планируется показать примеры работы с операционной системой реального времени.