Статическая память RTC в режиме глубокого сна на ESP32 с ESP-IDF

Я использую 8 КБ статической ОЗУ на RTC внутри ESP32, чтобы сохранить небольшой объем данных датчика, чтобы снизить энергопотребление за счет меньшей частоты передачи. Но мне не везет даже с простым примером кода:

RTC_DATA_ATTR uint32_t testValue = 0;

{
    ESP_LOGE(TAG, "testValue = %d", testValue++);
    ...
}

На мониторе я вижу значение 0 в первый раз, но дальше никто не догадывается.

E (109) app_main: testValue = 0
...
...
E (109) app_main: testValue = -175962388

РЕДАКТИРОВАТЬ

Также попробовал атрибут:

RTC_NOINIT_ATTR uint32_t testValue = 0;

Что я делаю неправильно?


person monkey    schedule 13.01.2021    source источник


Ответы (1)


Я получил ответ с других каналов, которым хотел бы поделиться. Решением было установить:

esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON);
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_ON);

Таким образом, области памяти RTC включены. В моем случае я специально отключил их в другой области кода (код управления питанием в режиме глубокого сна). Это решение не сильно влияет на энергопотребление в режиме глубокого сна ~ 10 мкА.

person monkey    schedule 13.01.2021