• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Таймеры

ART_HA

Member
Запрос снимаю, ардуино IDE глюкнула.
Открыл новый проект, заново переписал код, и все заработало.
Приношу извинения.
 

enjoynering

Well-known member
У ардуино esp8266 два стека - sys где крутится wifi и все критические функции и cont в котором крутится ваш код. У ticker есть 3 вида таймеров: просто *_attach, *_attach_scheldured и _atrach_scheldured_accurete. Разберитесь какой в каком стеке исполняется и когда.
 

enjoynering

Well-known member
Кстати delay(), в начале или конце loop() хотя-бы на 1..5 миллисекунд уменьшает потребление с включённым wifi на 15%..20%. Без него радио модем не успеват спать. Вот такая баг-фича ардуино.
 

aZholtikov

Active member
У ардуино esp8266 два стека - sys где крутится wifi и все критические функции и cont в котором крутится ваш код. У ticker есть 3 вида таймеров: просто *_attach, *_attach_scheldured и _atrach_scheldured_accurete. Разберитесь какой в каком стеке исполняется и когда.
Чисто для интереса. Не смог обнаружить в используемой мной библиотеке attach_scheldured_accurete. Какой версией пользуетесь?
 

ART_HA

Member
aZholtikov, к Вам вопрос.
Ticker работает и с ESP32?
Вопрос связан с тем, что похоже, я все-таки уперся в проблемы с памятью в ESP8266. :(
Например при добавлении слова в меню в скрипте не включается сервер WiFi.
 

aZholtikov

Active member
aZholtikov, к Вам вопрос.
Ticker работает и с ESP32?
Вопрос связан с тем, что похоже, я все-таки уперся в проблемы с памятью в ESP8266. :(
Например при добавлении слова в меню в скрипте не включается сервер WiFi.
Да. Работает. И автор библиотеки то-же. :)
P.S. Но в случае с ESP32 я бы посоветовал работать уже с FreeRTOS.
 

aZholtikov

Active member
Здесь подробное описание в целом. https://disk.yandex.ru/d/-LVTckepSxbANg
И здесь хорошо, с примерами, описано. Для ESP32 чуть синтаксис местами будет отличаться.
 

ART_HA

Member
Да. Работает. И автор библиотеки то-же. :)
P.S. Но в случае с ESP32 я бы посоветовал работать уже с FreeRTOS.
Спасибо за хорошие новости.
Признаться я давно уже перешел на ESP32, и для него есть всё, что мне в данном случае нужно.
Но у меня ESP8266 завалялся, и я хотел его пристроить. Оказалось, что не судьба... :)
 

ART_HA

Member
Однако пролет. Не понимает ESP32 этот Ticker.
Да и в самом Ticker.h черным по белому:
Copyright (c) 2014 Ivan Grokhotkov. All rights reserved.
This file is part of the esp8266 core for Arduino environment.
 

aZholtikov

Active member
Однако пролет. Не понимает ESP32 этот Ticker.
Да и в самом Ticker.h черным по белому:
Copyright (c) 2014 Ivan Grokhotkov. All rights reserved.
This file is part of the esp8266 core for Arduino environment.
Эту пробовали?

Ticker.h - esp32 library that calls functions periodically
Copyright (c) 2017 Bert Melis. All rights reserved.
Based on the original work of:
Copyright (c) 2014 Ivan Grokhotkov. All rights reserved.
The original version is part of the esp8266 core for Arduino environment.
 

ART_HA

Member
И как вы умудряетесь правильные Ticker находить? Мне так все какая ерунда попадается...
Спасибо. (y)
 

enjoynering

Well-known member
Просто надо не боятся заходить в исходники arduino. Там не кусают. Открываем *.h и *.cpp билиотек, читаем код - многие вопросы сами собой отпадают.
 

ART_HA

Member
Просто надо не боятся заходить в исходники arduino. Там не кусают. Открываем *.h и *.cpp билиотек, читаем код - многие вопросы сами собой отпадают.
Надо сначала нужные исходники найти. У меня три куча ESP32 в ардуине торчало, пришлось всё вычищать, т.к. они мешали обновлению.
Но на этом не закончилось.
К примеру, вот что ему не нравится в
Код:
if (MODE != 0) digitalPinToInterrupt(SINCHRO);
Пишет:
second operand of conditional expression has no effect [-Werror=unused-value]
 

enjoynering

Well-known member
Надо сначала нужные исходники найти. У меня три куча ESP32 в ардуине торчало, пришлось всё вычищать, т.к. они мешали обновлению.
Но на этом не закончилось.
К примеру, вот что ему не нравится в
Код:
if (MODE != 0) digitalPinToInterrupt(SINCHRO);
Пишет:
second operand of conditional expression has no effect [-Werror=unused-value]
Вот так надо
(MODE != 0) {digitalPinToInterrupt(SINCHRO);}
 

ART_HA

Member
Ответ неправильный. :)
А правильный скорее всего в том, что digitalPinToInterrup для ESP32 отсутствует как таковой.
 

ART_HA

Member
Эту пробовали?
Однако проблема.
На выходе что попало, но очень похоже на примерно ежесекундное вклинивание более приоритетного неизвестного прерывания.
Свел код к минимуму:
C:
#include "Ticker.h"
Ticker timer0;
Ticker timer1;
    void IRAM_ATTR ISR_StartT1() {
          timer0.once_ms(5, ISR_StopT1);
      }
    void ISR_StopT1() {
          digitalWrite(33, HIGH);
          timer1.once_ms(1, ISR_StartT2);
      }
    void ISR_StartT2() {
          digitalWrite(33, LOW);
    }
void setup() {
    pinMode(27, INPUT);
    pinMode(33, OUTPUT);
    attachInterrupt(digitalPinToInterrupt(27), ISR_StartT1, CHANGE);
}
void loop() {
;
}
 
Сверху Снизу