STM_ATEM/User/SystemMonitor_Simplification_Notes.md
zhoujie fee2e96eaa feat(system): 优化系统性能并简化监控模块
- 新增VSCode编辑器配置,启用保存时自动格式化
- 新增DMA2_Stream5和USART1中断处理函数,优化SPI传输性能
- 移除TIM1相关配置和性能监控模块,简化系统架构
- 优化GPIO配置,将ADC_SYNC和PA8引脚合并配置
- 简化系统监控模块,仅保留采样计数和数据溢出统计
- 优化SPI配置,使用16位数据宽度并提高DMA优先级
- 提高USART波特率(USART1:2Mbps, USART3:921600bps)
- 优化LTC2508驱动,增加初始化状态检查和缓冲区大小
- 修正数据存储模块,使用校正数据包而非校正结果结构体
- 优化RS485驱动,使用中断传输并添加传输完成回调
- 更新IOC配置文件,移除TIM1并调整中断优先级配置
- 新增系统监控简化说明文档,详细记录架构变更
2026-02-06 22:45:25 +08:00

131 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# SystemMonitor 简化说明
## 简化目标
为了提高系统性能将SystemMonitor模块从复杂的状态机和多种错误类型简化为只统计两个关键指标
1. **采样样点数** - 记录总共采集的样本数量
2. **数据溢出次数** - 记录数据来不及处理的次数
## 简化前后对比
### 简化前的结构
```c
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()` - 健康检查
### 简化后的结构
```c
typedef struct {
uint32_t total_samples; // 总采样样点数
uint32_t data_overflow_count; // 数据来不及处理的次数
} SystemMonitorStats_t;
```
只保留3个核心函数
- [`SystemMonitor_Init()`](User/system_monitor.h:14) - 初始化
- [`SystemMonitor_IncrementSampleCount()`](User/system_monitor.h:15) - 增加采样计数
- [`SystemMonitor_ReportDataOverflow()`](User/system_monitor.h:16) - 报告数据溢出
- [`SystemMonitor_GetStats()`](User/system_monitor.h:17) - 获取统计信息
## 使用方式
### 1. 初始化
在系统启动时调用:
```c
#if ENABLE_SYSTEM_MONITOR
SystemMonitor_Init();
#endif
```
### 2. 采样计数
在 [`ProcessAdcData()`](Core/Src/main.c:146) 中,每处理一个样本时调用:
```c
#if ENABLE_SYSTEM_MONITOR
SystemMonitor_IncrementSampleCount();
#endif
```
### 3. 数据溢出报告
当检测到数据来不及处理时(缓冲区无可用数据但应该有数据):
```c
} else {
// 数据来不及处理
#if ENABLE_SYSTEM_MONITOR
SystemMonitor_ReportDataOverflow();
#endif
}
```
### 4. 查看统计信息
通过调试输出查看:
```c
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);
```
## 性能优势
1. **减少函数调用开销** - 从多个状态设置和错误报告函数简化为2个简单的计数器操作
2. **减少内存占用** - 统计结构从8个字段减少到2个字段
3. **消除复杂逻辑** - 移除状态机、健康检查等复杂逻辑
4. **提高实时性** - 减少中断和关键路径中的处理时间
## 关键指标说明
### 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次数据来不及处理需要优化数据处理流程或降低采样率。