Сохранение структуры в настройках m5stacks

#c #arduino

#c #arduino

Вопрос:

Я пытаюсь сохранить массив структуры в свой m5stack, но он постоянно перезапускается, поэтому возникает ошибка кода… Загрузка работает, но при сохранении происходит сбой. Заполняется не весь массив, заполняются только 2 пресета.

 #include <Preferences.h> // Store settings in EEPROM

struct preset_time_t
{
    uint8_t active = 0;
    uint8_t min = 0;
    uint8_t hour = 0;
    int32_t duration = 0;
};

// Number of presets
preset_time_t preset[10];
Preferences pref;


// Load schedule from eeprom
void loadSchedule()
{
  pref.begin("Presets, true");
   
  size_t schLen = pref.getBytesLength("presets");
  char buffer[schLen]; // prepare a buffer for the data
  pref.getBytes("presets", buffer, schLen);
  if (schLen % sizeof(preset_time_t)) { // simple check that data fits
    // Data not correct size
    return;
  }
  memcpy(preset, buffer, schLen);
  pref.end();
}

// Save schedule to eeprom
void saveSchedule()
{
  pref.begin("Presets");
  pref.putBytes("presets", preset, sizeof(preset));
  pref.end();
}
 

Комментарии:

1. Ваша проблема может быть скрыта в <Preferences.h> ? В чем ценность schlen ? sizeof(preset_time_t) может зависеть от вашего типа arduino и компилятора, так как не везде int32_t будет начинаться с нечетного адреса.

Ответ №1:

Найдена проблема (проблемы)

timer0 должен быть отключен во время записи настроек, в противном случае произойдет сбой ESP32…

 pref.begin("Presets, true");
 

Должно быть

 pref.begin("Presets", true);