# 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次数据来不及处理，需要优化数据处理流程或降低采样率。
