diff --git a/Inc/set_to_mem.h b/Inc/set_to_mem.h index aa3e77d..c80f974 100644 --- a/Inc/set_to_mem.h +++ b/Inc/set_to_mem.h @@ -24,7 +24,7 @@ - Инициализировать каждый элемент структуры функцией @ref InitSettingsToMem - Добавить @ref WriteSettingsArrayToMem и @ref ReadSettingsArrayFromMem для записи/считывания каждого элемента структуры в память - - Выставлять флаг @ref f.settings_need_to_update для записи настроек в память, + - Выставлять флаг @ref f.settings_request_to_save для записи настроек в память, когда необходимо это сделать (само по себе оно не может определить когда надо записать, т.к. нет буфера для отслеживания изменений) @@ -60,7 +60,8 @@ typedef struct typedef struct { - unsigned settings_need_to_update:1; + unsigned settings_autosave:1; + unsigned settings_request_to_save:1; unsigned settings_is_updated:1; }SettingsFlagsTypeDef; diff --git a/Src/set_to_mem.c b/Src/set_to_mem.c index 96bc31a..4ee5c4e 100644 --- a/Src/set_to_mem.c +++ b/Src/set_to_mem.c @@ -105,25 +105,28 @@ void Settings_WriteSettings(SettingsTypeDef *settings) #ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER - // Сравниваем текущие настройки с буфером - for(int i = 0; i < settings->setarr_count; i++) + if(settings->f.settings_autosave) // если автосейв - проверяем и сохраняем сами { - if(memcmp(settings->setarr[i].mem_ptr, - settings->setarr[i].real_ptr, - settings->setarr[i].length) != 0) + // Сравниваем текущие настройки с буфером + for(int i = 0; i < settings->setarr_count; i++) { - settings->f.settings_need_to_update = 1; - break; + if(memcmp(settings->setarr[i].mem_ptr, + settings->setarr[i].real_ptr, + settings->setarr[i].length) != 0) + { + settings->f.settings_request_to_save = 1; + break; + } } } #endif -// if(settings->f.settings_need_to_update) +// if(settings->f.settings_request_to_save) // { //// if(GPIO_Read_Switch(&MZKT_DISCIN.err_24V)) //// { //// printf_memspi_err("Power Err, cancel writing"); -//// settings->f.settings_need_to_update = 0; +//// settings->f.settings_request_to_save = 0; //// update_start = 0; //// return; //// } @@ -138,11 +141,12 @@ void Settings_WriteSettings(SettingsTypeDef *settings) // update_start = 0; // } + settings->f.settings_is_updated = 0; - if(settings->f.settings_need_to_update) + if(settings->f.settings_request_to_save) { // Сбрасываем флаг обновления - settings->f.settings_need_to_update = 0; + settings->f.settings_request_to_save = 0; update_start = 0; #ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER @@ -153,7 +157,7 @@ void Settings_WriteSettings(SettingsTypeDef *settings) settings->setarr[i].real_ptr, settings->setarr[i].length); } -#endif +#endif // Записываем настройки в память WriteSettingsToMem(settings);