Вызывает ошибку #include "Ticker.cpp". Нужно #include "Ticker.h".Замена 1000 на 100 в Ticker.cpp дала прекрасный результат.
Но когда я попытался выкрутиться путем включения измененного мною Ticker.cpp в каталог с исходником с соответствующим #include "Ticker.cpp" я получил ошибку компилятора, хотя вроде как такое должно бы работать. Или все-такое вообще нельзя делать?
Создаем в папке lib (или где там Arduino IDE библиотеки держит) папку ART_HA_Ticket (например). Копируем в нее Ticker.h и Ticker.cpp. Переименовываем в ART_HA_Ticker.h и ART_HA_Ticker.cpp (например). Правим их как надо (меняем код + как минимум в ART_HA_Ticker.cpp изменяем #include "Ticker.h" на #include "ART_HA_Ticker.h").А как я тогда подставлю измененный файл без вмешательства в APPDATA?
Мне же нужно как то указать, где он находится.
Появилась небольшая проблема.Создаем в папке
Вопрос интересный... Надо посмотреть...Существует ли в ESP32 возможность сброса возможного хода исполнения прерываний №2 и №3 аппаратным прерыванием №1?
Если в это время выполняетсяКак ни странно, всё получилось. Сделал отсчеты таймера по 10 мкс. Работает уверенно.
delay(N);
и не работает WiFi.Возможно всё, т.к. прерывания программные, вызывающиеся по таблице от одного таймера в отдельном цикле опроса событий. которому надо отдавать управление.Существует ли в ESP32 возможность сброса возможного хода исполнения прерываний №2 и №3 аппаратным прерыванием №1?
#define XS_TO_RTC_TIMER_TICKS(t, prescaler, period) \
(((t) > (0xFFFFFFFF/(APB_CLK_FREQ >> prescaler))) ? \
(((t) >> 2) * ((APB_CLK_FREQ >> prescaler)/(period>>2)) + ((t) & 0x3) * ((APB_CLK_FREQ >> prescaler)/period)) : \
(((t) * (APB_CLK_FREQ >> prescaler)) / period))
#if ((APB_CLK_FREQ>>4)%1000000)
TIMERx_LOAD = XS_TO_RTC_TIMER_TICKS(us, 4, 1000000);
#else
TIMERx_LOAD = us * (APB_CLK_FREQ>>4)/1000000; // = us * 5
#endif
WiFi в этом режиме не запускается, аЕсли в это время выполняетсяdelay(N);
и не работает WiFi.
delay(N)
в программе нет вообще.Как вы писали проблема в приоритетах у ваших таймеров.Есть претензии к тому, что у таймера ESP32 нет аппаратного выхода, поэтому его приходится обеспечивать через прерывание по таймеру, отсюда и проблема.
Оно и есть -> ets_timer_disarm(x) останавливает назначенный x софт-таймер и запрещает вызов его кода.Мне не нужно отменять аппаратное или программное прерывания, мне нужно аппаратным прерыванием аварийно закончить работу обработчика программного прерывания. А еще лучше и обработчика самого себя тоже.
Есть идея при поступлении сигнала на вход аппаратного прерывания запускать еще один таймер - для контроля периода входных импульсов.Вопрос интересный... Надо посмотреть...