Перейти к публикации
iT4iT.CLUB

[esp8266] Библиотека Cron, реализует планировщик задач для периодического выполнения пользовательских функций. 1.0

   (0 отзывов)

3 скриншота

Описание файла

Основная задача библиотеки, это вызов пользовательских функций через установленный интервал времени. Библиотека работает по схожему принципу с широко известной программой Cron распространяемой в составе UNIX систем. От этой утилиты библиотека и унаследовала название.

Библиотека работает исходя из принципов однопоточного выполнения кода в микроконтроллере. Когда обработчик библиотеки получает процессорное время, он проверяет список всех пользовательских задач в поиске задач, которые необходимо выполнить, основываясь на установленном интервале времени для каждой задачи.

Данная библиотека предоставляет следующий функционал

  • Позволяет добавлять большое количество пользовательских заданий в виде функций. Количество задач ограничено только их сложностью и свободной памятью микроконтроллера.
  • Предоставляет возможность холодного старта задачи. Дает возможность вызова задачи при старте микроконтроллера с последующим выполнением задачи через установленный интервал времени.
  • Поиск задачи по лексическому идентификатору.
  • Получение время последнего вызова задачи.
  • Обнуление интервала вызова задачи или установку нового интервала в мс.
  • Останавливать задачу на неопределенный срок.
  • Проверять активность задачи.

Подключение библиотеки

#include <cron.h>

Пример добавление задачи, которая вызывает функцию blink_f каждую секунду

cron.add(1000, blink_f);

Добавление этой же задачи в режиме холодного старта

cron.add(1000, blink_f, true);

Добавление задачи и присвоение ей человек понятного идентификатора

cron.add(1000, blink_f, "Blink");

Добавление задачи с холодным стартом и присвоением ей человек понятного идентификатора

cron.add(1000, blink_f, "Blink", true);

В качестве временного интервала вызова задачи необходимо указывать количество миллисекунд. Но можно воспользоваться готовыми константами.

Фундаментальные константы

  • cron::second
  • cron::minute
  • cron::hour
  • cron::day

Самые распространенные значения

  • cron::time_1s
  • cron::time_5s
  • cron::time_10s
  • cron::time_15s
  • cron::time_30s
  • cron::time_1m
  • cron::time_5m
  • cron::time_10m
  • cron::time_15m
  • cron::time_30m
  • cron::time_1h
  • cron::time_5h
  • cron::time_10h
  • cron::time_12h
  • cron::time_1d

С константами можно производить арифметические операции чтобы получить необходимые временные интервалы.

cron.update("Blink", cron::time_1s);
cron.update("Blink", cron::time_1s * 12);
cron.update("Blink", cron::time_30s + 500);

и т.д

В функции loop должна находится команда вызова обработчика.

void loop() {
  cron.handleEvents();
}

Поиск задачи по установленному ранее идентификатору

cron.find("Blink");

В ответ возвращается объект типа cronEvent который содержит все данные задачи или 0 если задача не была найдена. Можно использовать в качестве простой проверки.

if (cron.find("Blink")) {
  /* … */
}

Следующий метод позволяет получить время последнего вызова задачи

uint32_t time = cron.lastRun("Blink");

В качестве параметра можно передать идентификатор с типом cronEvent полученный с помощью метода поиска задачи.

Перезапуск таймера задачи производится следующим образом

cron.update("Blink");

А так можно установить новый интервал вызова задачи

cron.update("Blink", cron::time_10m);

Остановка выполнения задачи

cron.stop("Blink");

Проверка активности задачи

bool active = cron.isActive("Blink");

С библиотекой идут несколько примеров.




Отзывы пользователей

Создайте аккаунт или войдите в него для публикации отзыва

Вы должны быть зарегистрированным пользователем для публикации отзыва

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

Нет отзывов для отображения.

×