целочисленное переполнение в выражении типа 'int' приводит к

c++ esp32 sleep integer

Мне нужно активировать 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 минут
}

, 👍0

Обсуждение

Более или менее тот же вопрос здесь. В ESP32 типы long и int имеют одинаковый диапазон., @timemage


1 ответ


Лучший ответ:

1

Измените эту строку на:

esp_sleep_enable_timer_wakeup((uint64_t) TIME_TO_SLEEP * 60 * uS_TO_S_FACTOR);

Это заставляет компилятор выполнять 64-битные арифметические операции над константой, а не использовать по умолчанию "int" арифметика.

,