Большой апгрейд:
- исправлены баги библиотеки memspi - добавлены модули для сохранения настреок в eeprom и flash (с равномерным износом) - надо тестить, проверять и рефакторить
This commit is contained in:
136
Inc/set_to_mem.h
Normal file
136
Inc/set_to_mem.h
Normal file
@@ -0,0 +1,136 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file set_to_mem.h
|
||||
* @brief Заголовочный файл для записи в память настроек.
|
||||
**************************************************************************
|
||||
* @defgroup SETMEM_TOOLS Settings to Memory Tools
|
||||
* @brief Модуль для записи/считывания настроек в память
|
||||
**************************************************************************
|
||||
@details Есть следующие настройки:
|
||||
|
||||
- @ref SETTINGS_USE_SETTINGS_FROM_BUFFER : выкидывать в память данные по указателю на разные настройки
|
||||
- Для работы надо объявить в структуре данные которые будут записываться (@ref SettingsInMemTypeDef)
|
||||
и указатели на эти данные (@ref SettingsSourceTypeDef)
|
||||
- Добавить @ref CompareSettings на каждый массив настроек, для отслеживания изменений.
|
||||
При отличии - выставляется флаг для записи настроек в память
|
||||
- Добавить @ref WriteSettingToBuffer и @ref ReadSettingFromBuffer для синхронизации
|
||||
каждого элемента структуры буфера и реальных настроек.
|
||||
|
||||
(_CompareSettings`, WriteSettingToBuffer` и ReadSettingFromBuffer` это дефайны которые принимают название элемента структуры и уже вызывают нужные функции_)
|
||||
|
||||
|
||||
- @ref SETTINGS_USE_SETTINGS_FROM_POINTER : заполнять необходимыми настройками буфер и полностью выкидывать его в память
|
||||
- Для работы надо объявить в структуре данные которые будут записываться (@ref SettingsInMemTypeDef)
|
||||
- Инициализировать каждый элемент структуры функцией @ref InitSettingsToMem
|
||||
- Добавить @ref WriteSettingsArrayToMem и @ref ReadSettingsArrayFromMem для записи/считывания
|
||||
каждого элемента структуры в память
|
||||
- Выставлять флаг @ref update_settings_flag для записи настроек в память,
|
||||
когда необходимо это сделать (само по себе оно не может определить когда надо записать,
|
||||
т.к. нет буфера для отслеживания изменений)
|
||||
|
||||
- @ref SETTINGS_MEMORY_PROTECT_ENABLE : включение защиты на память.
|
||||
Перед записью защита снимается, и после записи ставится обратно.
|
||||
* @{
|
||||
*************************************************************************/
|
||||
#ifndef _SET_TO_MEM_H_
|
||||
#define _SET_TO_MEM_H_
|
||||
|
||||
#include "mylibs_include.h"
|
||||
#include "params_flash.h"
|
||||
#include "memspi.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief Структура для записи одного массива настроек по указателю.
|
||||
* @details Используется при @ref SETTINGS_USE_SETTINGS_FROM_POINTER
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t adr; ///< Адрес в памяти
|
||||
uint32_t length; ///< Размер блока
|
||||
|
||||
uint8_t *real_ptr; ///< Указатель на реальные рабочие данные
|
||||
uint8_t *mem_ptr; ///< Указатель на данные, которые пишутся в память
|
||||
}SettingArrayTypeDef;
|
||||
|
||||
|
||||
#define MEMORY_ERROR_EMPTY ((uint32_t)(1<<0)) ///< Бит ошибки - память пустая
|
||||
#define MEMORY_ERROR_WRITE ((uint32_t)(1<<1)) ///< Бит ошибки - запись
|
||||
#define MEMORY_ERROR_READ ((uint32_t)(1<<2)) ///< Бит ошибки - чтение
|
||||
|
||||
/**
|
||||
* @brief Структура для хранения настроек устройства.
|
||||
* @details Содержит указатели на настройки и другие параметры для их обработки.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
MEMSPI_HandleTypeDef *hmemspi; ///< Указатель на хендл для работы с памятью
|
||||
|
||||
#ifdef SETTINGS_USE_WEAR_LEVELING_FLASH
|
||||
ParamsFlashHandle_t flash_handle; ///< Хендл для равномерного использования флеш памяти
|
||||
#endif
|
||||
|
||||
#ifdef SETTINGS_USE_SETTINGS_FROM_BUFFER
|
||||
uint8_t *buffer;
|
||||
#endif
|
||||
|
||||
SettingArrayTypeDef setarr[32]; ///< Структура настроек для хранения в памяти
|
||||
uint8_t setarr_count;
|
||||
|
||||
uint32_t start_adr; ///< Начальный адрес в памяти для записи настроек
|
||||
uint32_t settings_size; ///< Размер всего массива настроек
|
||||
|
||||
uint8_t update_settings_flag; ///< Флаг для обновления настроек в памяти
|
||||
uint32_t settings_error; ///< Флаг ошибки настроек
|
||||
}SettingsTypeDef;
|
||||
extern SettingsTypeDef Settings;
|
||||
|
||||
|
||||
/**
|
||||
* @defgroup SETMEM_GENERAL_FUNC General functions for writing/reading settings
|
||||
* @ingroup SETMEM_TOOLS
|
||||
* @brief Общие функции для работы с настройками в памяти.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Инициализаия обзего хендла для работы с настройками */
|
||||
HAL_StatusTypeDef Settings_Init(SettingsTypeDef *settings, SPI_HandleTypeDef *hspi, uint32_t adr);
|
||||
/* Добавление массива настроек для хранения в памяти */
|
||||
HAL_StatusTypeDef Settings_AddArray(SettingsTypeDef *settings, uint8_t *pRealArray, uint32_t *startadr, uint32_t sizeofarray);
|
||||
/* Запись настроек в память */
|
||||
void Settings_WriteSettings(SettingsTypeDef *settings);
|
||||
/* Чтение настроек из памяти */
|
||||
void Settings_ReadSettings(SettingsTypeDef *settings);
|
||||
/* Проверить настройки на валидность. */
|
||||
void Settings_CheckSettings(SettingsTypeDef *settings);
|
||||
|
||||
/** SETMEM_GENERAL_FUNC
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup SETMEM_SUPPORT_FUNC Support functions for writing/reading
|
||||
* @ingroup SETMEM_TOOLS
|
||||
* @brief Служебные функции для работы с настройками в памяти
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Запись настроек в память в зависимости от конфигурации */
|
||||
void WriteSettingsToMem(SettingsTypeDef *settings);
|
||||
/* Чтение настроек из памяти в зависимости от конфигурации */
|
||||
void ReadSettingsFromMem(SettingsTypeDef *settings);
|
||||
|
||||
/* Записывает массив настроек через указатель в память */
|
||||
void WriteSettingsArrayToMem(SettingsTypeDef *settings, SettingArrayTypeDef *settingarr);
|
||||
/* итает массив настроек через указатель в память */
|
||||
void ReadSettingsArrayFromMem(SettingsTypeDef *settings, SettingArrayTypeDef *settingarr);
|
||||
|
||||
/** SETMEM_SUPPORT_FUNC
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** SETMEM_TOOLS
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif //_SET_TO_MEM_H_
|
||||
Reference in New Issue
Block a user