31 lines
1.2 KiB
C
31 lines
1.2 KiB
C
#ifndef FLASH_RING_H
|
|
#define FLASH_RING_H
|
|
#include "stm32f1xx_hal.h"
|
|
|
|
//#define FLASH_PAGE_SIZE 1024
|
|
#define NUM_OF_PAGE_EEPROM 2
|
|
#define FLASH_START_ADDR 0x08000000
|
|
#define FLASH_SIZE (64 * 1024) // для STM32F103C8
|
|
#define LAST_PAGE_ADDR (FLASH_START_ADDR + FLASH_SIZE - NUM_OF_PAGE_EEPROM*FLASH_PAGE_SIZE)
|
|
#define RECORD_SIZE 255
|
|
#define RECORDS_PER_PAGE NUM_OF_PAGE_EEPROM*(FLASH_PAGE_SIZE / RECORD_SIZE) // 10 записей
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
typedef struct {
|
|
uint32_t timestamp;
|
|
uint8_t data[RECORD_SIZE-4]; // 200 - 4 байта timestamp
|
|
} FlashRecord_t;
|
|
#pragma pack(pop)
|
|
|
|
typedef struct {
|
|
uint32_t write_index; // индекс следующей записи (0-9)
|
|
uint8_t initialized; // флаг инициализации
|
|
} BufferState_t;
|
|
BufferState_t buffer_init(void);
|
|
HAL_StatusTypeDef buffer_write_record(FlashRecord_t* record, BufferState_t* state);
|
|
HAL_StatusTypeDef erase_flash_page(void) ;
|
|
HAL_StatusTypeDef write_flash_record(uint32_t address, FlashRecord_t* record);
|
|
FlashRecord_t* buffer_read_record(uint32_t index);
|
|
void buffer_get_all_records(FlashRecord_t* records[], uint32_t* count);
|
|
#endif // FLASH_RING_H
|