STM_ATEM/User/data_storage.h
zhoujie 082ea96e88 feat(adc): 重构ADC数据处理架构,引入1ms定时器中断处理
- 新增TIM2定时器配置,用于1ms周期的ADC数据处理中断
- 将主循环中的ADC数据处理逻辑移至定时器中断回调函数中
- 新增ProcessAdcData函数,封装完整的ADC数据处理流程
- 优化数据缓冲区大小,从2增加到64,提升数据处理能力
- 调整DMA中断优先级,优化系统实时性

🔧 chore(config): 更新STM32CubeMX项目配置

- 在IOC配置文件中添加TIM2定时器配置
- 更新NVIC中断优先级配置
- 调整DMA中断优先级设置
- 更新项目初始化函数调用顺序

📦 build(storage): 优化数据存储缓冲区配置

- 将数据存储缓冲区大小从1024字节增加到32768字节
- 提升数据写入效率,减少文件系统操作频率
2026-01-25 21:20:15 +08:00

76 lines
2.6 KiB
C

#ifndef DATA_STORAGE_H
#define DATA_STORAGE_H
#include "main.h"
#include "fatfs.h"
#include "ff.h"
#include "data_packet.h"
#include "correction.h"
#include <stdint.h>
// 数据存储配置
#define DATA_STORAGE_BUFFER_SIZE 32768 // 缓冲区大小(字节)
#define DATA_STORAGE_FILE_MAX_SIZE (10*1024*1024) // 单个文件最大10MB
#define DATA_STORAGE_PATH "0:/DATA/" // 数据存储路径
#define DATA_STORAGE_FILE_PREFIX "ADC_DATA_" // 文件名前缀
// 缓冲区状态
typedef enum {
BUFFER_IDLE = 0, // 缓冲区空闲
BUFFER_WRITING, // 正在写入数据
BUFFER_READY_TO_FLUSH, // 准备刷新到文件
BUFFER_FLUSHING // 正在刷新到文件
} BufferState_t;
// 数据存储状态
typedef enum {
DATA_STORAGE_IDLE = 0,
DATA_STORAGE_RECORDING,
DATA_STORAGE_ERROR,
DATA_STORAGE_FULL
} DataStorageState_t;
// 数据存储统计信息
typedef struct {
uint32_t total_samples;
uint32_t current_file_size;
uint32_t file_count;
uint32_t error_count;
DataStorageState_t state;
char current_filename[64];
} DataStorageStats_t;
// 双缓冲区结构
typedef struct {
uint8_t data[DATA_STORAGE_BUFFER_SIZE];
uint16_t index;
BufferState_t state;
} DataBuffer_t;
// 数据存储句柄
typedef struct {
FIL file;
DataBuffer_t buffers[2]; // 双缓冲区
uint8_t active_buffer; // 当前活动缓冲区索引 (0 或 1)
uint8_t flush_buffer; // 待刷新缓冲区索引
DataStorageStats_t stats;
uint8_t initialized;
uint8_t flush_in_progress; // 刷新进行中标志
} DataStorageHandle_t;
// 函数声明
HAL_StatusTypeDef DataStorage_Init(DataStorageHandle_t *handle);
HAL_StatusTypeDef DataStorage_StartRecording(DataStorageHandle_t *handle);
HAL_StatusTypeDef DataStorage_StopRecording(DataStorageHandle_t *handle);
HAL_StatusTypeDef DataStorage_WriteData(DataStorageHandle_t *handle, const DataPacket_t *packet);
HAL_StatusTypeDef DataStorage_WriteCorrectedData(DataStorageHandle_t *handle, const CorrectionResult_t *result);
HAL_StatusTypeDef DataStorage_Flush(DataStorageHandle_t *handle);
void DataStorage_GetStats(DataStorageHandle_t *handle, DataStorageStats_t *stats);
HAL_StatusTypeDef DataStorage_CreateNewFile(DataStorageHandle_t *handle);
// 双缓冲区管理函数
HAL_StatusTypeDef DataStorage_SwitchBuffer(DataStorageHandle_t *handle);
HAL_StatusTypeDef DataStorage_FlushBuffer(DataStorageHandle_t *handle, uint8_t buffer_index);
void DataStorage_ProcessBackgroundTasks(DataStorageHandle_t *handle);
#endif // DATA_STORAGE_H