Это объявлено/часть определенного списка параметров, который esp_deep_sleep принимает uint64_t в качестве параметра, представляющего количество микросекунд для сна ESP32, однако я считаю, что это ошибка. Если вы видите этот простой код ниже, использование максимального значения uint64_t, 18446744073709551615, приводит к преждевременному сбросу ESP32. Вы можете увидеть это в примере кода ниже с выводом [который повторяется бесконечно].
#include
#include
#include "RTClib.h"
RTC_DS3231 rtc;
void setup() {
Serial.begin(115200);
// Initialize the RTC
if (!rtc.begin()) {
while (1)
delay(10);
}
// Works (uint64_t max value / 2)
// Serial.println("before uint64_t / 2 sleep");
// esp_deep_sleep((uint64_t)9223372036854775807); // yes
// Serial.println("after uint64_t / 2 sleep");
// Doesn't work (unit64_t max value)
Serial.println("before uint64_t sleep");
esp_deep_sleep((uint64_t)18446744073709551615); // no
Serial.println("after uint64_t sleep");
}
void loop() {
}
Пример вывода
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
E (57) esp_core�xump_flash: Core dump data check failed:
Calculated checksum='9d56f9c2'
Image checksum='ffffffff'
before uint64_t sleep
ets Jul 29 2019 12:21:46
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
E (57) esp_corefxump_flash: Core dump data check failed:
Calculated checksum='9d56f9c2'
Image checksum='ffffffff'
before uint64_t sleep
ets Jul 29 2019 12:21:46
Если вы попытаетесь перевести ESP32 в спящий режим с половиной максимального значения, ESP32 перейдет в спящий режим, как ожидалось.
#include
#include
#include "RTClib.h"
RTC_DS3231 rtc;
void setup() {
Serial.begin(115200);
// Initialize the RTC
if (!rtc.begin()) {
while (1)
delay(10);
}
// Works (uint64_t max value / 2)
Serial.println("before uint64_t / 2 sleep");
esp_deep_sleep((uint64_t)9223372036854775807); // yes
Serial.println("after uint64_t / 2 sleep");
// Doesn't work (unit64_t max value)
// Serial.println("before uint64_t sleep");
// esp_deep_sleep((uint64_t)18446744073709551615); // no
// Serial.println("after uint64_t sleep");
}
void loop() {
}
Пример вывода
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
E (152) esp_cor
�VW}���͡: Core dump data check failed:
Calculated checksum='9d56f9c2'
Image checksum='ffffffff'
before uint64_t / 2 sleep
Чтобы сэкономить заряд батареи для своих целей, я хочу перевести ESP32 в глубокий сон на полные 24 часа, но я не может этого сделать из-за ограничения esp_deep_sleep. Мне удалось обойти это ограничение с помощью приведенного ниже обходного пути, но было бы интересно, если бы существовало более поддерживаемое и простое решение этой проблемы.
#include
#include
#include "RTClib.h"
RTC_DS3231 rtc;
RTC_DATA_ATTR int is_init = 0;
RTC_DATA_ATTR uint64_t multiply_sleep_time = 1;
void setup() {
// Sleeps for 24 (2 * 12 hours) after module has been initialized
if (is_init == 1 && multiply_sleep_time > 0){
multiply_sleep_time--;
esp_deep_sleep((uint64_t)9223372036854775807);
}
Serial.begin(115200);
// Initialize the RTC
if (!rtc.begin()) {
while (1)
delay(10);
}
// Some code that needs to run at startup, and every 24 hours after
is_init = 1;
Serial.println("init");
// Works (uint64_t max value / 2)
Serial.println("before uint64_t / 2 sleep");
esp_deep_sleep((uint64_t)9223372036854775807);
Serial.println("after uint64_t / 2 sleep");
}
void loop() {
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... rge-values
Esp_deep_sleep не работает с большими значениями ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1728875414
Anonymous
Это объявлено/часть определенного списка параметров, который [b]esp_deep_sleep[/b] принимает uint64_t в качестве параметра, представляющего количество микросекунд для сна ESP32, однако я считаю, что это ошибка. Если вы видите этот простой код ниже, использование максимального значения uint64_t, 18446744073709551615, приводит к преждевременному сбросу ESP32. Вы можете увидеть это в примере кода ниже с выводом [который повторяется бесконечно].
#include
#include
#include "RTClib.h"
RTC_DS3231 rtc;
void setup() {
Serial.begin(115200);
// Initialize the RTC
if (!rtc.begin()) {
while (1)
delay(10);
}
// Works (uint64_t max value / 2)
// Serial.println("before uint64_t / 2 sleep");
// esp_deep_sleep((uint64_t)9223372036854775807); // yes
// Serial.println("after uint64_t / 2 sleep");
// Doesn't work (unit64_t max value)
Serial.println("before uint64_t sleep");
esp_deep_sleep((uint64_t)18446744073709551615); // no
Serial.println("after uint64_t sleep");
}
void loop() {
}
[b]Пример вывода[/b]
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
E (57) esp_core�xump_flash: Core dump data check failed:
Calculated checksum='9d56f9c2'
Image checksum='ffffffff'
before uint64_t sleep
ets Jul 29 2019 12:21:46
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
E (57) esp_corefxump_flash: Core dump data check failed:
Calculated checksum='9d56f9c2'
Image checksum='ffffffff'
before uint64_t sleep
ets Jul 29 2019 12:21:46
Если вы попытаетесь перевести ESP32 в спящий режим с половиной максимального значения, ESP32 перейдет в спящий режим, как ожидалось.
#include
#include
#include "RTClib.h"
RTC_DS3231 rtc;
void setup() {
Serial.begin(115200);
// Initialize the RTC
if (!rtc.begin()) {
while (1)
delay(10);
}
// Works (uint64_t max value / 2)
Serial.println("before uint64_t / 2 sleep");
esp_deep_sleep((uint64_t)9223372036854775807); // yes
Serial.println("after uint64_t / 2 sleep");
// Doesn't work (unit64_t max value)
// Serial.println("before uint64_t sleep");
// esp_deep_sleep((uint64_t)18446744073709551615); // no
// Serial.println("after uint64_t sleep");
}
void loop() {
}
[b]Пример вывода[/b]
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
E (152) esp_cor
�VW}���͡: Core dump data check failed:
Calculated checksum='9d56f9c2'
Image checksum='ffffffff'
before uint64_t / 2 sleep
[b]Чтобы сэкономить заряд батареи для своих целей[/b], я хочу перевести ESP32 в глубокий сон на полные 24 часа, но я не может этого сделать из-за ограничения [b]esp_deep_sleep[/b]. Мне удалось обойти это ограничение с помощью приведенного ниже обходного пути, но было бы интересно, если бы существовало более поддерживаемое и простое решение этой проблемы.
#include
#include
#include "RTClib.h"
RTC_DS3231 rtc;
RTC_DATA_ATTR int is_init = 0;
RTC_DATA_ATTR uint64_t multiply_sleep_time = 1;
void setup() {
// Sleeps for 24 (2 * 12 hours) after module has been initialized
if (is_init == 1 && multiply_sleep_time > 0){
multiply_sleep_time--;
esp_deep_sleep((uint64_t)9223372036854775807);
}
Serial.begin(115200);
// Initialize the RTC
if (!rtc.begin()) {
while (1)
delay(10);
}
// Some code that needs to run at startup, and every 24 hours after
is_init = 1;
Serial.println("init");
// Works (uint64_t max value / 2)
Serial.println("before uint64_t / 2 sleep");
esp_deep_sleep((uint64_t)9223372036854775807);
Serial.println("after uint64_t / 2 sleep");
}
void loop() {
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79084599/esp-deep-sleep-doesnt-work-with-large-values[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия