- 新增VSCode编辑器配置,启用保存时自动格式化 - 新增DMA2_Stream5和USART1中断处理函数,优化SPI传输性能 - 移除TIM1相关配置和性能监控模块,简化系统架构 - 优化GPIO配置,将ADC_SYNC和PA8引脚合并配置 - 简化系统监控模块,仅保留采样计数和数据溢出统计 - 优化SPI配置,使用16位数据宽度并提高DMA优先级 - 提高USART波特率(USART1:2Mbps, USART3:921600bps) - 优化LTC2508驱动,增加初始化状态检查和缓冲区大小 - 修正数据存储模块,使用校正数据包而非校正结果结构体 - 优化RS485驱动,使用中断传输并添加传输完成回调 - 更新IOC配置文件,移除TIM1并调整中断优先级配置 - 新增系统监控简化说明文档,详细记录架构变更
3.5 KiB
3.5 KiB
SystemMonitor 简化说明
简化目标
为了提高系统性能,将SystemMonitor模块从复杂的状态机和多种错误类型简化为只统计两个关键指标:
- 采样样点数 - 记录总共采集的样本数量
- 数据溢出次数 - 记录数据来不及处理的次数
简化前后对比
简化前的结构
typedef struct {
SystemState_t current_state; // 系统状态
SystemError_t last_error; // 最后错误
uint32_t uptime_seconds; // 运行时间
uint32_t total_samples; // 总样本数
uint32_t error_count; // 错误计数
uint32_t memory_usage; // 内存使用
uint8_t cpu_usage_percent; // CPU使用率
uint8_t temperature_celsius; // 温度
} SystemMonitorStats_t;
包含多个函数:
SystemMonitor_SetState()- 设置系统状态SystemMonitor_ReportError()- 报告各种错误SystemMonitor_Update()- 定期更新统计SystemMonitor_IsHealthy()- 健康检查
简化后的结构
typedef struct {
uint32_t total_samples; // 总采样样点数
uint32_t data_overflow_count; // 数据来不及处理的次数
} SystemMonitorStats_t;
只保留3个核心函数:
SystemMonitor_Init()- 初始化SystemMonitor_IncrementSampleCount()- 增加采样计数SystemMonitor_ReportDataOverflow()- 报告数据溢出SystemMonitor_GetStats()- 获取统计信息
使用方式
1. 初始化
在系统启动时调用:
#if ENABLE_SYSTEM_MONITOR
SystemMonitor_Init();
#endif
2. 采样计数
在 ProcessAdcData() 中,每处理一个样本时调用:
#if ENABLE_SYSTEM_MONITOR
SystemMonitor_IncrementSampleCount();
#endif
3. 数据溢出报告
当检测到数据来不及处理时(缓冲区无可用数据但应该有数据):
} else {
// 数据来不及处理
#if ENABLE_SYSTEM_MONITOR
SystemMonitor_ReportDataOverflow();
#endif
}
4. 查看统计信息
通过调试输出查看:
SystemMonitorStats_t sys_stats;
SystemMonitor_GetStats(&sys_stats);
snprintf(buffer, sizeof(buffer),
"\r\n=== System Stats ===\r\n"
"Total Samples: %lu\r\n"
"Data Overflow: %lu\r\n",
sys_stats.total_samples,
sys_stats.data_overflow_count);
性能优势
- 减少函数调用开销 - 从多个状态设置和错误报告函数简化为2个简单的计数器操作
- 减少内存占用 - 统计结构从8个字段减少到2个字段
- 消除复杂逻辑 - 移除状态机、健康检查等复杂逻辑
- 提高实时性 - 减少中断和关键路径中的处理时间
关键指标说明
total_samples(总采样样点数)
- 每成功处理一个ADC样本时递增
- 用于监控系统采样率和运行状态
- 可以计算实际采样率:
samples / uptime
data_overflow_count(数据溢出次数)
- 当数据处理速度跟不上采样速度时递增
- 表示数据丢失或处理延迟的情况
- 理想情况下应该为0或非常小的值
调试输出示例
=== System Stats ===
Total Samples: 40000
Data Overflow: 0
这表示系统已采集40000个样本,没有发生数据溢出,系统运行正常。
如果看到:
=== System Stats ===
Total Samples: 40000
Data Overflow: 150
说明有150次数据来不及处理,需要优化数据处理流程或降低采样率。