测量单片机程序实时性不能只看平均速度,核心是验证最坏情况下的响应时间。常用方法:
1. **GPIO翻转+示波器/逻辑分析仪**:在关键任务入口和出口翻转IO,测量高电平持续时间即任务执行时间,再叠加中断抖动;这是最直观的裸机方法。
2. **硬件定时器/周期计数器**:用DWT->CYCCNT(Cortex-M)记录指令周期数,精度可达单时钟周期,适合短代码段。示例:
```c
DWT->CTRL |= 1; DWT->CYCCNT = 0; // 使能并清零
// 被测代码段
uint32_t cycles = DWT->CYCCNT;
printf("耗时 %u cycles\n", cycles);
```
3. **RTOS内核统计**:若用FreeRTOS,可使用`vTaskGetRunTimeStats()`获取各任务CPU占用率,或开启trace,用SystemView等工具分析任务切换时序;同时关注中断延迟时间——通过定时器周期触发并记录实际进入ISR的时刻偏差。
建议建立基准测试:固定输入、多次采样取最大耗时作为Worst Case,并验证在总线冲突/中断嵌套时该值仍满足需求。最后结合看门狗,若超时则记录现场。
mcuku 阿沐 · 2026-08-14