Улучшение структуры с флагами
This commit is contained in:
@@ -24,7 +24,7 @@
|
|||||||
- Инициализировать каждый элемент структуры функцией @ref InitSettingsToMem
|
- Инициализировать каждый элемент структуры функцией @ref InitSettingsToMem
|
||||||
- Добавить @ref WriteSettingsArrayToMem и @ref ReadSettingsArrayFromMem для записи/считывания
|
- Добавить @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_WRITE ((uint32_t)(1<<1)) ///< Бит ошибки - запись
|
||||||
#define MEMORY_ERROR_READ ((uint32_t)(1<<2)) ///< Бит ошибки - чтение
|
#define MEMORY_ERROR_READ ((uint32_t)(1<<2)) ///< Бит ошибки - чтение
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned settings_need_to_update:1;
|
||||||
|
unsigned settings_is_updated:1;
|
||||||
|
}SettingsFlagsTypeDef;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Структура для хранения настроек устройства.
|
* @brief Структура для хранения настроек устройства.
|
||||||
* @details Содержит указатели на настройки и другие параметры для их обработки.
|
* @details Содержит указатели на настройки и другие параметры для их обработки.
|
||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
MEMSPI_HandleTypeDef *hmemspi; ///< Указатель на хендл для работы с памятью
|
MEMSPI_HandleTypeDef *hmemspi; ///< Указатель на хендл для работы с памятью
|
||||||
|
|
||||||
#ifdef SETTINGS_USE_WEAR_LEVELING_FLASH
|
#ifdef SETTINGS_USE_WEAR_LEVELING_FLASH
|
||||||
ParamsFlashHandle_t flash_handle; ///< Хендл для равномерного использования флеш памяти
|
ParamsFlashHandle_t flash_handle; ///< Хендл для равномерного использования флеш памяти
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER
|
#ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER
|
||||||
uint8_t *buffer;
|
uint8_t *buffer;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SettingArrayTypeDef setarr[32]; ///< Структура настроек для хранения в памяти
|
SettingArrayTypeDef setarr[32]; ///< Структура настроек для хранения в памяти
|
||||||
uint8_t setarr_count;
|
uint8_t setarr_count;
|
||||||
|
|
||||||
uint32_t start_adr; ///< Начальный адрес в памяти для записи настроек
|
uint32_t start_adr; ///< Начальный адрес в памяти для записи настроек
|
||||||
uint32_t settings_size; ///< Размер всего массива настроек
|
uint32_t settings_size; ///< Размер всего массива настроек
|
||||||
|
|
||||||
uint8_t update_settings_flag; ///< Флаг для обновления настроек в памяти
|
SettingsFlagsTypeDef f; ///< Флаг для обновления настроек в памяти
|
||||||
uint32_t settings_error; ///< Флаг ошибки настроек
|
uint32_t settings_error; ///< Флаг ошибки настроек
|
||||||
}SettingsTypeDef;
|
}SettingsTypeDef;
|
||||||
extern SettingsTypeDef Settings;
|
extern SettingsTypeDef Settings;
|
||||||
|
|
||||||
|
|||||||
@@ -112,37 +112,37 @@ void Settings_WriteSettings(SettingsTypeDef *settings)
|
|||||||
settings->setarr[i].real_ptr,
|
settings->setarr[i].real_ptr,
|
||||||
settings->setarr[i].length) != 0)
|
settings->setarr[i].length) != 0)
|
||||||
{
|
{
|
||||||
settings->update_settings_flag = 1;
|
settings->f.settings_need_to_update = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(settings->update_settings_flag)
|
// if(settings->f.settings_need_to_update)
|
||||||
{
|
// {
|
||||||
// if(GPIO_Read_Switch(&MZKT_DISCIN.err_24V))
|
//// 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");
|
// update_start = 1;
|
||||||
// settings->update_settings_flag = 0;
|
// }
|
||||||
// update_start = 0;
|
// }
|
||||||
// return;
|
// else
|
||||||
// }
|
// {
|
||||||
if(msDelayDone(1000, &update_request_tick))
|
// msDelayStart(&update_request_tick);
|
||||||
{
|
// update_start = 0;
|
||||||
update_start = 1;
|
// }
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msDelayStart(&update_request_tick);
|
|
||||||
update_start = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
settings->f.settings_is_updated = 0;
|
||||||
if(update_start)
|
if(settings->f.settings_need_to_update)
|
||||||
{
|
{
|
||||||
// Сбрасываем флаг обновления
|
// Сбрасываем флаг обновления
|
||||||
settings->update_settings_flag = 0;
|
settings->f.settings_need_to_update = 0;
|
||||||
update_start = 0;
|
update_start = 0;
|
||||||
|
|
||||||
#ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER
|
#ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER
|
||||||
@@ -158,7 +158,9 @@ void Settings_WriteSettings(SettingsTypeDef *settings)
|
|||||||
// Записываем настройки в память
|
// Записываем настройки в память
|
||||||
WriteSettingsToMem(settings);
|
WriteSettingsToMem(settings);
|
||||||
|
|
||||||
|
Settings_ReadSettings(settings);
|
||||||
Settings_CheckSettings(settings);
|
Settings_CheckSettings(settings);
|
||||||
|
settings->f.settings_is_updated = 1;
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user