Найти в Дзене

Программный таймер. Возможности SDK ESP8266

Для работы программного таймера ESP8266, понадобится 3 функции из SDK, это все что нужно - всего 3: os_timer_arm os_timer_disarm os_timer_setfn прототипы которых находятся в файле /ESP8266_NONOS_SDK/include/osapi.h Т.к. os_timer являются функциями программного таймера, выполнения обратного вызова может произойти с некоторой задержкой. Если в программе нужны точные тайминги, необходимо воспользоваться аппаратным таймером. 1. void os_timer_arm (os_timer_t *ptimer, uint32_t milliseconds, bool repeat_flag) - включение миллисекундного таймера, где: os_timer_t *ptimer - ранее объявленная структура таймера; uint32_t milliseconds - количество отсчитываемых миллисекунд; bool repeat_flag - будет ли таймер вызываться повторно или нет. 2. void os_timer_disarm (os_timer_t *ptimer) - отключение таймера, где: os_timer_t *ptimer - ранее объявленная структура таймера. 3. void os_timer_setfn (os_timer_t *ptimer, os_timer_func_t *pfunction, void *parg) - установка функции обратного вызова таймера, котора

Для работы программного таймера ESP8266, понадобится 3 функции из SDK, это все что нужно - всего 3:

os_timer_arm

os_timer_disarm

os_timer_setfn

прототипы которых находятся в файле /ESP8266_NONOS_SDK/include/osapi.h

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

1.

void os_timer_arm (os_timer_t *ptimer, uint32_t milliseconds, bool repeat_flag) - включение миллисекундного таймера,

где: os_timer_t *ptimer - ранее объявленная структура таймера;

uint32_t milliseconds - количество отсчитываемых миллисекунд;

bool repeat_flag - будет ли таймер вызываться повторно или нет.

2.

void os_timer_disarm (os_timer_t *ptimer) - отключение таймера,

где: os_timer_t *ptimer - ранее объявленная структура таймера.

3.

void os_timer_setfn (os_timer_t *ptimer, os_timer_func_t *pfunction, void *parg) - установка функции обратного вызова таймера, которая должна быть вызвана до функции запуска таймера,

где: os_timer_t *ptimer - ранее объявленная структура таймера

os_timer_func_t *pfunction - указатель на функцию обратного вызова таймера;

А дальше пример применения вышеперечисленных функций.

#include "osapi.h"

//... другие include'ы

static os_timer_t MyTimer; //Объявление структуры таймера

void ExArTimer(void *arg) //Функция обратного вызова для программного таймера (обработчик)

{
//Подпрограмма выполняемая по окончанию отчета таймера

}

//.... другой код

void ICACHE_FLASH_ATTR user_init(void)

{
//.... другой код

os_timer_disarm(&MyTimer); //Отключение таймера. Передаваемые значения: Объявленная ранее структура таймера
os_timer_setfn(&MyTimer, (os_timer_func_t *)ExArTimer, NULL); //Инициализация таймера. Передаваемые значения: Объявленная ранее структура таймера, Функция обратного вызова (использовав приведение типов), параметр функции обратного вызова - которого нет
os_timer_arm(&MyTimer, 2000, 1); //Запуск таймера. Передаваемые значения: Объявленная ранее структура таймера, количество миллисекунд, третий параметр показывает - срабатывание таймера должно быть периодическим

//.... другой код

}

Просто!? Я думаю, не сложно.

PS Вообще-то для работы с данным таймером в osapi.h имеется 5 функций, но в данном примере хватило 3х, об остальных в следующий раз (когда будет подходящий повод).

Литература:

1. ESP8266 Non-OS SDK: API Reference