From 2e869315b879916df18b9e04ac59404d323f3225 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Sat, 28 Feb 2026 17:23:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D1=84=D0=BB=D0=B0=D0=B3=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BB=D0=B0=D0=B3=D0=B0=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D1=81=D0=BA=D0=BE=D0=B9=20=D0=B8=D0=BB=D0=B8=20=D1=80?= =?UTF-8?q?=D1=83=D1=87=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BE=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/set_to_mem.h | 5 +++-- Src/set_to_mem.c | 28 ++++++++++++++++------------ 2 files changed, 19 insertions(+), 14 deletions(-) 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);