About This File
Основная задача библиотеки, это вызов пользовательских функций через установленный интервал времени. Библиотека работает по схожему принципу с широко известной программой 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");
С библиотекой идут несколько примеров.