Перейти к содержимому
Главная страница » Многозадачность на ардуино

Многозадачность на ардуино

Многозадачность, точнее её отсутствие — одна из основных проблем в разработке проектов на Ардуино. Процессор ардуино имеет одно ядро. Следовательно, он может выполнять только одно действие в одну единицу времени. Очень многие действия, сопровождаются работой с временными интервалами. Например: нам необходимо мигать двумя светодиодами, но с разной частотой. Допустим первый светодиод будет мигать с частотой 1 раз в секунду, а второй 1 раз в 10 секунд. Большинство начинающих разработчиков схем на ардуино, используют функцию delay(). Получаем проблему. Если программа станет на паузу 10 секунд для второго светодиода, первый светодиод просто перестанет мигать. Пример со светодиодами примитивный. Вместо светодиодов могут быть кнопки, двигатели, датчики. Чем то надо постоянно управлять, что-то надо постоянно опрашивать.

Частота процессора ардуино составляет несколько миллионов операций в секунду. Этого достаточно для решения большинства задач. Остаётся придумать, как использовать эту частоту не «замораживая» процессор паузами. Вот тут нам на помощь приходит Алекс Гувер со своими уроками.

Многозадачность на Ардуино

Краткое содержание урока по временной шкале:

00:00 — Начало 00:43 — Текстовая версия 01:06 — Проблемы с delay 01:42 — Особенности программ для МК 02:19 — FreeRTOS 03:32 — Суперцикл 04:57 — Костыль yield() 06:22 — Программный таймер 07:50 — Мигаем светодиодом 08:38 — Мигаем с разным периодом 09:05 — Программный ШИМ 09:32 — Однократное выполнение 10:32 — Выполнить действие несколько раз 10:59 — Переключение состояния процесса 11:52 — Мигаем плавно 12:53 — Обработка кнопки 14:22 — Меняем яркость кнопкой 15:06 — Переключение режимов кнопкой 16:30 — Переключение режимов по таймеру 17:57 — Библиотека таймера 20:13 — Библиотека диспетчера задач 22:28 — Кодируем пример.

Основной идеей Алекса Гувера, является использование функции millis(). Эта функция поможет создать свои счётчики времени, с которыми смогут работать заранее заданные переменные. Для каждой задачи необходимо создать свою переменную.

Так же Гувер предлагает использовать готовую библиотеку, для многозадачных проектов на Ардуино GyverOS. Приводятся подробные примеры её применения в коде. Скачать её можно отсюда https://github.com/GyverLibs/GyverOS

Основные возможности и преимущества GyverOS:

  • Лёгкий вес
  • Статическое выбираемое количество задач
  • Возможность остановки, отключения и прямого вызова задач
  • Вычисление времени до ближайшей задачи (для сна на этот период)
  • Встроенный бенчмарк: время выполнения задачи и загруженность процессора
  • Алгоритм работает на системном таймере millis()

Предлагаемое решение подходит для большинства проектов начинающих Ардуинщиков. Мы получаем как бы имитацию многозадачности. Видео несёт огромную пользу начинающим разработчикам, позволяя многократно повысить быстродействие своих программ и решить проблему одновременного опроса множества компонентов. Так же данный подход позволяет сделать скетч более грамотным и оптимизированным. В общем начинающим разработчикам рекомендуется.