固件使用STM32F407的DWT周期计数器,持续记录以下路径从本次复位以来的最坏执行周期:
PlsrProcess任务自身CPU执行时间;PlsrProcess包含高优先级中断抢占的墙钟响应时间;PlsrProcess六个内部阶段的自身CPU时间,用于定位超过1ms的峰值路径。统计结果通过D1200~D1537控制窗口中的D1256~D1263和D1456~D1469发布。D1205~D1206给出CPU计时频率,D1207为性能统计版本V7;V7保留D1470~D1515持久化诊断并增加D1516~D1537 USB CDC只读统计,但不改变P16各计时字段。该区域属于项目诊断增强,不对应信捷固定软元件。
| 地址 | 内容 |
|---|---|
| D1256~D1257 | PlsrProcess自身CPU最大周期数(32位) |
| D1258~D1259 | PlsrProcess墙钟响应最大周期数(32位) |
| D1260~D1261 | TIM6控制ISR最大周期数(32位) |
| D1262 | 输出定时器ISR最大周期数(16位饱和) |
| D1263 | TIM9/TIM12计数ISR最大周期数(16位饱和) |
| D1456~D1457 | 脉冲合并与保护检查最大周期数(32位) |
| D1458~D1459 | 关键事件处理最大周期数(32位) |
| D1460~D1461 | 命令队列处理最大周期数(32位) |
| D1462~D1463 | 普通事件与方向批量提交最大周期数(32位) |
| D1464~D1465 | HAL tick、路径和Profile推进最大周期数(32位) |
| D1466~D1467 | 合并后的HSD Backup SRAM检查点最大周期数(32位) |
| D1468~D1469 | 双AB末周期快速门控最大周期数(32位) |
重新复位开发板后运行P14脚本:
python HostComputer\plsr_modbus_counter_stress_test.py --port COM5
脚本在四轴100kHz、Modbus持续轮询完成后自动读取P16数据,显示cycles和微秒,不需要手工读取Watch。
PlsrProcess自身CPU时间必须小于1ms对应周期数。PlsrProcess墙钟响应单独显示;超过1ms时给出抢占提示,不与函数自身WCET混算。建议把脚本输出的五个总体最坏值、六个阶段值和五个流程检查点记录到测试报告。V7保留自身CPU时间和包含抢占的墙钟响应时间、六个分阶段独立最大值及合并后的HSD检查点,并保留D1468~D1469的双AB快速门控统计;阶段最大值来自不同轮次,不能直接相加作为总执行时间。
硬复位清除DWT历史最大值后,四轴PULSE/DIR 100kHz、每轴200000脉冲及Modbus并发轮询实测:
PlsrProcess自身最大53748 cycles(319.929us),低于168000 cycles预算;PlsrProcess响应最大85655 cycles(509.851us);P14端子波形同时确认Q0~Q3各严格200000个上升沿,因此本次P16 PULSE/DIR性能闭环验收通过。D1468~D1469只属于双AB新路径,仍须随双AB 100kHz板测单独关闭。
该记录是本轮AB、持久化V7窗口和USB诊断落盘前的已通过基线。烧录最终工作区后仍须硬复位并重跑
P14/P16;只有新输出继续满足预算且四轴计数/波形不回退,才可作为本批次发布回归证据。