#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);