- 新增性能监控模块(performance_monitor),用于实时跟踪系统性能指标 - 添加串口调试输出功能,支持系统状态和性能统计的定期输出 - 实现双缓冲机制,提升ADC数据采集和存储的实时性 - 优化数据存储模块,支持校正后数据的存储和双缓冲管理 - 增强错误处理机制,完善中断回调函数和系统错误恢复 ♻️ refactor(ltc2508): 重构ADC驱动支持双缓冲 - 将ADC数据存储从单缓冲区重构为双缓冲区结构 - 新增缓冲区状态管理和自动切换机制 - 优化DMA传输完成回调,支持多缓冲区处理 - 提供缓冲区获取和释放的API接口 📝 docs(performance): 新增性能评估报告和使用指南 - 创建STM32F405性能评估报告,详细分析系统性能指标 - 编写双缓冲机制使用指南,说明实现原理和使用方法 - 添加LTC2508驱动使用示例代码 🐛 fix(dma): 调整DMA中断优先级 - 将DMA2_Stream7中断优先级从9调整为6,优化中断响应 - 更新STM32CubeMX配置文件中的中断优先级设置 🔧 chore(config): 优化系统配置和代码结构 - 添加串口调试输出控制开关和间隔配置 - 清理中断处理文件,移除重复的回调函数定义 - 增强错误处理函数,添加系统状态恢复机制
76 lines
2.6 KiB
C
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 1024 // 缓冲区大小(字节)
|
|
#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
|