- 新增VSCode编辑器配置,启用保存时自动格式化 - 新增DMA2_Stream5和USART1中断处理函数,优化SPI传输性能 - 移除TIM1相关配置和性能监控模块,简化系统架构 - 优化GPIO配置,将ADC_SYNC和PA8引脚合并配置 - 简化系统监控模块,仅保留采样计数和数据溢出统计 - 优化SPI配置,使用16位数据宽度并提高DMA优先级 - 提高USART波特率(USART1:2Mbps, USART3:921600bps) - 优化LTC2508驱动,增加初始化状态检查和缓冲区大小 - 修正数据存储模块,使用校正数据包而非校正结果结构体 - 优化RS485驱动,使用中断传输并添加传输完成回调 - 更新IOC配置文件,移除TIM1并调整中断优先级配置 - 新增系统监控简化说明文档,详细记录架构变更
131 lines
3.5 KiB
Markdown
131 lines
3.5 KiB
Markdown
# 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次数据来不及处理,需要优化数据处理流程或降低采样率。
|