целочисленное переполнение в выражении типа 'int' приводит к
Мне нужно активировать ESP каждые 60 минут, чтобы считать некоторые данные и отправить их на сервер. Весь процесс работает нормально, когда я использую число минут меньше 60 (в микросекундах x 1000 000), но когда я использую 60 минут больше i получить следующее сообщение:
src/main.cpp:137:49: предупреждение: целочисленное переполнение в выражении типа 'int' приводит к '-694967296' [-Woverflow] esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);// устанавливаем следующее пробуждение через 30 секунд
Как сделать так, чтобы мой ESP просыпался каждые 60 минут или чаще?
упростить код:
// для бодрствования и сна
#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP 60 // минут
void setup(){
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * 60 * uS_TO_S_FACTOR);// ошибка, если время сна больше 60 минут
}
@Damiano Miazzi, 👍0
Обсуждение1 ответ
Лучший ответ:
Измените эту строку на:
esp_sleep_enable_timer_wakeup((uint64_t) TIME_TO_SLEEP * 60 * uS_TO_S_FACTOR);
Это заставляет компилятор выполнять 64-битные арифметические операции над константой, а не использовать по умолчанию "int" арифметика.
- ESP32 не может спать дольше 35 минут.
- esp32 Stack canary watchpoint срабатывает
- Почему функция server.on() из "ESPAsyncWebServer.h" выполняется на стороне setup(), а не на стороне loop()?
- ESP.deepSleep() — снова и снова?
- ESP32 отправляет данные на другой ESP32 без установления соединения Wi-Fi
- ESP32 — петля DeepSleep или нет?
- Передача нестатической функции-члена с помощью bind
- Увеличить частоту дискретизации на плате ESP32
Более или менее тот же вопрос здесь. В ESP32 типы long и int имеют одинаковый диапазон., @timemage