Files
STM32_MemorySPI/Inc/set_to_mem.h

143 lines
7.2 KiB
C
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
**************************************************************************
* @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 f.settings_need_to_update для записи настроек в память,
когда необходимо это сделать (само по себе оно не может определить когда надо записать,
т.к. нет буфера для отслеживания изменений)
- @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)) ///< Бит ошибки - чтение
typedef struct
{
unsigned settings_need_to_update:1;
unsigned settings_is_updated:1;
}SettingsFlagsTypeDef;
/**
* @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; ///< Размер всего массива настроек
SettingsFlagsTypeDef f; ///< Флаг для обновления настроек в памяти
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_