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

3.5 KiB
Raw Blame History

SystemMonitor 简化说明

简化目标

为了提高系统性能将SystemMonitor模块从复杂的状态机和多种错误类型简化为只统计两个关键指标

  1. 采样样点数 - 记录总共采集的样本数量
  2. 数据溢出次数 - 记录数据来不及处理的次数

简化前后对比

简化前的结构

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个核心函数

使用方式

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);

性能优势

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