Перейти к публикации
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");

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




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

Рекомендованные комментарии

Нет комментариев для отображения

Пожалуйста, войдите для комментирования

Вы сможете оставить комментарий после входа



Войти сейчас
×
×
  • Создать...