- 新增配置管理器模块,支持从SD卡加载运行时配置 - 将数据输出模式从编译时宏改为运行时配置,提高灵活性 - 新增配置文件 `CONFIG.TXT`,支持串口输出和存储功能的动态开关 - 集成配置管理器到主程序,在系统启动时自动加载配置 - 更新数据存储模块,使用配置管理器管理会话序号 🐛 fix(usart): 修复USART3中断配置并优化波特率 - 添加USART3中断处理函数声明和实现 - 将USART3波特率从921600提升至2000000以提高通信速率 - 调整USART1中断优先级从2改为11,优化中断响应 - 在USART3 MSP初始化和反初始化中添加中断配置 📝 docs(user): 新增功能说明文档 - 新增《配置管理功能说明》文档,详细说明运行时配置的使用方法 - 新增《串口发送监控功能说明》文档,说明新增的串口统计功能 - 文档包含配置项说明、文件格式、使用示例和注意事项 ✨ feat(monitor): 增强系统监控功能 - 在系统监控统计中添加串口发送监控字段(发送次数、字节数、错误数) - 新增串口发送统计报告函数,集成到RS485驱动中 - 优化监控状态保存格式,采用精简格式减少文件写入阻塞时间 - 监控数据现在包含串口统计信息,便于性能分析和故障排查 ♻️ refactor(main): 重构主程序配置处理逻辑 - 移除编译时宏 `DATA_OUTPUT_MODE_UART` 和 `DATA_OUTPUT_MODE_STORAGE` - 使用 `Config_IsUartOutputEnabled()` 和 `Config_IsStorageEnabled()` 函数替代 - 优化数据存储启动逻辑,仅在存储功能启用时开始记录 - 添加配置加载成功/失败的调试输出信息
3.5 KiB
3.5 KiB
串口发送监控功能说明
概述
在系统监控模块中增加了串口(UART/RS485)发送数据的统计功能,用于跟踪通过串口发出的数据量和错误情况。
新增功能
1. 监控统计字段
在 SystemMonitorStats_t 结构体中新增了三个字段:
// 串口发送监控信息
uint32_t uart_tx_count; // 串口发送次数
uint32_t uart_tx_bytes; // 串口发送总字节数
uint32_t uart_tx_error_count; // 串口发送错误次数
2. 监控函数
SystemMonitor_ReportUARTTx()
void SystemMonitor_ReportUARTTx(uint32_t bytes_sent);
- 功能: 报告成功的串口发送操作
- 参数:
bytes_sent- 本次发送的字节数 - 调用时机: 在
RS485_SendData()中DMA启动成功后调用
SystemMonitor_ReportUARTTxError()
void SystemMonitor_ReportUARTTxError(void);
- 功能: 报告串口发送错误
- 调用时机: 在
RS485_SendData()中DMA启动失败时调用
3. 集成位置
rs485_driver.c
在 RS485_SendData() 函数中集成了监控调用:
- DMA启动成功时,调用
SystemMonitor_ReportUARTTx(Size)记录发送字节数 - DMA启动失败时,调用
SystemMonitor_ReportUARTTxError()记录错误
4. 监控数据保存
监控数据会定期保存到SD卡的 LOG.TXT 文件中,采用精简格式以减少阻塞时间:
Samples:[样本数] Ovf:[溢出数]
SD:Wr=[写入次数] Err=[错误数] Full=[满次数] Bytes=[字节数] Files=[文件数] Drop=[丢弃数]
UART:Tx=[发送次数] Bytes=[字节数] Err=[错误数]
示例输出:
Samples:1000000 Ovf:5
SD:Wr=500 Err=2 Full=3 Bytes=32000000 Files=10 Drop=15
UART:Tx=250 Bytes=12500 Err=1
使用示例
获取串口统计信息
SystemMonitorStats_t stats;
SystemMonitor_GetStats(&stats);
// 访问串口统计数据
uint32_t tx_count = stats.uart_tx_count;
uint32_t tx_bytes = stats.uart_tx_bytes;
uint32_t tx_errors = stats.uart_tx_error_count;
计算发送速率
// 假设运行时间为 runtime_seconds 秒
float bytes_per_second = (float)stats.uart_tx_bytes / runtime_seconds;
float packets_per_second = (float)stats.uart_tx_count / runtime_seconds;
文件修改清单
-
User/system_monitor.h
- 在
SystemMonitorStats_t结构体中添加串口统计字段 - 声明
SystemMonitor_ReportUARTTx()和SystemMonitor_ReportUARTTxError()函数
- 在
-
User/system_monitor.c
- 实现
SystemMonitor_ReportUARTTx()函数 - 实现
SystemMonitor_ReportUARTTxError()函数 - 更新
SystemMonitor_SaveStatus()函数,在保存的日志中包含串口统计信息
- 实现
-
User/rs485_driver.c
- 包含
system_monitor.h头文件 - 在
RS485_SendData()函数中添加监控调用
- 包含
注意事项
- 性能影响: 监控函数调用非常轻量(仅增加计数器),对系统性能影响可忽略不计
- 线程安全: 当前实现未使用互斥锁,如果在多线程环境中使用,建议添加适当的保护机制
- 计数器溢出: 使用
uint32_t类型,在高频发送场景下可能溢出,建议定期保存和重置统计数据 - 错误统计: 仅统计DMA启动失败的情况,不包括传输过程中的错误(如需要可在DMA错误回调中添加)
扩展建议
如需更详细的监控,可以考虑添加:
- 平均包大小统计
- 发送延迟统计
- 忙状态拒绝次数(
HAL_BUSY返回次数) - 按时间段的发送速率统计