From b11e7cfa8323dcf0fa61fc3c326febacc1396667 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Fri, 20 Feb 2026 16:40:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80?= =?UTF-8?q?=D1=8B=20=D1=81=20=D1=84=D0=BB=D0=B0=D0=B3=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/set_to_mem.h | 22 ++++++++++++++-------- Src/set_to_mem.c | 46 ++++++++++++++++++++++++---------------------- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/Inc/set_to_mem.h b/Inc/set_to_mem.h index c5a84a3..aa3e77d 100644 --- a/Inc/set_to_mem.h +++ b/Inc/set_to_mem.h @@ -24,7 +24,7 @@ - Инициализировать каждый элемент структуры функцией @ref InitSettingsToMem - Добавить @ref WriteSettingsArrayToMem и @ref ReadSettingsArrayFromMem для записи/считывания каждого элемента структуры в память - - Выставлять флаг @ref update_settings_flag для записи настроек в память, + - Выставлять флаг @ref f.settings_need_to_update для записи настроек в память, когда необходимо это сделать (само по себе оно не может определить когда надо записать, т.к. нет буфера для отслеживания изменений) @@ -58,30 +58,36 @@ typedef struct #define MEMORY_ERROR_WRITE ((uint32_t)(1<<1)) ///< Бит ошибки - запись #define MEMORY_ERROR_READ ((uint32_t)(1<<2)) ///< Бит ошибки - чтение +typedef struct +{ + unsigned settings_need_to_update:1; + unsigned settings_is_updated:1; +}SettingsFlagsTypeDef; + /** * @brief Структура для хранения настроек устройства. * @details Содержит указатели на настройки и другие параметры для их обработки. */ typedef struct { - MEMSPI_HandleTypeDef *hmemspi; ///< Указатель на хендл для работы с памятью + MEMSPI_HandleTypeDef *hmemspi; ///< Указатель на хендл для работы с памятью #ifdef SETTINGS_USE_WEAR_LEVELING_FLASH - ParamsFlashHandle_t flash_handle; ///< Хендл для равномерного использования флеш памяти + ParamsFlashHandle_t flash_handle; ///< Хендл для равномерного использования флеш памяти #endif #ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER uint8_t *buffer; #endif - SettingArrayTypeDef setarr[32]; ///< Структура настроек для хранения в памяти + SettingArrayTypeDef setarr[32]; ///< Структура настроек для хранения в памяти uint8_t setarr_count; - uint32_t start_adr; ///< Начальный адрес в памяти для записи настроек - uint32_t settings_size; ///< Размер всего массива настроек + uint32_t start_adr; ///< Начальный адрес в памяти для записи настроек + uint32_t settings_size; ///< Размер всего массива настроек - uint8_t update_settings_flag; ///< Флаг для обновления настроек в памяти - uint32_t settings_error; ///< Флаг ошибки настроек + SettingsFlagsTypeDef f; ///< Флаг для обновления настроек в памяти + uint32_t settings_error; ///< Флаг ошибки настроек }SettingsTypeDef; extern SettingsTypeDef Settings; diff --git a/Src/set_to_mem.c b/Src/set_to_mem.c index d5825a6..a9d3c1a 100644 --- a/Src/set_to_mem.c +++ b/Src/set_to_mem.c @@ -112,37 +112,37 @@ void Settings_WriteSettings(SettingsTypeDef *settings) settings->setarr[i].real_ptr, settings->setarr[i].length) != 0) { - settings->update_settings_flag = 1; + settings->f.settings_need_to_update = 1; break; } } #endif - if(settings->update_settings_flag) - { -// if(GPIO_Read_Switch(&MZKT_DISCIN.err_24V)) +// if(settings->f.settings_need_to_update) +// { +//// if(GPIO_Read_Switch(&MZKT_DISCIN.err_24V)) +//// { +//// printf_memspi_err("Power Err, cancel writing"); +//// settings->f.settings_need_to_update = 0; +//// update_start = 0; +//// return; +//// } +// if(msDelayDone(1000, &update_request_tick)) // { -// printf_memspi_err("Power Err, cancel writing"); -// settings->update_settings_flag = 0; -// update_start = 0; -// return; -// } - if(msDelayDone(1000, &update_request_tick)) - { - update_start = 1; - } - } - else - { - msDelayStart(&update_request_tick); - update_start = 0; - } +// update_start = 1; +// } +// } +// else +// { +// msDelayStart(&update_request_tick); +// update_start = 0; +// } - - if(update_start) + settings->f.settings_is_updated = 0; + if(settings->f.settings_need_to_update) { // Сбрасываем флаг обновления - settings->update_settings_flag = 0; + settings->f.settings_need_to_update = 0; update_start = 0; #ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER @@ -158,7 +158,9 @@ void Settings_WriteSettings(SettingsTypeDef *settings) // Записываем настройки в память WriteSettingsToMem(settings); + Settings_ReadSettings(settings); Settings_CheckSettings(settings); + settings->f.settings_is_updated = 1; __enable_irq(); } }