Улучшение структуры с флагами

This commit is contained in:
2026-02-20 16:40:17 +03:00
parent 81dc223d98
commit b11e7cfa83
2 changed files with 38 additions and 30 deletions

View File

@@ -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;

View File

@@ -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();
}
}